PHP - 从Array中将未知数量的行插入MySQLi数据库?

时间:2015-05-16 00:02:25

标签: php

所以我有点卡住了。最终,我试图根据用户指定的数量将未知数量的记录插入数据库。为了使它更复杂,我使用了许多数组。在现实世界中,我试图允许用户指定每个单元在他们的公寓楼中的每个卧室/浴室。如果建筑物是一个大型公寓大楼,那么建筑物可能有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注入 - 这是一个简化版本,我知道其含义。谢谢!

2 个答案:

答案 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,因此如果您选择使用此代码,请务必清理输入。