需要PHP和MySQL帮助

时间:2011-07-18 09:55:45

标签: php mysql form-submit

我的数据库中有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";


?>

7 个答案:

答案 0 :(得分:0)

一些无关但非常重要的事情:

  • 您应该在$cat进入查询之前逃离
  • 您应该始终使用htmlspecialchars
  • 转义带有HTML的字符串
  • 您应始终使用$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手册。