目前正在使用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; }
有人可以告诉我我错过了什么吗?
答案 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
数组正好从下拉列表中获取值,这就是表单数据数组的问题。令人尴尬的是,这个问题只是一个简单的拼写错误,可以在我的验证脚本中快速解决。