MySQL-Abfrage In JavaScript
Arbeite ich an einer form dar, in der JavaScript eingesetzt wird, um eine weitere Zeile hinzufügen Element. Der Zweck ist, zu Werbebuchungen hinzufügen zu einer Rechnung. Ich habe erfolgreich bekam dies funktioniert ok, wenn Textfelder in meinem Formular, aber bin stecken, wie man diese Arbeit mit einer dropdown-box, die einen Aufruf von mysql, um die dropdown-box data.
Hier ist, was ich habe.
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
include $_SERVER['DOCUMENT_ROOT']."/includes/header.php";
?>
<script type="text/javascript">
var counter = 1;
function addInput(divName){
var newdiv = document.createElement('div');
newdiv.innerHTML = "Entry " + (counter + 1) + " <br><select name='myInputs[]'><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value=\"".$row['name']."\">".$row['name']."</option>";} ?></select>";
document.getElementById(divName).appendChild(newdiv);
}
</script>
<form method="POST">
<div id="dynamicInput">
Entry 1<br><select name="myInputs[]"><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value=\"".$row['name']."\">".$row['name']."</option>";} ?></select>
</div>
<input type="button" value="Add another text input" onClick="addInput('dynamicInput');">
</form>
So ist hier einige Informationen, was Los ist. Jetzt der JavaScript code oben zeigt die MySQL-Abfrage. Dies tötet die Zeile hinzufügen, Element Funktionalität. Wenn ich einfach die Abfrage entfernen, aber lassen Sie die anderen php in der Zeile hinzufügen, Element beginnt wieder zu arbeiten, aber es gibt natürlich keine Daten in die drop-down.
In der form selbst, es wird die erste Zeile Element aus der Datenbank ohne Verwendung von javascript und das funktioniert ok.
Ich das Gefühl, ich bin immer in der Nähe, aber nicht wissen, wohin Sie gehen von hier aus.
Vielen Dank im Voraus.
BEARBEITEN:
Dank Nick, ich habe diese arbeiten. Hier ist der code.
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
include $_SERVER['DOCUMENT_ROOT']."/includes/header.php";
?>
<script type="text/javascript">
var counter = 1;
function addInput(div){
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
var newdiv = document.createElement('div');
newdiv.innerHTML = "Entry " + (++counter) + " <br><select name='myInputs[]'>" + xmlhttp.responseText + "</select>";
}
document.getElementById(div).appendChild(newdiv);
}
xmlhttp.open("GET", "update_text.php", false);
xmlhttp.send();
}
</script>
<form method="POST">
<div id="dynamicInput">
Entry 1<br><select name="myInputs[]"><?php $result = mysql_query("SELECT * FROM salesitem"); while($row = mysql_fetch_array($result)) { echo "<option value=\"".$row['name']."\">".$row['name']."</option>";} ?></select>
</div>
<input type="button" value="Add" onClick="addInput('dynamicInput');">
</form>
Dann die update_text.php
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
$result = mysql_query("SELECT * FROM salesitem");
while($row = mysql_fetch_array($result)) {
echo "<option value=\"".$row['name']."\">".$row['name']."</option>";
}
?>
Und hier ist mein php post in der Datenbank, die nicht arbeiten, für die javascript Zeile hinzufügen, Element, nur für den ursprünglichen Eintrag, der erstellt wird, aus der form. (Ich habe andere Felder neben dem dropdown).
<?php
include $_SERVER['DOCUMENT_ROOT']."/connect.php";
$company = mysql_real_escape_string($_POST['company']);
foreach($_POST['item'] as $i => $item)
{
$item = mysql_real_escape_string($item);
$quantity = mysql_real_escape_string($_POST['quantity'][$i]);
mysql_query("INSERT INTO invoice (company, item, quantity) VALUES ('$company', '".$item."', '".$quantity."') ") or die(mysql_error());
}
echo "<br><font color=\"green\"><b>Invoice added</b></font>";
?>
Dank, bitte lassen Sie mich wissen, wenn ich diese sauber bis besser.
entry 1
Abschnitt in einem <div>
so dass Sie mit der markup-Code der eingefügten Zeilen. oder possily setzen eine id
auf die Schaltfläche, und verwenden Sie insertBefore
(insertAfter
auf Ihre dynamicInput
würde dazu führen, neue werden Hinzugefügt, um den oberen und nicht den unteren)Ja, meine javascript hinzugefügte Zeilen nicht einfügen in die Datenbank. Wenn Sie sagen, wrap meinem Eintrag 1-Bereich in einem div-Element, ist es nicht bereits? Können Sie das klären?
Es ist ja, aber Sie werden das einsetzen der
newdiv
in Ihrem ersten statt nach es. Was haben Sie derzeit <form><div1>entry1<br><select><div2>....</div2><div1></form>
was ich denke, Sie wollen <form><div1>entry1<br><select></div1><div2>....</div2></form>
. Wenn Ihre Frage beantwortet wurde, sollten Sie akzeptieren, dass man von Ihnen 🙂Es scheint nicht, einen Unterschied machen, nur die erste Zeile wird in die Datenbank geschrieben. Ich werde das hinzufügen meiner php post, um das original zu sehen, ob vielleicht das problem dort liegt.
Ich habe festgestellt, dass das javascript ist nicht das posting an php. Aber ich bin nicht sicher, genau, wie beheben Sie das html-Formular. Sie haben klar gemacht, ich sollte fügen Sie ein div-tag die javascript, aber ich bin nicht sicher, was zu nennen Sie es, um es zu bekommen arbeiten mit dem html-Formular.
InformationsquelleAutor Tom | 2013-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider die Art und Weise Sie ' r zu tun versuchen, es wird nicht funktionieren, aufgrund der Natur von PHP.
Wenn ein client-Anfragen von Ihrer Seite aus die server ALLE php ausgeführt wird.
Also den php-block in Ihre javascript-Funktion ist eigentlich nur das statische Ergebnis Ihrer php.
Benötigen Sie XMLHttpRequest-Anforderungen/Ajax-Anfrage die neuen Daten vom server.
Hier ein kurzer (und wahrscheinlich ziemlich schlechten) Beispiel!
Änderungen an Ihren javascript-Funktion:
Eine neue php-Datei auf deinen server: (updated_list.php)
update
Habe ich sagen, es war ein schlechtes Beispiel 🙂 mein original-code überschrieben haben, den Inhalt Ihrer div, anstatt das hinzufügen, um es, das ive aktualisiert. dies war nur ein Beispiel, Sie sollten Lesen, auf AJAX, und wie, zum anfordern von Daten vom server.
Ich hatte einen Tippfehler. Wenn ich auf den Knopf Hinzufügen klicken, springt von 2. Ich änderte es zurück zum counter + 1. Allerdings hält es bei #2 und wird nicht weiter gehen. Immer noch keine mysql-Daten. Ich werde weiter arbeiten und versuchen, Zusammenführen und meinen original-code mit dem code, um zu sehen, ob ich bekommen kann es arbeiten. Vielen Dank für jede Hilfe.
Ich habe es funktioniert. Ich werde einen Nachtrag zu meinem ursprünglichen post. Danke!!!
InformationsquelleAutor NickSlash
Sie nicht verwenden können, server-code in einer javascript-Funktion, nachdem die Seite geladen ist.
Die server-side-code ist, wie es ist name - code, der auf dem server läuft. so, nachdem die Seite geladen ist, es "get back", um die client-und nur-client-code (javascript) ausgeführt werden kann jetzt.
damit deine line
ist ein bit-Fehler.
was Sie tun können, um wieder die Daten aus der Datenbank in javascript (json wird die beste option sein) und erstellen Sie dann die select-box dynamisch mit der raw Daten, das kam vom server, dass ist jetzt ein javascript-Daten.
sagen wir also, dass Ihre Daten
Sie laufen können diese Daten mit Hilfe von javascript und bauen Sie Ihre combo:
InformationsquelleAutor Adidi
Dies ist ein klassisches Beispiel für AJAX (Asynchronous Javascript Und XML) - das grundlegende Konzept ist, dass, wenn eine Aktion durchgeführt wird (z.B. ein button angeklickt, um zu zeigen, Inhalte), einige JavaScript ruft eine PHP - (asynchron), der PHP ausgeführt wird, gibt eine XML-Datei (obwohl das kann eigentlich eine beliebige Datei-format, das Sie möchten, einige Leute bevorzugen nun JSON, weil es einfacher zu analysieren), und der Inhalt dieser XML - /JSON angezeigt werden, auch mit JavaScript.
Obwohl das obige Beispiel ist das anzeigen von content, gibt es keinen Grund, warum jeder Aktion, wo Sie brauchen, um auf dem server ausgeführt werden (z.B. einfügen von Daten in eine Datenbank) nicht auch asynchron erfolgen.
Ist ALSO kein Platz für code geschrieben werden für die Leute - so jetzt habe ich Euch einen Tipp, wie und wo Sie zu starten, und als übung für den reader ( /Frage Fragesteller!), haben Sie einen Blick auf einige AJAX-tutorials, machen Sie sicher, dass Sie verstehen, das Konzept, code schreiben, und kommen zurück, wenn Sie noch nicht bekommen kann es arbeiten!
Glück 🙂
InformationsquelleAutor ChrisW