2017-02-26 4 views
0

So habe ich nicht die foggiest Idee auf was getan werden muss, um dieses Dropdown-Menü zu arbeiten. Es hat früher funktioniert, aber als ich einige Änderungen vorgenommen habe, hat es nicht mehr funktioniert. Die Fehlermeldung angezeigt wird:PHP dropdown funktionierte vorher, jetzt ist es nicht

Notice: Undefined variable: categories in D:\xampp\htdocs\tech_support\product_register\product_register.php on line 19 

Aber ich habe es in meinem index.php definiert:

<?php 

    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); 
     if ($email == NULL || $email == FALSE) { 
      $error = 'Invalid email. Try again.'; 
      include('../errors/error.php'); 
     } else { 
      $custEmail = get_email($_POST['email']); 
      if ($custEmail) { 
       $category_name = get_product_name($productName); 
       $categories = get_products(); 
       $products = get_products_by_name($name); 
       header("Location: product_register.php"); 
      } else { 
       $error = 'Invalid email. Try again.'; 
       include('../errors/error.php'); 
      } 
     } 
    } 
?> 

und ich habe es definiert in meinen Funktionen

<?php 

// Get all the products for the registration dropdown list 

function get_products() { 
    global $db; 
    $query = 'SELECT * FROM products 
       ORDER BY productCode'; 
    $statement = $db->prepare($query); 
    $statement->execute(); 
    return $statement;  
} 

function get_product_name($productName) { 
    global $db; 
    $query = 'SELECT * FROM products 
       WHERE productCode = :product_code';  
    $statement = $db->prepare($query); 
    $statement->bindValue(':product_name', $productName); 
    $statement->execute();  
    $product = $statement->fetch(); 
    $statement->closeCursor();  
    $product_name = $product['name']; 
    return $product_name; 
} 

function get_products_by_name($name) { 
    global $db; 
    $query = 'SELECT * FROM products 
       WHERE products.name = :name 
       ORDER BY productCode'; 
    $statement = $db->prepare($query); 
    $statement->bindValue(":name", $name); 
    $statement->execute(); 
    $products = $statement->fetchAll(); 
    $statement->closeCursor(); 
    return $products; 
} 

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'); 
     ?> 

    <?php endif; ?> 
     <form action="index.php" method="post"> 
    <label>Customer:</label><br> 
<?php echo $email; ?> 
    <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'; ?> 

Was bin ich doi falsch?

+0

Show '' 'product_register.php''' Inhalt – Wolen

+0

Ich würde die Zeile' 19' in 'product_register.php' betrachten. Ich erwarte, dass es einen Verweis auf eine Variable gibt, die nicht im Bereich ist. – spencer7593

+1

war diese Zeile 'header (" Location: product_register.php "); ein Include vorher? Im Moment wirst du umgeleitet, daher geht '$ categories'" verloren ". – Jeff

Antwort

2

Da Sie haben ein geändert zu einer Umleitung sind hier:

header("Location: product_register.php"); 

der Verweis auf $categories geht verloren.

Entweder ändern Sie es zurück zu include('product_register.php') oder gehen Sie mit @ Wolen-Lösung.

0

Dies ist nicht die richtige Antwort

Ich dachte, es war, als ich es geschrieben Jedoch habe ich nicht löschen werde, wie ich denke, es ist nach wie vor die Notwendigkeit, zeigt den Ablauf des Codes und zu verstehen, es zu folgen - Ich hörte auf, die if-Anweisungen zu sehen, damit OP weiter debuggen konnte - ich habe die header()-Anweisung in einem von ihnen nicht entdeckt.

Obwohl die Variable definiert ist, wird es in 3 if/else-Anweisungen verschachtelt:

if ($action == 'login') { 
    if ($email == NULL || $email == FALSE) { 
    } else { 
     if ($custEmail) { 
      $categories = get_products(); 

also entweder:

  • $action nicht gleich 'login'
  • oder$email ist NULL oder FALSE
  • oder$custEmail ist leer, NULL, FALSE oder eine Reihe anderer nicht wahrer Aussagen.
+0

Er benutzt '' 'header()' '', es wird sowieso nicht funktionieren. – Wolen

+0

@Wolen Sie sollten das als Antwort eingereicht haben - ich sehe, jemand anderes tat kurz nach – Theo

+1

@Theo Ja, ich habe es als eine Antwort geschrieben, nachdem ich das gleiche kommentiert und das OP gab mir die Antwort, dass mein Platz das Richtige war ein. – Jeff

2

Sie machen von index.php zu product_register.php umleiten, wo man nicht $categories Variable deklariert haben. Wenn Sie header() verwenden, um Benutzer auf eine andere Seite umzuleiten, und Sie einige Daten weitergeben müssen, empfehle ich Ihnen, Sitzung zu verwenden. Sie müssen die Sitzung starten, indem Sie session_start() oben auf der Datei verwenden. In diesem Fall müssen Sie diese Funktion in beiden Dateien aufrufen.

Dann vor header() in index.php einfach speichern $categories in Sitzung z.

$_SESSION['categories'] = get_products(); 

Dann in product_register.php statt

<?php foreach ($categories as $category) : ?> 

tun

<?php foreach ($_SESSION['categories'] as $category) : ?> 

oder

<?php 
$categories = $_SESSION['categories']; 
foreach ($categories as $category): 
?> 
+0

Sehr gute Antwort bei 'header'-redirect! Mach weiter! – Jeff

Verwandte Themen