我的数据库中有2个表。类别和产品。在类别中有2个字段。 catid和catname。而在产品中也有3个领域。 id,catid和name。
在我的提交表单中,我将catname输入到某个扇区。我想做的是获取选择器的值并将catid保存到products table catid字段中。而不是类别名称。任何人都可以解释我如何做到这一点。提前谢谢。
以下是提交表单的代码。
include("db.php");
$result = mysql_query("SELECT * FROM categories")
or die (mysql_error());
?>
<!--SubmitForm-->
<form method="post" action="add_products.php">
<select name="cat">
<?php
while($row = mysql_fetch_array($result))
{echo "<option value='".$row[catid]."'>".$row[catname]."</option>";}
?>
</select><br/>
<input type="text" name="name" value=""><br/>
<input type="submit" value="submit"/>
</form>
add_products.php代码
<?php
include("db.php");
$cat = $_POST['catid'];
$query = "SELECT * FROM categories WHERE catname='$cat'";
$result= mysql_query($query) or die ('Mysql Error');
while($row = mysql_fetch_array($result)){
$catn = $row['catid'];
}
$name = mysql_real_escape_string($_POST['name']);
$query="INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')";
mysql_query($query) or die ('Error Updating');
echo "Product Added";
?>
答案 0 :(得分:0)
一些无关但非常重要的事情:
$cat
进入查询之前逃离htmlspecialchars
$row['keyname']
,而不是已弃用的$row[keyname]
现在提出你的问题。代码看起来似乎是正确的,但我现在没有PHP,所以我无法测试它。是否有任何特别不符合预期的工作?
答案 1 :(得分:0)
你已经拥有它了吗?
$cat = $_POST['catid'];
如果您只想插入IF $ cat,那么:
<?php
include("db.php");
$cat = $_POST['catid'];
$query = "SELECT * FROM categories WHERE catname='$cat'";
$result= mysql_query($query) or die ('Mysql Error');
if($result)
{
$name = mysql_real_escape_string($_POST['store']);
$query="INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')";
mysql_query($query) or die ('Error Updating');
echo "Product Added";
}
?>
答案 2 :(得分:0)
您已经在选择菜单中为类别名称指定了类别ID。选择菜单的变量是$_REQUEST['cat']
,它在提交表单后保存所选类别的ID。您可以将此值直接保存到产品表中。
但是,while
中的add_products.php
循环没有用,因为您始终将表中的最后一个ID分配给变量$catn
。使用$catn = $_REQUEST['cat']
替换此while循环(而 cat 是选择菜单的名称)。
答案 3 :(得分:0)
这里似乎有很多错误:
select name="cat"
并且您尝试接收$cat = $_POST['catid'];
正确的$cat = $_POST['cat'];
然后您尝试按catname
进行选择$query = "SELECT * FROM categories WHERE catname='$cat'";
当您需要比较ID catid='$cat'";
如果结果是单一的,那么分配经常时间的是什么?:
if ( ($row = mysql_fetch_array($result)) ){
$catn = $row['catid'];
}
答案 4 :(得分:0)
您的选择字段是名称'cat',因此它应为$_POST['cat']
(或更好,将选择字段重命名为'catid')。并且它包含catid,因此不需要再次从DB中获取它(除非你想确保它确实存在)。
最后,您应该在执行名称时转义$_POST['cat']
参数。
所以这就足够了:
$catid = mysql_real_escape_string($_POST['cat']);
$name = mysql_real_escape_string($_POST['store']);
$query="INSERT INTO products(catid, name) VALUES ('".$catid"','".$name."')";
mysql_query($query) or die ('Error Updating');
echo "Product Added";
请同时查看PDO以了解处理此类数据库查询的最佳方法。
答案 5 :(得分:0)
尝试更改此
"INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')";
到
"INSERT INTO products(catid, name)VALUES ('".$cat."','".$name."')";
答案 6 :(得分:0)
您似乎已经拥有正确的值,只需要将它们放在正确的位置,如果您需要'catid',您可以将它放在select的id标签中。
当你回应时,你只需要这样做,
echo "<option id='".$row[catid]."' value='".$row[cat]."'>".$row[catname]."</option>";
有关详细信息,请参阅this链接的w3school手册。