2012-05-13 18 views
0

很抱歉,如果标题是误导性的插入数据,但我实在想不出什么更好的主意。从多个表单域哪都一样

首先,我有两个表,banlist和证明。对于我的问题,禁令或多或少是不相关的,但证据是。

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个不同的值插入表中。

将textfield和select的id设置为id =“proof1”/ id =“type1”,id =“proof2”/ id =“type2”,id =“proof3”/ id =“type3”等等,并将它们存储在一个数组中,然后循环访问当前选定的文本域/ select中输入的数据来查询表的数组?

最后,管理员能够编辑的禁令,我面临着在一个类似的问题说了禁令4种证明,我需要更新表证明了选择的禁令。

我现在有这个疑问:

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

不过,这将覆盖所有行具有相同BANID,而我只希望它更新特定于该证明的行。将创建一个隐藏字段并排文本框/选择框工作,通过存储proofid然后modyfying的UPDATE SQL命令是... WHERE proofid = $_POST['...']?再次,我会假设我需要某种类型的数组来循环每个实例。


此图显示窗体的一部分,颜色表示窗体域之间的链接。从中可以看出,我需要拿出4个证明例子中的每一个,并插入它们或相应地更新它们。

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

道歉,如果部分是misclear。你或许可以告诉我,我个人正面临着一堵砖墙,而且很可能只是我需要把头靠近它。只是补充一点,我可能已经回答了这篇文章中的问题,但我希望对使用数组的任何改进有所想法和想法。

我很感谢您能给予的任何帮助或方向,

乔恩。

回答

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... 
} 

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

+0

谢谢!我会仔细检查一下,看看我的位置。 –

0

你需要插入一个第三表,涉及banlist来证明。在此BanProofRelationship表中插入关系条目,其中包含banId和ProofId。这样,您可以根据需要将多个外键存储到这些表中。你最终会得到多对多的关系,当你需要添加条目时,你会插入它们。当你想删除条目时,你会删除它们。

要添加条目,你会使用

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

相关问题