2016-06-29 6 views
0

Ich habe zwei Adresseneingänge 'address1' und 'address2' mit dem gleichen Namen wie 'Adresse []'. Ich möchte den Wert der beiden Eingaben in eine einzelne Adressspalte der Datenbank setzen, aber das Problem ist, dass Daten nur der zweiten Eingabe in der Datenbank gespeichert werden.Speichern Sie 2 Eingänge mit demselben Namen in 1 Spalte 'Adresse' der Datenbank

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

In Ihrer foreach-Schleife überschreibt die zweite Iteration die erste, daher wird nur der zweite Wert in die Datenbank eingefügt. Ich habe normalerweise separate Spalten für jede Adresszeile. – ymas

+0

@ymas Macht einen guten Punkt. Angenommen, Ihre 2 Adressen lauten '10 The high Street' und' SomeTown'. Wenn Sie die 2 Zeilen in eine Spalte verketten, was passiert, wenn Sie später alle wissen wollen, die in 'SomeTown' leben ... Sie verwandeln eine einfache Abfrage in eine Albtraum-Abfrage – RiggsFolly

Antwort

1

Es ist, weil Sie in der foreach-Schleife einsetzen kann. Wenn die Adresse in einer einzigen Tabelle gespeichert werden soll, empfiehlt es sich, die Adresse zuerst zu kombinieren und dann außerhalb der foreach-Schleife einzufügen. Siehe den aktualisierten Code unten

$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

Danke, Alter ... Habe es richtig verstanden. –

+0

Hinweis für OP: Sie könnten alternativ "implode" anstelle von foreach für $ addressData verwenden. http://php.net/manual/en/function.implode.php Ich würde Ihnen empfehlen, einen zweiten Blick auf Ihr Schema zu werfen. – ymas

+0

Kein Problem :) Könnte auch die Antwort akzeptieren, wenn es Ihnen hilft und auch als ymas vorgeschlagen, versuchen mit implode. –

0

Das name-Attribut gibt den Namen eines Elements.

Das name-Attribut wird verwendet, um Elemente in einem JavaScript zu referenzieren oder Formulardaten zu referenzieren, nachdem ein Formular übergeben wurde.

Sie sollten nicht den gleichen Namen für 2 Elemente haben.

Warum nennen es einfach nicht Adress1 und Adress2

0

Für mehrere Werte in einer einzigen Spalte zu speichern, um eine neue Tabelle erstellen, die Adresse speichert, und verknüpfen Sie es mit der Haupttabelle.

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

Von der Probe, verbinden die 2 Tabellen, die von als Fremdschlüssel der Adresse zu dem Primärschlüssel der Tabelle Referenzierung FKID. Auf diese Weise können Sie mehrere Daten in einer bestimmten ID speichern.

Also aus meiner Probe genommen, sie nach dem Einsetzen der Benutzertabelle einzufügen, erhalten die erzeugte ID von:

$last_insert_id = mysqli_insert_id(); 

Dann legen Sie die Adressen:

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

Es ist nützlich, wie 1 Benutzer mit mehreren E-Mail-Konten oder mehrere Gruppen, die beitreten. Und kann in vielerlei Hinsicht verwendet werden, anstatt sie als durch Kommas getrennte Texte zu speichern.

Verwandte Themen