将2个具有相同名称的输入存储到1'地址'数据库的列

时间:2016-06-29 10:19:26

标签: php html mysql

我有两个地址输入'address1''address2',其名称与'地址[]'相同。我想将两个输入的值放在数据库的单个地址列中,但问题是只有第二个输入的数据存储在数据库中。

index.php



  $addressData = $_POST['address']; 
    foreach ($addressData as  $addressValue) {
              $query = "INSERT INTO `users` (`name` ,`address` , `birthdate` ,`age` , `coach` , `phone`,`email` ,`password`)
             VALUES ( '".mysqli_real_escape_string($link, $_POST['name'])."' ,  '".mysqli_real_escape_string($link, $addressValue)."' ,'".mysqli_real_escape_string($link, $_POST['birthdate'])."' ,'".mysqli_real_escape_string($link, $_POST['age'])."' , '".mysqli_real_escape_string($link, $_POST['coach'])."' , '".mysqli_real_escape_string($link, $_POST['phone'])."' , '".mysqli_real_escape_string($link, $_POST['email'])."' , '".mysqli_real_escape_string($link, $_POST['password'])."')";
                                 }

 <div class="form-group row">
    <label class="col-sm-2 form-control-label">Address1</label>
    <div class="col-sm-10">
      <input type="text" id="address" class="form-control" name="address[]" placeholder="Home address">
      <span class="fa fa-map-marker"></span>
    </div>
  </div>

  <div class="form-group row">
    <label class="col-sm-2 form-control-label">Address2</label>
    <div class="col-sm-10">
      <input type="text" id="address2" class="form-control" name="address[]" placeholder="City,Pincode....">
      <span class="fa fa-map-marker"></span>
    </div>
  </div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

这是因为你在foreach循环中插入。如果您希望将地址保存在单个表中,您可能希望首先组合地址并在foreach循环外插入。请参阅下面的更新代码

$addressData = $_POST['address']; 

$address = "";
foreach ($addressData as  $addressValue) {
    $address .= "\n" . $addressValue;
}               
$query = "INSERT INTO `users` (`name` ,`address` , `birthdate` ,`age` , `coach` , `phone`,`email` ,`password`)

           VALUES ( '".mysqli_real_escape_string($link, $_POST['name'])."' ,
                    '".mysqli_real_escape_string($link, $address)."' ,
                    '".mysqli_real_escape_string($link, $_POST['birthdate'])."' ,
                    '".mysqli_real_escape_string($link, $_POST['age'])."' ,
                    '".mysqli_real_escape_string($link, $_POST['coach'])."' ,
                    '".mysqli_real_escape_string($link, $_POST['phone'])."' ,
                    '".mysqli_real_escape_string($link, $_POST['email'])."' ,
                    '".mysqli_real_escape_string($link, $_POST['password'])."'   )";

答案 1 :(得分:0)

name属性指定元素的名称。

name属性用于引用JavaScript中的元素,或者在提交表单后引用表单数据。

2个元素的名称不应相同。

为什么不称它为Adress1和Adress2

答案 2 :(得分:0)

要在单个列中存储多个值,请创建一个存储地址的新表,并将其链接到主表。

users(pid, address)
address(fkid, address)

从示例中,通过将fkid作为地址的外键引用到表的主键来链接2个表。通过这些方式,您可以在特定ID中存储多个相同的数据。

从我的示例中取出,在插入用户表后插入它,通过以下方式获取创建的id:

$last_insert_id = mysqli_insert_id();

然后,插入地址:

foreach($addressData as $addressValue) {
    mysql_query("INSERT INTO user(id, address) VALUE($last_insert_id, $addressValue);
}

它很有用,例如1个用户拥有多个电子邮件帐户或多个加入的组。并且可以以多种方式使用,而不是将其存储为以逗号分隔的文本。