2017-02-26 3 views
-1

Was ich versuche zu tun ist, den Vornamen und Nachnamen eines Kunden aus meiner Datenbank auf ein PHP-Dokument zu drucken, und ich bekomme Fehler.Versuch, Vorname und Nachname im Programm zu drucken, Fehler erhalten

Dies sind die Fehler:

Notice: Undefined index: fName in D:\xampp\htdocs\tech_support\product_register\index.php on line 36 

Notice: Undefined index: lName in D:\xampp\htdocs\tech_support\product_register\index.php on line 37 

Dies ist ein neuer Fehler und ich weiß nicht, was das bedeutet. Hier

ist der Code, den ich gemacht habe:

index.php:

<?php 

// Get your db connection file, be sure it has a new connection to the 
// tech support database 
require('../model/database.php'); 

// Get the models needed - work will need to be done in both 
require('../model/customer_db.php'); 
require('../model/product_db.php'); 
require('../model/registration_db.php'); 

$action = filter_input(INPUT_POST, 'action'); 
if ($action == NULL) { 
    $action = filter_input(INPUT_POST, 'action'); 
    if ($action == null) { 
     $action = 'product_register'; 
    } 
} 

//When the user clicks the first link on the home page, bring them to the login page. 
if ($action == 'product_register') { 
    include('customer_login.php'); 
} 

//When the user clicks the login button, the system checks for errors in their typing. 
//If no errors are present, proceed to product_register.php. 
else if ($action == 'login') { 
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); 
    $firstName = filter_input(INPUT_POST, 'fName'); 
    $lastName = filter_input(INPUT_POST, 'lName'); 
    if ($email == NULL || $email == FALSE) { 
     $error = 'Invalid email. Try again.'; 
     include('../errors/error.php'); 
    } else { 
     $custEmail = get_email($_POST['email']); 
     $fName = get_fname($_POST['fName']); 
     $lName = get_email($_POST['lName']);   
     if ($custEmail) { 
      $fName = get_fname($firstName); 
      $lName = get_lname($lastName); 
      $categories = get_products(); 

      include('product_register.php'); 
     } else { 
      $error = 'Invalid email. Try again.'; 
      include('../errors/error.php'); 
     } 
    } 
} 

customers_db.php:

<?php 
//Get a customer by their email address and 
//check if the data entered in the form is true or false 
function get_email($email) { 
    global $db; 
    $query = 'SELECT * FROM customers WHERE email = :email';  
    $statement = $db->prepare($query); 
    $statement->bindValue(':email', $email); 
    $statement->execute(); 
    $status = false; 
    if($statement->rowCount()){ 
     $status = true; 
    }  
    return $status; 
} 

//Get customer by their first name 
function get_fname($firstName) { 
    global $db; 
    $query = 'SELECT * FROM customers WHERE firstName = :firstName';  
    $statement = $db->prepare($query); 
    $statement->bindValue(':firstName', $firstName); 
    $statement->execute(); 
} 

//Get customer by their last name 
function get_lname($lastName) { 
    global $db; 
    $query = 'SELECT * FROM customers WHERE lastName = :lastName';  
    $statement = $db->prepare($query); 
    $statement->bindValue(':lastName', $lastName); 
    $statement->execute(); 
} 

product_register.php:

<?php include '../view/header.php'; ?> 
<?php require('../model/database.php'); ?> 
<main> 

    <h2>Register Product</h2> 
    <?php if (isset($message)) : ?> 
     <p><?php echo $message; ?></p> 
     <?php 
    else: 
     $email= filter_input(INPUT_POST, 'email'); 
     $firstName = filter_input(INPUT_POST, 'firstName'); 
    $lastName = filter_input(INPUT_POST, 'lastName'); 
     ?> 

    <?php endif; ?> 
     <form action="index.php" method="post"> 
    <label>Customer:</label> 
     <?php echo $fName; ?>&nbsp;&nbsp;&nbsp;<?php echo $lName; ?><br> 
    <label>Product:</label> 
    <select> 
     <?php foreach ($categories as $category) : ?> 
      <option value="<?php echo $cateogry['productCode']; ?>"> 
       <?php echo $category['name']; ?> 
      </option> 
     <?php endforeach; ?> 
     </select><br> 

     <input type="hidden" name="action" value="register_product"> 
     <input type="submit" value="Register Product"> 
    </form> 
</main> 
<?php include '../view/footer.php'; ?> 

Dies ist, was es angenommen hat o soll sein, den Namen des Kunden so zu drucken: enter image description here

Irgendwelche Ideen auf, wie man dieses Problem repariert?

+0

"Dies ist ein neuer Fehler und ich weiß nicht, was das bedeutet." - http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php –

Antwort

0

Ich möchte Ihnen helfen, eine Lösung zu dieser Frage zu bekommen. Ich fand es schwierig, den Code product_register.php zu lesen, weil php und html umgeschaltet wurden. Also habe ich ihn komplett neu geschrieben und hinzugefügt, was Gaurav in den Code geschrieben hat.

Ich fügte Ihrem Produkt <select> auch ein Namensattribut hinzu, so dass der Wert beim Senden POST wurde.

product_register.php:

include '../view/header.php'; 
require('../model/database.php'); 
echo "<main>"; 
    echo "<h2>Register Product</h2>"; 
    if(isset($message)){ 
     echo "<p>$message</p>"; 
    }else{ 
     $email=filter_input(INPUT_POST,'email'); 
     $firstName=filter_input(INPUT_POST,'firstName'); 
     $lastName = filter_input(INPUT_POST,'lastName'); 
    } 
    echo "<form action=\"index.php\" method=\"post\">"; 
     echo "<label>Customer: </label>$fName $lName<br>"; 
      echo "<input type=\"hidden\" name=\"email\" value=\"$email\">"; // POST this value 
      echo "<input type=\"hidden\" name=\"fName\" value=\"$firstName\">"; // POST this value 
      echo "<input type=\"hidden\" name=\"lName\" value=\"$lastName\">"; // POST this value 
     echo "<label>Product: </label>"; 
     echo "<select name=\"category\">"; // declare name attr so that this value is POSTed 
      foreach($categories as $category){ 
       echo "<option value=\"{$cateogry['productCode']}\">{$category['name']}</option>"; 
      } 
     echo "</select><br>"; 
     echo "<input type=\"hidden\" name=\"action\" value=\"register_product\">"; 
     echo "<input type=\"submit\" value=\"Register Product\">"; 
    echo "</form>"; 
echo "</main>"; 
include '../view/footer.php'; 

Nur ein paar hinzugefügt Überlegungen ... index.php:

Änderung:

$action = filter_input(INPUT_POST, 'action'); 
if ($action == NULL) { 
    $action = filter_input(INPUT_POST, 'action'); 
    if ($action == null) { 
     $action = 'product_register'; 
    } 
} 

zu:

Es scheint, als könnte Ihr Code von der Verwendung von $ _SESSION Speicher für die Benutzeridentifikation profitieren, aber die Erstellung einer Lösung wäre zu aufwendig für die Veröffentlichung auf SO, also empfehle ich Ihnen, dies auf Ihrer Website zu recherchieren besitzen.

scheint verdammt zu sein für immer Regie zu customer_login.php. Vielleicht möchten Sie einen Scheck hinzufügen, um zu sehen, ob sie bereits erfolgreich angemeldet sind:

//Bring user to the login page if not successfully logged in. 
if($action=='product_register'){ 
    if(!isset($_POST['email']) || isset($_POST['fName']) || isset($_POST['lName'])){ 
     $error='Invalid email. Try again.'; 
     include('customer_login.php'); 
    }else{ 
     // this process (from what I can tell) does not check actually verify that the user's three login details exist in the same row of the database, and so is not effective. 
     $custEmail = get_email(filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)); 
     if($custEmail){ 
      $fName = get_fname(filter_input(INPUT_POST,'fName')); 
      $lName = get_email(filter_input(INPUT_POST,'lName')); 
      $categories = get_products(); 
      include('product_register.php'); 
     }else{ 
      $error = 'Invalid email. Try again.'; 
      include('customer_login.php'); 
     } 
    } 
} 

Ihr Code ist nicht in einer Weise, dass ich beruflich verwenden würde. Vielleicht gibt es mehr zu diesem Prozess, den Sie vorgestellt haben, aber von außen nach innen, empfehle ich, dass Sie einen soliden Login-Prozess recherchieren und von dort aus arbeiten, um den Zugriff auf product_register.php nur legitimen Benutzern zu erlauben.

0

Sie anzeigen nur variabel zwischen Formularabschnitt in product_register.php so, wenn klicken Benutzer auf Absenden-Button als es keine fname & lname in POST-Array, Sie durch var_dump($_POST) auf index.php überprüfen können. wenn Sie $fname oder $lname durch Sie senden möchten, in versteckten Eingabetyp festgelegt, wie dies in Form

<input type="hidden" name="fname" value="<?php echo $fname ; ?>"> 

<input type="hidden" name="fname" value="<?php echo $fname ; ?>"> 

so Benutzer klicken Sie auf Absenden-Button, als Sie $_POST['fname'] oder $_POST['lname'] durch product_register.php verklagen können.

Verwandte Themen