下拉值未提交给post数组

时间:2016-03-15 14:11:44

标签: php html mysql arrays

目前正在使用php项目,我在phpmyadmin中连接到数据库。我目前正在实现我的一对多关系,在我的一个表单上有一个下拉列表,其中包含我的数据库中的产品可以拥有的类别(外键)列表,但是当我检查post数组时,包含插入查询的所有值的数组除了外键之外一切都在那里。

下拉列表和值数组:

 <select name="Category_ID">
    <?php
     foreach ($category as $cat) {
     echo '<option value="' . $cat['ID'] . '">' . $cat['ID'] . '</option>';
     }
      ?>
   </select>


     Array ( 
    [authorName] => Hiroshi Sakurazaka 
    [bookName] => All You Need Is Kill 
    [costPrice] => 59
    [sellPrice] => 99 
    [productCatID] => ) 
    Could not insert book

这是将formdata数组中的数据转换为对象的文件:

<?php
require_once 'product.php';   //Connecting to the product class
require_once 'Classes/productTable.php'; //Connecting to the TableGateway
require_once 'Classes/Connection.php'; //Connecting to the Connection class
require_once 'validateProduct.php';//Connecting to the product validation
require_once 'utils/functions.php';

//start_session();
//
//if (!is_logged_in()) {
//    header("Location: login_form.php");
//}

    echo '<pre>';
    print_r($_POST);
    echo '</pre>';

$formdata = array();
$errors = array();

validate($formdata, $errors);

if (empty($errors)) {
    $AuthorName = $formdata['AuthorName'];
    $BookName = $formdata['BookName'];
    $costPrice = $formdata['CostPrice'];
    $sellPrice = $formdata['sellPrice'];
    $productCatID = $formdata['productCatID'];


    echo '<pre>';
    print_r($formdata);
    echo 'Form Data array';
    echo '</pre>';

    $connection = Connection::getInstance();

    $gateway = new productTable($connection);

    $id = $gateway->insert($AuthorName, $BookName, $costPrice, $sellPrice, $productCatID);



    header('Location: viewProducts.php');
}
else {
    require 'createProductForm.php';
}

表示将对象插入数据库的表网关中的函数:

> public function insert($authorName, $bookName, $costPrice, $sellPrice,
> $productCatID) {
>     $sql = "INSERT INTO "
>             . "`product`(`AuthorName`, `BookName`, `CostPrice`, `sellPrice`, `productCatID`)"
>             . " VALUES (:authorName,:bookName,:costPrice,:sellPrice,:productCatID)";
>     $statement = $this->connection->prepare($sql);
>     $params = array(
>         "authorName" => $authorName,
>         "bookName" => $bookName,
>         "costPrice" => $costPrice,
>         "sellPrice" => $sellPrice,
>         "productCatID" => $productCatID
>     );
>     print_r($params);
>     $status = $statement->execute($params);
> 
>     if (!$status) {
>         die("Could not insert book");
>     }
> 
>     $id = $this->connection->lastInsertId();
> 
>     return $id; }

有人可以告诉我我错过了什么吗?

3 个答案:

答案 0 :(得分:0)

使用foreach,您必须明确请求访问密钥,因此,如果您不这样做,则只能获取数组值。

只需执行此操作即可调试(<select>之外):

foreach($category as $key=>$cat){
    var_dump($cat['ID'], $cat, $key);
}

我认为你会看到你需要的实际数据在哪里。

(另外,您似乎在没有严格错误和通知的情况下运行,这对于调试至关重要,并且当您尝试访问的数组键不存在时可能会向您显示一些通知)

答案 1 :(得分:0)

您的选择名称为Category_ID而不是productCatID。如果您希望GET / POST数据位于productCatID下,则需要为您的选择productCatID命名。

答案 2 :(得分:0)

终于解决了我的问题,所以我将发布我是如何做到的。为了调试我的代码并查看传递到$POST数组和$formdata数组的值,我使用print_r发布每个数组,如果出现问题并且我得到了什么:

$POST  Array
    (
        [AuthorName] => g
        [BookName] => g
        [CostPrice] => 33
        [sellPrice] => 3
        [productCatID] => 4
        [createProduct] => Create Product
    )
    form data array
    (
        [AuthorName] => g
        [BookName] => g
        [CostPrice] => 33
        [sellPrice] => 3
        [ProductCatID] => 
    )

正如您所看到的,$POST数组正好从下拉列表中获取值,这就是表单数据数组的问题。令人尴尬的是,这个问题只是一个简单的拼写错误,可以在我的验证脚本中快速解决。