2016-06-29 40 views
0

我有兩個地址輸入'address1''address2',它們與'address []'具有相同的名稱。我想將兩個輸入的值都放在數據庫的單個地址列中,但問題是隻有第二個輸入的數據正在存儲到數據庫中。將具有相同名稱的2個輸入存儲到數據庫的1'地址'列中

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>

+0

在你的foreach循環中,第二次迭代將覆蓋第一次迭代,因此,只有第二個值將被插入到數據庫中。我通常爲每個地址行都有單獨的列。 – ymas

+0

@ymas是一個很好的觀點。假設你的2個地址是'10高街'和'SomeTown'。當你將兩行連接成一列時,當你以後想要知道每個人生活在SomeTown中時會發生什麼......你將一個簡單的查詢變成了一個噩夢查詢 – RiggsFolly

回答

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'])."' )"; 
+0

感謝兄弟......明白了。 –

+0

OP的注意事項:您可以考慮使用「implode」而不是foreach作爲$ addressData。 http://php.net/manual/en/function.implode.php我建議你再看看你的模式。 – ymas

+0

沒問題:)不妨接受答案,如果它可以幫助你,並且也像伊瑪尼建議嘗試使用內爆。 –

0

name屬性指定的元素的名稱。

name屬性用於引用JavaScript中的元素,或者在提交表單後引用表單數據。

您不應該爲2個元素使用相同的名稱。

爲什麼只是沒有把它Adress1和Adress2

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個用戶擁有多個電子郵件帳戶或多個加入的組。並且可以通過多種方式使用,而不是將其存儲爲以逗號分隔的文本。

相關問題