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

标签 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="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 个证明示例中的每一个,然后相应地插入或更新它们。

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

如果部分内容不清楚,我们深表歉意。你可能会说,我个人正面临着一堵砖墙,很可能只有我需要头脑清醒。只是补充一下,我可能已经回答了帖子中的问题,但我想了解有关使用数组的任何改进的想法和想法。

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

乔恩。

最佳答案

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

由于您在后端使用 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/

相关文章:

javascript - 基于 PHP MySQL 表中的值和 JavaScript 值进行选择

javascript - 无法使用jquery创建多个日期选择器

mysql - SQL 选择重叠行

javascript - 单击时更改 <p> 大小

java - 数据库中查询的计数问题

MySQL 和连接

php - 通过浏览器使用 PDO 将 MySQL 表中的数据存储为 CSV

php - 在内联 CSS 中使用 $_POST

php - 你如何更新 PHP 中的 cookie?

jquery - 最简单的 jQuery Dropdown 插件是什么?