2016-05-11 20 views
0

Ich bin ziemlich neu in js. Hier habe ich ein js-Skript, das eine Textbox Eingabe auf Klick für Abfragen an eine Datenbank mit PHP-basierten mysql fügt. Jedes neu hinzugefügte Textfeld hat einen ID-Namen mit einer fortlaufenden Nummer am Ende für die Anzahl der hinzugefügten Textfelder von der js-Schaltfläche, wie ID_0, ID_1 usw. Ich frage mich, ob es möglich ist, die PHP-Abfrage für jedes nachfolgende Textfeld einzeln auszuführen . Das Problem, das ich habe, verfolgt, wie viele neue Textfelder hinzugefügt wurden, um zu wissen, wie viele Iterationen der Abfrage ich ausführen sollte, da die Klick-Nummer eine js-Variable ist. Gibt es eine Möglichkeit, eine PHP-Abfrage basierend auf der Anzahl der js-Klicks oder speziell einer js-Variablen zu iterieren? (Oder bin ich denke, das in der falschen Art und Weise zu tun?)mehrere Anzahl von PHP-Abfragen basierend auf js Klicks

Skript Eingabefeld hinzuzufügen:

<input id="btnAdd" type="button" value="Add" /> 
<br /> 
<br /> 
<div id="TextBoxContainer"> 
</div> 
<br /> 
<input id="btnGet" type="button" value="Get Values" /> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    var click_number = 0; 
    $("#btnAdd").bind("click", function() { 
     var div = $("<div />"); 
     click_number++; 
     console.log(click_number); 
     div.html(GetDynamicTextBox("id"+click_number)); 
     $("#TextBoxContainer").append(div); 
    }); 
    $("body").on("click", ".remove", function() { 
     $(this).closest("div").remove(); 
     click_number--; 
     console.log(click_number); 
    }); 
}); 
function GetDynamicTextBox(value0) { 

    return '<label>Input &nbsp;<textarea rows="1" name="id_'+ value0 +'"><?php echo $_POST["id_'+ value0 +'"]; ?></textarea></label>&nbsp;'; 

} 
</script> 

für den PHP-Teil, schalte ich den $ _POST Variable in ein PHP-Variable und ein einfache laufen Abfrage an die Datenbank, die die PHP-Variable mit einer bestimmten Spalte vergleicht. Bisher kann ich das nur tun, wenn ich weiß, wie viele $ _POST-Variablen es geben wird.

Antwort

0

Die Art, wie ich dies tue (es kann nicht der beste Weg sein), ist eine versteckte HTML-Eingabe, die die Anzahl der Textfelder enthält, die Sie erstellt haben. Jedes Mal, wenn Sie ein neues Textfeld in JS hinzufügen, erhöhen Sie den Wert Ihrer ausgeblendeten Eingabe.

Dann können Sie eine Schleife in PHP machen, um jedes POST-Element zu erhalten.

0

Sie müssen nicht wissen, wie viele $_POST Variablen gibt es, wenn Sie die Abfrage dynamisch schreiben. Nur sicher sein, dass alle Ihre POST-Indizes in der Tabelle mit Spaltennamen übereinstimmen:

Zum Beispiel, wenn Sie haben:

$_POST['name']="bob" 
$_POST['age'] = "102" 

Sie können, dass in einer Abfrage dynamisch drehen ..

// First, for security, we should create an array 
// with column names to check against to avoid SQL injection 
$tableColumns = array("name", "age", "birthday", "favorite_color"); 

// This will contain the data that we want to insert 
$insertables = array(); 

// Get the data from the post variables that 
// are named after columns in our table 
foreach($_POST as $k->$v) 
    if(in_array($k, $insertables)) 
     $insertables[$k] = $v; 

// Create a a query dynamically 
// I'm assuming you're using PDO since you didn't specify 
$sql = $pod->prepare("INSERT INTO `table` (`".implode("`, `", array_keys($insertables))."`) VALUES (:".implode(", :", array_keys($insertables)).")"); 

// Execute it 
$sql->execute($insertables); 

Jetzt können Sie alle gewünschten POST-Daten senden, und wenn der POST-Schlüssel als Spalte in der Tabelle vorhanden ist, wird er eingefügt.

+0

Wenn ich die Post-Indizes mit den Spalten übereinstimme, würde nicht jedes Mal, wenn ich ein Textfeld hinzufüge, das zuletzt hinzugefügte Textfeld die vorherige Eingabe aus den vorherigen Textfeldern überschreiben, weil sie den gleichen Namen haben? – Steven

+0

nein, es wird nur eine neue Zeile für jeden Ajax-Aufruf eingefügt. Nichts wird jemals überschrieben, wenn Sie eine "Einfügen" -Abfrage machen. inly eine "update" -Abfrage kann Dinge überschreiben. –

+0

Ich denke, dass ich meine Nachfolgefrage falsch formuliert habe oder vielleicht immer noch verwirrt bin. Am Anfang hast du $ _POST ['name'] = "bob" gesetzt. Wenn ich zwei Eingabefelder mit meinem js-Skript sowohl mit $ _POST ['name'] als Variable für die Eingabe erzeuge, erzeugt es 2 identische Textfelder mit der gleichen ID und somit wird nur die letztere ID-Eingabe erkannt. Ist das nicht richtig? – Steven

Verwandte Themen