0

我正在使用 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']......所以基本上表单数据存储在变量中。

现在,这是我坚持的部分。如何执行 SQLINSERT查询,以便数据库知道cIDpID是什么?即外键值是什么?

例如:

$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 查询?

感谢您的帮助,如果您需要更多信息,请与我联系。

4

3 回答 3

1

我认为您应该在显示表单之前检索产品和客户 ID。然后,从表单中获取 ID 并将它们插入到第三个表中。

于 2013-02-02T23:54:36.093 回答
1

我不知道你为什么认为你有问题。cID应该是已知的,因为客户已登录。 应该是已知的,pID因为您的表单应该使用产品的下拉列表,pID并且用作value.

然后使用这些值是一件简单的事情INSERT,即

<select id="product">
    <option value="pid001">Product One</option>
    <option value="pid002">Product Two</option>
    ... etc. ...
</select>

换句话说,这些值在它们到达您的表单之前都是已知的。

事后不要将产品名称与 ID 匹配;那只是增加了额外的工作。如果您有可用的值,那么您应该使用它。您的表单应该已经包含该关联。

SELECT根据Products 表中的查询创建下拉列表。使用pIDfor thevaluepNamefor 内容。这样,表单中发送的数据就是您在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>';
?>

同样,当您登录用户时,获取他们cID并将其插入会话中。

另一个注意事项,停止使用 PHP 的mysql_函数系列。这些已被弃用,并将从未来的版本中删除。它们很容易发生 SQL 注入。您应该mysqli_在应用程序中使用其中一个或 PDO。两者都提供参数化查询和准备好的语句。

于 2013-02-02T23:56:01.787 回答
1

“约翰尼,如果您使用 Dreamweaver,您的插入语句需要如下所示:if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertForm")) { $insertSQL = sprintf(INTO CustomerRequests (productName, qty, cID) values (%s, %s, %s)" etc.

然后使用带有隐藏字段的表单提交您的信息,例如:<form name="insertForm" type="post" action="placeOrder.php"> <input type="hidden" type="text" id="qty " value="<php?echo $row_Recordset1['qty']; ?>" /> <input type="hidden" type="text" name="productName" value="<php?echo $row_Recordset1['productName ']; ?>" /> <input type="hidden" type="text" name="cID" value="<php?echo $cID; ?>"/> <input type="hidden" name=" MM_insert" value="insertForm" /> <input type="submit" name="send" id="Submit" value="提交表单" /> </表格>

否则,只需忘记 Dreamweaver 的内容并使用:插入 CustomerRequests (productName, qty, cID) 值(bananas, 2, 1044)并在表单中使用相同的隐藏字段。您还需要捕获表单中提交的数据并将其保存为变量,就像您已经完成的那样:$quantity=$_POST['quantity'] 等。

由于“代码提交的格式不正确”,即使提交此信息我也遇到了很多麻烦,所以我希望你能得到这个!将 < 更改为 < 并将 > 更改为 > 以理解此代码。祝你好运!

于 2013-02-03T03:00:06.100 回答