所以我有点卡住了。最终,我试图根据用户指定的数量将未知数量的记录插入数据库。为了使它更复杂,我使用了许多数组。在现实世界中,我试图允许用户指定每个单元在他们的公寓楼中的每个卧室/浴室。如果建筑物是一个大型公寓大楼,那么建筑物可能有1个单元或20个单元。
第1单元:(第1行)
<select name="numberbedrooms[]">
<option value="1">1 Bedroom</option>
<option value="2">2 Bedrooms</option>
<option value="3">3 Bedrooms</option>
</select>
<select name="numberbathrooms[]">
<option value="1">1 Bathroom</option>
<option value="2">2 Bathrooms</option>
<option value="3">3 Bathrooms</option>
</select>
<textarea name="unitdetails[]"></textarea>
第2单元(第2行)
<select name="numberbedrooms[]">
<option value="1">1 Bedroom</option>
<option value="2">2 Bedrooms</option>
<option value="3">3 Bedrooms</option>
</select>
<select name="numberbathrooms[]">
<option value="1">1 Bathroom</option>
<option value="2">2 Bathrooms</option>
<option value="3">3 Bathrooms</option>
</select>
<textarea name="unitdetails[]"></textarea>
第3单元(第3行)
<select name="numberbedrooms[]">
<option value="1">1 Bedroom</option>
<option value="2">2 Bedrooms</option>
<option value="3">3 Bedrooms</option>
</select>
<select name="numberbathrooms[]">
<option value="1">1 Bathroom</option>
<option value="2">2 Bathrooms</option>
<option value="3">3 Bathrooms</option>
</select>
<textarea name="unitdetails[]"></textarea>
...等等可能无限数量的单位...
所有我真的想把这些信息插入到我的MySQLi表中,但是我对数组不是很强大:
$unitsTable = "listing_unit_info";
$insertUnitsSQL = "INSERT INTO $unitsTable (num_of_beds, num_of_baths, unit_details) VALUES (numberbedrooms[], numberbathrooms[], unitdetails[])";
mysqli_query($con, $insertUnitsSQL);
我认为这归结于我缺乏阵列技能。我想我正在用 foreach()和 implode()寻找一些花哨的步法。我会测试这些,但我害怕搞砸数据库。另外,请不要评论SQL注入 - 这是一个简化版本,我知道其含义。谢谢!
答案 0 :(得分:0)
$unitsTable = "listing_unit_info";
$count = is_array($_POST['numberbedrooms']) ? count($_POST['numberbedrooms']) : 0;
for ($i = 0; $i < $count; $i++) {
$num_of_beds = empty($_POST['numberbedrooms'][$i]) ? 0 : intval($_POST['numberbedrooms'][$i]);
$num_of_baths = empty($_POST['numberbathrooms'][$i]) ? 0 : intval($_POST['numberbathrooms'][$i]);
$unit_details = empty($_POST['unitdetails'][$i]) ? 0 : intval($_POST['unitdetails'][$i]);
...
// better use `prepare` outside of the loop and `execute` inside
// and yes, better use parameters `?, ?, ?`
$insertUnitsSQL = "INSERT INTO $unitsTable (num_of_beds, num_of_baths, unit_details) VALUES ($num_of_beds, $num_of_baths, $unit_details)";
mysqli_query($con, $insertUnitsSQL);
...
}
答案 1 :(得分:0)
这是我的最终结果 - 我只想发布一个简化的答案,以防将来有人遇到类似的问题。在考虑了 Axalix 的答案后,我把它放在一起。
HTML字段基本上已经声明了数组变量。
$beds = $_POST['unitbedrooms'];
$baths = $_POST['unitbathrooms'];
$details = $_POST['unitdetails'];
$propertyid = $_GET['propertyid']; //This input is static.
现在只需将每一行放入数据库:
foreach ($beds as $key => $n) {
$addUnitSQL = "INSERT INTO $unitsTable (listing_id, num_of_beds, num_of_baths, unit_details) VALUES ('$propertyid', '$n', '$baths[$key]', '$details[$key]')";
mysqli_query($con, $addUnitSQL);
}
通常,我希望尽可能简化代码,因此我将代码缩小到了这一点。请记住,此代码很容易注入SQL,因此如果您选择使用此代码,请务必清理输入。