我正在使用PHP和MySQL,我遇到了一个小问题。我试图研究并弄清楚要做什么,但是,我无法弄明白。我将不胜感激任何帮助。这是我的问题...
我有3个SQL表:
Customers
cID (primaryKey)
email
name
password
...etc.
Products
pID (primaryKey)
Pname
Ptype
CustomerRequests
requestID(primarykey)
cID (foreign key references customer table)
pID (foreign key references products table)
quantityRequested
我有一个用PHP处理的HTML表单。这就像请求表单一样,因此用户登录并填写请求表单。此表单上的字段如下:
选择产品名称,选择数量等。 $quantity=$_POST['quantity']
...所以基本上表单数据存储在变量中。
现在,这是我坚持的部分。如何执行SQL INSERT
查询,以便数据库知道cID
和pID
是什么?即外键值是什么?
例如:
$insert = mysql_query(INSERT INTO CustomerRequests VALUES ('THIS WOULD BE BLANK AS ITS AUTOINCREMENTED PROMARY KEY FOR REQUEST ID','HOW WOULD I GET THE cID AUTOMATICALLY HERE','HOW WOULD I GET THE pID HERE','".$quantity."'))
查询使用INSERT
查询将用户输入存储到数据库中。但是,由于customerID和productID是不同表中的外键,我该如何编写PHP查询?
感谢您的帮助,如果您需要更多信息,请与我联系。
答案 0 :(得分:1)
我认为您应该在显示表单之前检索产品和客户ID。 然后,从表单中获取ID并将其插入第三个表中。
答案 1 :(得分:1)
我不确定你为什么认为自己有问题。应该知道cID
,因为客户已登录。pID
应该是已知的,因为您的表单应该使用pID
被用作{{1}的产品的下拉列表}}
然后使用这些值进行value
这是一个简单的问题,即
INSERT
换句话说,这些值在 之前都已知 。
事后,不要将产品名称与ID匹配;这只是增加额外的工作。如果您有值,那么您应该使用它。您的表单应该已经包含该关联。
根据Products表格中的<select id="product">
<option value="pid001">Product One</option>
<option value="pid002">Product Two</option>
... etc. ...
</select>
查询创建下拉列表。使用SELECT
pID
和内容value
。这样,表单中发送的数据就是您pName
中需要的外键。
INSERT
同样,当您登录用户时,请获取他们的<?php
/*
* $arrProducts is the result from a query like
* SELECT * FROM Products;
*/
print '<select id="products">';
foreach ($arrProducts as $arrProduct) {
printf('<option value="%s">%s</option>', $arrProduct['pID'], $arrProduct['pName']);
}
print '</select>';
?>
并将其插入会话中。
另外一点,停止使用PHP的cID
函数系列。这些已弃用,将从未来版本中删除。他们倾向于SQL注入。您应该在应用程序中使用mysql_
或PDO。两者都提供参数化查询和准备好的声明。
答案 2 :(得分:1)
“Johnny,如果你使用Dreamweaver,你的插入语句需要如下所示:if((isset($ _ POST [”MM_insert“]))&amp;&amp;($ _POST [”MM_insert“] == “insertForm”)){$ insertSQL = sprintf(INTO CustomerRequests(productName,qty,cID)值(%s,%s,%s)“等。
然后使用带有隐藏字段的表单提交您的信息,例如: &lt; form name =“insertForm”type =“post”action =“placeOrder.php”&gt; &lt; input type =“hidden”type =“text”id =“qty”value =“&lt; php?echo $ row_Recordset1 ['qty'];?&gt;” /&GT; &lt; input type =“hidden”type =“text”name =“productName”value =“&lt; php?echo $ row_Recordset1 ['productName'];?&gt;” /&GT; &lt; input type =“hidden”type =“text”name =“cID”value =“&lt; php?echo $ cID;?&gt;”/&gt; &lt; input type =“hidden”name =“MM_insert”value =“insertForm”/&gt; &lt; input type =“submit”name =“send”id =“Submit”value =“Submit Form”/&gt; &LT; /形式&GT;
否则,只需忘记Dreamweaver的内容并使用:插入CustomerRequests(productName,qty,cID)值(香蕉,2,1044)并在表单中使用相同的隐藏字段。您还需要捕获表单中提交的数据并将其保存为变量,如您所做的那样:$ quantity = $ _ POST ['quantity']等。
由于“代码提交没有正确格式化”,我甚至提交此信息都很麻烦,所以我希望你能得到这个!改变&lt;到&lt;和&gt;到&gt;理解这段代码。 祝你好运!