2017-02-26 42 views
0

所以我不知道需要做什麼才能讓下拉菜單工作。它在工作之前,但是當我做了一些修改後,它不再工作了。顯示錯誤消息是:PHP下拉式工作之前,現在不是

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

但我必須在我的index.php定義:

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

而且我已經在我的功能

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

我是什麼doi恩錯了嗎?

+0

顯示'''product_register.php'''內容 – Wolen

+0

我會看'product_register.php'中的行'19'。我希望有一個參考範圍內的變量。 – spencer7593

+1

是這一行'header(「Location:product_register.php」);'之前的包含?現在你正在重定向,因此「$ categories」會「丟失」。 – Jeff

回答

2

既然你已經改變了包括對重定向這裏:

header("Location: product_register.php"); 

參考$categories迷路了。

要麼將​​其更改回include('product_register.php'),要麼使用@ Wolen的解決方案。

0

這是不正確的答案

我認爲這是當我張貼 但是我不會刪除,因爲我認爲它仍然顯示需要遵循代碼的流程和理解 - 我停下來看到if語句,以便OP可以繼續調試 - 我沒有發現其中一個header()聲明。

雖然變量被定義,它嵌套在3 if/else語句:

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

因此,要麼:

  • $action不等於'login'
  • $emailNULLFALSE
  • $custEmail爲空,NULLFALSE或一些其他非真實陳述。
+0

他使用'''header()''',它不會工作。 – Wolen

+0

@Wolen你應該提交這個答案 - 我看到別人在 – Theo

+1

@Theo後面做了,我把它作爲答案發布,在我評論過同樣的情況後,OP給了我答覆,我的位置是正確的一。 – Jeff

2

你做重定向從index.phpproduct_register.php,你沒有聲明$categories變量。如果您使用header()將用戶重定向到另一個頁面,並且您需要傳遞一些數據,我建議您使用會話。您必須通過在文件頂部使用session_start()開始會話。在這種情況下,你必須在這兩個文件中調用這個函數。

然後在header()之前index.php在會話中只保存$categories例如。

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

然後在product_register。PHP 代替

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

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

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

與'header'-redirect一起住的很好的答案!保持! – Jeff