很抱歉,如果标题有误导性,但我真的想不出更好的了。
首先,我有两个表,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="proof1"/id="type1"、id="proof2"/id="type2"、id="proof3"/id 是否有意义="type3"等等,并将它们存储在数组中,然后循环遍历数组,使用当前选定的文本字段/选择中输入的数据查询表?
最后,由于管理员能够编辑禁令,我面临着类似的问题,即禁令有 4 种类型的证明,我需要更新表中所选禁令的证明。
我目前有这个查询:
$query2 = "UPDATE proof SET proof = '$proof', type = '$type' WHERE banid = $id";
但是,这将覆盖具有相同 banid 的所有行,而我只希望它更新特定于证明的行。通过存储proofid然后将UPDATE SQL命令修改为...WHEREproofid = $_POST['...']
,在每个文本字段/选择框旁边创建一个隐藏字段是否有效?同样,我假设我需要某种类型的数组才能循环遍历每个实例。
此图像显示了表单的一部分,颜色代表表单字段之间的链接。从它你可以看到我需要获取 4 个证明示例中的每一个,然后相应地插入或更新它们。
如果部分内容不清楚,我们深表歉意。你可能会说,我个人正面临着一堵砖墙,很可能只有我需要头脑清醒。只是补充一下,我可能已经回答了帖子中的问题,但我想了解有关使用数组的任何改进的想法和想法。
感谢您提供的任何帮助或指导,
乔恩。
最佳答案
我认为您不需要多对多关系,除非您确实希望使用证明类型对数据进行完全规范化。您当前的结构应该足够了。
由于您在后端使用 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 循环中的数组索引来确定要更新哪个证明。
关于php - 从多个相同的表单字段插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10575512/