从多个相同的表单字段插入数据

时间:2012-05-13 21:47:47

标签: php jquery mysql html

很抱歉,如果标题有误导性,但我真的无法想到更好的事情。

首先,我有两个表,banlist和proof。对于我的问题,禁止列表或多或少是无关紧要的,但证明是。

Table: proof

proofid - primary key
banid - foreign key (links to banlist)
proof - stores the link which acts as the proof
type - stores the type of the proof (image, demo, ...)

我还有一个表格,允许管理员提供有关禁令的详细信息,然后链接任何证据。由于禁令可能有多个证据,我将实现一个链接,它创建两个表单字段的新实例(可能通过jQuery)。表格如下:

<p>Proof (if no proof is available, enter N/A):</p><input type="textfield" name="proof" style="border: solid 1px #<?php echo $pbg?>"/>

<select name="prooftype" style="border: 1px solid #<?php echo $ptbg ?>" />
    <option value="TZAC">TZAC</option>
    <option value="UAC">UAC</option>
    <option value="ESL Wire">ESL Wire</option>
    <option value="GV">GV</option>
    <option value="PB Bans">PB Bans</option>
    <option value="Demo">Demo</option>
    <option value="League">League</option>
    <option value="Image">Image</option>
    <option value="Stream">Stream</option>
    <option value="Other">Other</option>
</select>

问题或可能不是问题的是我如何将多个数据实例插入到证明表中(并最终更新)。我只是看不出如果我有4个以上我可以将所有4个不同的值插入表中。

设置文本字段的id并选择为id =&#34; proof1&#34; / id =&#34; type1&#34;,id =&#34; proof2&#​​34是否有意义; / id =&#34; type2&#34;,id =&#34; proof3&#34; / id =&#34; type3&#34;等等,并将它们存储在一个数组中,然后循环查询该表,并使用在当前所选文本字段中输入的数据/ select?

最后,由于管理员能够编辑禁令,我面临类似的问题,因为禁令有4种类型的证据,我需要更新表格中的证据以便选择禁令。

我目前有这个查询:

$query2 = "UPDATE proof SET proof = '$proof', type = '$type' WHERE banid = $id";

但是,这将覆盖具有相同banid的所有行,而我只希望它更新特定于证明的行。是否会在每个textfield / select框旁边创建一个隐藏字段,通过存储校样,然后将UPDATE SQL命令调整为... WHERE proofid = $_POST['...']?同样,我认为我需要某种类型的数组才能遍历每个实例。


此图像显示表单的一部分,颜色代表表单字段之间的链接。从中你可以看到我需要采取4个证明示例中的每一个,并插入它们或相应地更新它们。

http://i45.tinypic.com/adkfti.png

如果部件不清楚,请道歉。你可以告诉我,我个人面对的是一堵砖墙,而且我最有可能只是需要了解它。只是补充一下,我可能已经回答了帖子中的问题,但我对使用数组的任何改进都有想法和想法。

我感谢您提供任何帮助或指导,

乔恩。

2 个答案:

答案 0 :(得分:1)

我不认为您需要多对多的关系,除非您真的希望使用prooftype对数据进行完全规范化。你当前的结构应该足够了。

由于您在后端使用PHP,只需将输入添加到数组中,然后将[]添加到数组中:

<p>Proof (if no proof is available, enter N/A):</p><input type="textfield" name="proof[]" style="border: solid 1px #<?php echo $pbg?>"/>

<select name="prooftype[]" style="border: 1px solid #<?php echo $ptbg ?>" />
etc...

名称后面的括号允许PHP以数组形式接收输入,然后您可以在PHP端循环它:

<?php
// Assuming banid is a hidden field in the form
$banid = mysql_real_escape_string($_POST['banid']);
$proof = $_POST['proof'];
$prooftype = $_POST['prooftype'];

for ($i = 0; $i < count($proof); $i++) {
    $currentProof = mysql_real_escape_string($proof[$i]);
    $currentProofType = mysql_real_escape_string($prooftype[$i]);
    $sql = "INSERT INTO proof (banid, proof, prooftype) VALUES ($banid, '$currentProof', '$currentProofType');";
    etc...
}

为了解决您的UPDATE问题,我会保持简单,并在您的证明表中添加一个名为proof_number的列。这将是0到3或1到4,以标记记录的证据。这可以避免您需要在html表单中添加证明ID。然后在您的UPDATE中,您可以在for循环中使用数组的索引来确定要更新的证明。

答案 1 :(得分:0)

您需要插入第3个表来将banlist与证据联系起来。在此BanProofRelationship表中插入关系条目,该表包含banId和ProofId。这样,您可以根据需要为这些表存储任意数量的外键。你最终会得到很多关系,当你需要添加条目时,你会插入它们。如果要删除条目,则可以删除它们。

要添加条目,请使用

INSERT BanProofRelationship ( banId, proofId ) values (1, 4);