Ich weiß, diese Frage wurde zuvor gestellt, und ich habe mehrere Vorschläge und Antworten gelesen, aber ich kann es nicht zur Arbeit bekommen.php textarea automatisch speichern auf sql mit jquery/ajax
Ich habe eine TextArea auf einer PHP-Seite, und ich möchte den Inhalt der TextArea in einer SQL-Datenbank gespeichert, während der Benutzer eingibt oder alle 2-5 Sekunden ohne die Seite neu geladen werden.
Ich glaube, dass es mit jquery und Ajax gemacht werden muss?
Der Inhalt wird in der Datenbank gespeichert, wenn ich es als ein POST-Formular mit einer Schaltfläche zum Speichern machen - so weiß ich, dass die SQL funktioniert.
Ich habe diese Dateien: todo.php
<script type='text/javascript' src='//code.jquery.com/jquery-1.9.1.js'></script>
<form method='post' action='notes.php'>
<table border='0' cellspacing='0' width='480px' height='250px' align='center' id='logo-table'>
<tr>
<td align='center' height='10px' valign='top'><textarea type='text' id='notes_input' name='notes_input' style='width: 460px; height: 230px; border:0px;'>$data[notes]</textarea></td>
</tr>
</table>
<input type='image' src='/nycrm/grafik/Save-as.png' name='gem' value='Submit' />
</form>
und script.php
<?php
require_once 'connect.php';
session_start();
$ses_userid = $_SESSION['ses_userid'];
$notes_input = $_POST["notes_input"];
mysqli_query($connect_intra, "UPDATE user SET notes = '$notes_input' where userid = '$ses_userid'");
?>
ich diesen Code versucht, die ich hier auf Stackoverflow gefunden, aber es scheint, als ob der Code nicht ist ausgeführt wird - in diesem Fall sieht die todo.php wie folgt aus:
<?php
$ses_userid = $_SESSION['ses_userid'];
$query = mysqli_query($connect_intra, "SELECT notes FROM user WHERE userid = '$ses_userid'");
$data = mysqli_fetch_array($query);
echo"
<script type=\"text/javascript\" src=\"//code.jquery.com/jquery-1.9.1.js\"></script>
<script type=\"text/javascript\">
$(\"#notes_input\").bind(\"keydown\", function() { myAjaxFunction(this.value); });
function myAjaxFunction(value) {
$.ajax({
url: \"script.php\",
type: \"POST\",
data: \"notes_input=\" + value,
success: function(data) {
if (!data) {
alert(\"unable to save file!\");
}
}
});
}
</script>
<form method='post' action='notes.php'>
<table border='0' cellspacing='0' width='480px' height='250px' align='center' id='logo-table'>
<tr>
<td align='center' height='10px' valign='top'><textarea type='text' id='notes_input' name='notes_input' style='width: 460px; height: 230px; border:0px;'>$data[notes]</textarea></td>
</tr>
</table>
<input type='image' src='/nycrm/grafik/Save-as.png' name='gem' value='Submit'/>
</form>
";
?>
Ich bin m Ist etwas so, dass es funktioniert?
Ihre Hilfe wird sehr geschätzt.
/Thomas.
** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param' verwenden ] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Anfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman
Hallo Tadman Danke für deine Antwort. Sorry für meine Ignoranz, aber ist das besser? '$ sql = "UPDATE Benutzer SET notes =' $ notes_input 'wo userid =' $ ses_userid 'LIMIT 1"; $ result = mysqli_query ($ connect_intra, $ sql); ' – user3416868
Sie müssen wirklich vermeiden, Dinge wie $ notes_input in Ihrer Abfrage an erster Stelle zu setzen. Versuchen Sie: 'UPDATE Benutzer SET Notizen =? WHERE Benutzer-ID =? LIMIT 1' und dann 'bind_param', um diese beiden Werte zu setzen. Normalerweise aktualisieren Sie eine Notiz basierend auf der ID der Notiz, nicht den Benutzer. Das "LIMIT 1" -Ding scheint hier ein Fehler zu sein. – tadman