2017-06-05 5 views
0

Okay, vorher bin ich ein Anfänger in PHP. Verzeihen Sie mir diese dumme Frage.Daten mit dynamischem Eingangsnamen in Datenbank speichern?

Sagen Sie, dass id_user '1' 2 Elemente hat, so wird es 2 Eingabeformular für jedes Element erstellen.

Dies sind die Eingabeformulare:

<input value="0" type="text" name="store_<?php echo $id= "I got this value from id.item in database, in this case '5'" ?>" required="required"> 

<input value="0" type="text" name="take_<?php echo $id= "I got this value from id.item in database, in this case '5'" ?>" required="required"> 

<input value="0" type="text" name="store_<?php echo $id= "I got this value from id.item in database, in this case '6'" ?>" required="required"> 

<input value="0" type="text" name="take_<?php echo $id= "I got this value from id.item in database, in this case '6'" ?>" required="required"> 

Hinweis: Wert take_ {id} und store_ {id} werden aus der Tabelle 'item' coloumn 'id_item' in Datenbank abgerufen werden.

Die Benutzereingabe diese Werte:

*value 'store' for id_item 5 is 3 
*value 'take' for id_item 5 is 2 
*value 'store' for id_item 6 is 1 
*value 'take' for id_item 6 is 1 

Wie speichere ich Wert ‚speichern‘ und ‚nimmt‘ von Benutzereingaben in der Datenbank mit der zugehörigen ID? Betrachtet man 1 Benutzer kann mehrere Artikel haben.

Dies ist ein Tabellenelement.

->id_user (referencing id_user from user's table) 
    ->id_item # this primary key 
    ->Take 
    ->Store 

Also das Endergebnis wird so sein:

id_user : 1 
id_item : 5 
Store : 3 
Take : 2 

Und wie diese

id_user : 1 
id_item : 6 
Store : 1 
Take : 1 

Ich habe den ganzen Tag gegoogelt worden ist, und ich denke, regex mit Muster ‚store_ 'und' take_ 'sollte es tun? oder gibt es einen anderen Weg, dies zu erreichen?
Thankyou :)

+1

Wäre es nicht einfacher sein, eine Anordnung zu verwenden, zB: ' CD001

+0

Möchten Sie bitte ein Beispiel geben? @ CD001 – Dika

Antwort

0
Set You input like this 
<input value="0" type="text" name="store[]" required="required"> 

<input value="0" type="text" name="take[]" required="required"> 

<input value="0" type="text" name="store[]" required="required"> 

<input value="0" type="text" name="take[]" required="required"> 

    and get this value on backside like this 
    $postdata=$_POST; 
    $count= $postdata['store']; 
    for($i=0;$i<$count;$i++){ 
     echo $postdata['store'][$i]; 
     echo $postdata['take'][$i]; 
    } 
die();  
see your store and take value 
+0

gut, es scheint eine Endlosschleife zu sein – Dika

+0

Wie viele nehmen und speichern Sie die Eingabe, die Sie auf db speichern möchten? –

+0

Hängt vom Benutzer ab Wie viel Benutzer haben Artikel Wenn der Benutzer 1 Artikel hat, dann erstellt er 2 Eingaben, einen für den neuen Wert der Artikel, und ein anderer für es nehmen. – Dika

0

Sagen Sie Ihre HTML-Generierung <input ... /> Felder aus einer PHP-Schleife, so etwas wie:

foreach($dbResult as $item) { 
    echo "<input type=\"text\" name=\"store[{$item->getId()}]\" />\n" 
     . "<input type=\"text\" name=\"take[{$item->getId()}]\" />\n"; 
} 


Welche sollten Sie geben ein $_POST Array wie folgt (der Benutzer unter Verwendung von Eingabewerte in Ihrem Beispiel):

Array 
(
    [store] => Array 
     (
      [5] => 3 
      [6] => 1 
     ) 

    [take] => Array 
     (
      [5] => 2 
      [6] => 1 
     ) 

) 

Wo die store und take Array-Schlüssel sind die Artikel-IDs.

Sie können dann mit den Tasten von jedem Array der Schleife zu erzeugen und die Daten in die Datenbank einfügen (mit PDO als Beispiel - Fehler in einer Live-Umgebung Umgang müssten):

if(!empty($_POST['store'])) { 

    // we can use the keys from just the `store` array 
    // as they'll be the same as those in the `take` array 
    foreach(array_keys($_POST['store']) as $itemId) { 

     $userId = $_SESSION['user_id']; // from the session for example... 
     $storeValue = $_POST['store'][$itemId]; 
     $takeValue = $_POST['take'][$itemId]; 

     $qry = "INSERT INTO item(item.id_user, item.id_item, item.store, item.take) " 
      . "VALUES(:user_id, :item_id, :store_value, :take_value)"; 

     $stmt = $db->prepare($qry); 
     $stmt->bindParam(':user_id', $userId, PDO::PARAM_INT); 
     $stmt->bindParam(':item_id', $itemId, PDO::PARAM_INT); 
     $stmt->bindParam(':store_value', $storeValue, PDO::PARAM_INT); 
     $stmt->bindParam(':take_value', $takeValue, PDO::PARAM_INT); 
     $stmt->execute(); 
    } 
} 
0

Nach wenigen Stunden Suche schließlich fand ich die Antwort
Ich entschied mich, ein bisschen für das Eingabeformular zu ändern.

<input type="text" name="<?php this is id_item?>[0]"> // this array [0] will be assign for 'store' section 

<input type="text" name="<?php this is id_item?>[1]"> // this array [1] will be assign for 'take' section 

ich auch hinzufügen, 1 Typ input = versteckt für id_item Abrufen

<input type="hidden" name="<?php this is id_item ?>[2]" value="<?php this is id_item ?>"> //this array [2] will be assign for send 'id_item' value. 

Und Schleife der Inhalt für tha Daten empfangen

for($i=0;$i<How much row i have;$i++){ 
     $store=intval($my_array[$i][0]); 
     $take=intval($my_array[$i][1]); 
     $amount=$store-$take; 
     $id_item=$my_array[$i][2]; 
     ///////////////////////////////////// 
     And do insert command to database right here 

Es ist nicht schön ist, ich weiß, aber es wird den Job machen.

Vielen Dank für die Beantwortung und kommentieren meine Frage :)

Verwandte Themen