kostenloser Webspace werbefrei: lima-city


Javascript Ajax Msql auslesen klappt, einfügen nicht

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    Titel EDIT: Javascript Ajax *MySQL* auslesen klappt, einfügen nicht

    Hallo, ich wollte mit Ajax Daten in meine Datenbank eintragen und auslesen:

    Dafür die javascript Funktionen:

    var Chat = {}
    					Chat.post_messages = function(){
    						var hr = new XMLHttpRequest();
    						var url = "ajax.php";
    						var text = document.getElementById("text").value;
    						var vars = "text="+text+"&method=post";
    						hr.open("POST", url, true);
    						hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    						hr.onreadystatechange = function() {
    							if(hr.readyState == 4 && hr.status == 200) {
    							var return_data = hr.responseText;
    							document.getElementById("chatbox").innerHTML = return_data;
    							}
    						}
    						hr.send(vars); // Actually execute the request
    					}
    			
    			
    				Chat.fetch_messages = function(){
    				    var hr = new XMLHttpRequest();
    				    var url = "ajax.php";
    				    var vars = "method=fetch";
    				    hr.open("POST", url, true);
    				    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    				    hr.onreadystatechange = function() {
    						if(hr.readyState == 4 && hr.status == 200) {
    							var return_data = hr.responseText;
    							document.getElementById("chatbox").innerHTML = return_data;
    						}
    				    }
    				    hr.send(vars);
    				}



    Die Daten werden also an ajax.php gesendet:

    <?php
    mysql_connect('mysql.lima-city.de', 'Platzhalter', 'Platzhalter');
    mysql_select_db('Platzhalter');
    
    if(isset($_POST['text']) === true && $_POST['method'] == 'post'){ //POST
    	mysql_query("INSERT INTO Nachrichten (Nachricht) VALUES (".$_POST['text'].")");
    }
    
    if($_POST['method'] == 'fetch'){ //FETCH
    	$sql = mysql_query("SELECT * FROM Nachrichten");
    
    	while ($row = mysql_fetch_array($sql, MYSQL_ASSOC))
    	{
    		echo '<p>'.$row['Nachricht'].'</p>';
    	}
    	 
    	mysql_free_result($db_erg);
    }
    ?>




    Fetch funktioniert, insert nicht, und ich komm nicht drauf warum. Kann mir jemand helfen?

    Beitrag zuletzt geändert: 25.4.2013 19:47:00 von c143
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t**k

    Ich würde tippen Selbstschutz von PHP...

    SQL-Injection
  4. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    trik schrieb:
    Ich würde tippen Selbstschutz von PHP...

    SQL-Injection


    Nur kurz ein Testscript, aber sollte eig auch da drauf achten, aber wenn ich schnell was mach, denk ich nie an so Sachen, also danke, aber funktionieren tuts ja eh nicht, also würds eh niemand benutzen. :D
  5. Ich hab noch nie was von Selbstschutz von PHP gehört. Lasse mich gerne etwas besserem Belehren aber auch beim Suchen im Netz konnte ich dazu nichts finde.
    Ich habe auch schon absichtlich mal Seiten geschrieben wo das möglich war und es ging immer es wurde nie durch einen Selbstschutz o.ä. verhindert.

    Was ich in einem solchen fall immer mache, ich lasse mir den String den man mysql_query übergibt ausgeben und gucke ob ich einen Fehler sehe, wenn nicht führe ich in einfach mal in phpmyadmin aus da wird ja oft eine Fehlermeldung ausgegeben wenn was falsch läuft.
    Allerdings hat trik vollkommen recht das man immer auf Sicherheit achten sollte da man es sonst schnell mal vergisst.

    Beitrag zuletzt geändert: 28.4.2013 11:44:30 von jam00
  6. t**k

    jam00 schrieb:
    Ich hab noch nie was von Selbstschutz von PHP gehört. Lasse mich gerne etwas besserem Belehren aber auch beim Suchen im Netz konnte ich dazu nichts finde.
    Ich habe auch schon absichtlich mal Seiten geschrieben wo das möglich war und es ging immer es wurde nie durch einen Selbstschutz o.ä. verhindert.

    Was ich in einem solchen fall immer mache, ich lasse mir den String den man mysql_query übergibt ausgeben und gucke ob ich einen Fehler sehe, wenn nicht führe ich in einfach mal in phpmyadmin aus da wird ja oft eine Fehlermeldung ausgegeben wenn was falsch läuft.
    Allerdings hat trik vollkommen recht das man immer auf Sicherheit achten sollte da man es sonst schnell mal vergisst.


    Das mit dem Selbstschutz von PHP ist wirklich nicht existent (aufjedenfall nicht hier). Das sollte einfach nur verdeutlichen, dass man erstmal den Code in Ordnung bringen sollte, bevor man nach Hilfe fragt.
  7. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    trik schrieb:
    jam00 schrieb:
    Ich hab noch nie was von Selbstschutz von PHP gehört. Lasse mich gerne etwas besserem Belehren aber auch beim Suchen im Netz konnte ich dazu nichts finde.
    Ich habe auch schon absichtlich mal Seiten geschrieben wo das möglich war und es ging immer es wurde nie durch einen Selbstschutz o.ä. verhindert.

    Was ich in einem solchen fall immer mache, ich lasse mir den String den man mysql_query übergibt ausgeben und gucke ob ich einen Fehler sehe, wenn nicht führe ich in einfach mal in phpmyadmin aus da wird ja oft eine Fehlermeldung ausgegeben wenn was falsch läuft.
    Allerdings hat trik vollkommen recht das man immer auf Sicherheit achten sollte da man es sonst schnell mal vergisst.


    Das mit dem Selbstschutz von PHP ist wirklich nicht existent (aufjedenfall nicht hier). Das sollte einfach nur verdeutlichen, dass man erstmal den Code in Ordnung bringen sollte, bevor man nach Hilfe fragt.


    Der Code ist in Ordnung und gleichzeitig auch nicht. Was fehlt ist der MySQL injection Schutz bei einem BEISPIEL. Ich poste hier nur Beispiele und dieses Script wird nie im Leben von jemand andrem benutzt als mir. Ein Hinweis drauf war nett, das ja sein kann, dass ich nichts darüber weiss, aber wieso soll ichs nicht posten dürfen? Eben ist es nicht in Ordnung, für das ist das Forum da. Aber anschienend kann/will mir hier niemand helfen. Bis jetzt gings nur um das eine Thema, zu dem ich schon gesagt habe 'Danke für den Hinweis, aber ich weiss drüber bescheid.'
  8. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    Wenn das nicht funktioniert stimmen entweder die Feldbezeichnungen nicht, oder die Postvariable ist leer, nech?
    Pack hinter der query mal noch ein:
    mysql_query(...) or die ("Fehler: ".mysql_error());


    MfG T


    Beitrag zuletzt geändert: 29.4.2013 18:04:37 von tee
  9. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    tee schrieb:
    Wenn das nicht funktioniert stimmen entweder die Feldbezeichnungen nicht, oder die Postvariable ist leer, nech?
    Pack hinter der query mal noch ein:
    mysql_query(...) or die ("Fehler: ".mysql_error());


    MfG T


    Danke :)

    mysql_query("INSERT INTO Nachrichten (Nachricht) VALUES (".mysql_real_escape_string($_POST['text']).")") or die (mysql_error());


    Die Tabellen Namen usw stimmen, und nen Error gibts mir auch nicht aus, nur eine Notiz. Die Postvariable kann fast nicht leer sein, und wenn kein Error kommt ists sies sicher auch nicht. :/
  10. c143 schrieb:
    Bis jetzt gings nur um das eine Thema, zu dem ich schon gesagt habe 'Danke für den Hinweis, aber ich weiss drüber bescheid.'


    jam00 schrieb:
    Was ich in einem solchen fall immer mache, ich lasse mir den String den man mysql_query übergibt ausgeben und gucke ob ich einen Fehler sehe, wenn nicht führe ich in einfach mal in phpmyadmin aus da wird ja oft eine Fehlermeldung ausgegeben wenn was falsch läuft.


    Wie stehts damit? Hast du das mal ausprobiert?
  11. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    jam00 schrieb:
    c143 schrieb:
    Bis jetzt gings nur um das eine Thema, zu dem ich schon gesagt habe 'Danke für den Hinweis, aber ich weiss drüber bescheid.'


    jam00 schrieb:
    Was ich in einem solchen fall immer mache, ich lasse mir den String den man mysql_query übergibt ausgeben und gucke ob ich einen Fehler sehe, wenn nicht führe ich in einfach mal in phpmyadmin aus da wird ja oft eine Fehlermeldung ausgegeben wenn was falsch läuft.


    Wie stehts damit? Hast du das mal ausprobiert?


    Bevor ich hier überhaupt poste probier ich so ziemlich alles aus. Die if Abfrage geht in Ordnung, wird die JS Funktion ausgeführt, ruft es die passenden PHP Funktionen auf, alles was in der Post Variable steht wird auch richtig ausgegeben. Direkt danach wird aber meine Datenbank wieder abgerufen und ausgegeben, also verschwindet das wieder, und da es nicht in die Datenbank eingefügt wird, stehts nicht mehr da.
  12. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    c143 schrieb:
    Die Tabellen Namen usw stimmen, und nen Error gibts mir auch nicht aus, nur eine Notiz. Die Postvariable kann fast nicht leer sein, und wenn kein Error kommt ists sies sicher auch nicht. :/

    Wenn die Variable leer ist gibt's glaube ich keinen Fehler, solange sie definiert wurde, es wird nur einfach nichts eingetragen, würde aber imho den vorhandenen Eintrag mit nichts überschreiben (was bei dir aber nicht der Fall ist, weil Chat). Gib die Variable doch einfach mal aus, dann siehste sofort ob sie leer ist oder nicht ;)

    Wenn kein Fehler ausgegeben wird, macht PHP das entweder korrekt, oder es kommt gar nicht bis zum query. Du kannst das mal testen, mit einem echo davor und danach, fehlt eins oder beide, wird der query gar nicht angefasst.

    MfG T

    Beitrag zuletzt geändert: 29.4.2013 19:37:43 von tee
  13. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    tee schrieb:
    c143 schrieb:
    Die Tabellen Namen usw stimmen, und nen Error gibts mir auch nicht aus, nur eine Notiz. Die Postvariable kann fast nicht leer sein, und wenn kein Error kommt ists sies sicher auch nicht. :/

    Wenn die Variable leer ist gibt's glaube ich keinen Fehler, solange sie definiert wurde, es wird nur einfach nichts eingetragen, würde aber imho den vorhandenen Eintrag mit nichts überschreiben (was bei dir aber nicht der Fall ist, weil Chat). Gib die Variable doch einfach mal aus, dann siehste sofort ob sie leer ist oder nicht ;)

    Wenn kein Fehler ausgegeben wird, macht PHP das entweder korrekt, oder es kommt gar nicht bis zum query. Du kannst das mal testen, mit einem echo davor und danach, fehlt eins oder beide, wird der query gar nicht angefasst.

    MfG T



    Danke! Jetzt gibt es mir das erste Echo aus, und danach eine Fehlermeldung. Ohne mein Variable im query fügt es z.B. 'test' problemlos ein, aber sobald ich den Query mit " unterbreche und eine Variable mit . anbinde funktioniert es nicht mehr. Ich bekomme den Error:

    1Unknown column 'Test Nachricht' in 'field list'


    Aber ich habes das ja bei den Values drin O.o
  14. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    Und die genaue query für diesen Fehler lautete?
  15. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    tee schrieb:
    Und die genaue query für diesen Fehler lautete?


    if(isset($_POST['text']) === true && $_POST['method'] == 'post'){ //POST
    	echo 1;
    	mysql_query("INSERT INTO Nachrichten (Nachricht) VALUES (".mysql_real_escape_string($_POST['text']).")") or die (mysql_error());
    	echo 1;
    }


    $_POST['text'] war 'Test Nachricht'

    Beitrag zuletzt geändert: 29.4.2013 20:12:39 von c143
  16. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    Probiers mal genau so, und schau dann noch was das zweite echo effektiv ausgibt:

    if(isset($_POST['text']) === true && $_POST['method'] == 'post'){ //POST
    	echo 1;
    	echo $_POST['text'];
    	mysql_query("INSERT INTO 'Nachrichten' ('Nachricht') VALUES ('".mysql_real_escape_string($_POST['text'])."')") or die (mysql_error());
    	echo 1;
    }


    MfG T
  17. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    tee schrieb:
    Probiers mal genau so, und schau dann noch was das zweite echo effektiv ausgibt:

    if(isset($_POST['text']) === true && $_POST['method'] == 'post'){ //POST
    	echo 1;
    	echo $_POST['text'];
    	mysql_query("INSERT INTO 'Nachrichten' ('Nachricht') VALUES ('".mysql_real_escape_string($_POST['text'])."')") or die (mysql_error());
    	echo 1;
    }


    MfG T

    1Test NachrichtYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nachrichten' ('Nachricht') VALUES ('Test Nachricht')' at line 1


    Das zweite echo gibt nichts aus, da das Script ja abgebrochen wird, wenn ein Error aufkommt. Aber jetzt wird schonmal 'Test Nachrit' Eingefügt, Danke! :)

    Beitrag zuletzt geändert: 29.4.2013 21:13:26 von c143
  18. tee

    Moderator Kostenloser Webspace von tee

    tee hat kostenlosen Webspace.

    Das zweite echo gibt sehr wohl was aus, sonst würde da nicht die Ausgabe am Anfang stehen!

    1Test NachrichtYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nachrichten' ('Nachricht') VALUES ('Test Nachricht')' at line 1

    Fragt sich jetzt nur noch, wo der Syntaxfehler im Query liegt (scheinbar hast du da irgendwo was falsch getippselt?), wenn du den gefunden hast, ist's geritzt! :thumb:

    MfG T


  19. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Der Fehler:
    '
    `
    ;-)
    Also:
    mysql_query("INSERT INTO `Nachrichten` (`Nachricht`) VALUES ('".mysql_real_escape_string($_POST['text'])."')") or die (mysql_error());
  20. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    tee schrieb:
    Das zweite echo gibt sehr wohl was aus, sonst würde da nicht die Ausgabe am Anfang stehen!

    1Test NachrichtYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nachrichten' ('Nachricht') VALUES ('Test Nachricht')' at line 1

    Fragt sich jetzt nur noch, wo der Syntaxfehler im Query liegt (scheinbar hast du da irgendwo was falsch getippselt?), wenn du den gefunden hast, ist's geritzt! :thumb:

    MfG T




    Sry, meinte mit dem zweiten das zweite echo 1. Mein Fehler. :)


    hackyourlife schrieb:
    Der Fehler:
    '
    `
    ;-)
    Also:
    mysql_query("INSERT INTO `Nachrichten` (`Nachricht`) VALUES ('".mysql_real_escape_string($_POST['text'])."')") or die (mysql_error());



    Vielen Dank! Wiedermal dieser blöde Fehler. :D Jetzt funktioniert es so wie gewollt (Y)
  21. c143 schrieb:
    Bevor ich hier überhaupt poste probier ich so ziemlich alles aus. Die if Abfrage geht in Ordnung, wird die JS Funktion ausgeführt, ruft es die passenden PHP Funktionen auf, alles was in der Post Variable steht wird auch richtig ausgegeben. Direkt danach wird aber meine Datenbank wieder abgerufen und ausgegeben, also verschwindet das wieder, und da es nicht in die Datenbank eingefügt wird, stehts nicht mehr da.


    Anscheinend ja nicht, denn wenn du gemacht hättest was ich gesagt habe, hättest du zu den gleichen Ergebnissen kommen müssen wie dieses
    1Test NachrichtYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nachrichten' ('Nachricht') VALUES ('Test Nachricht')' at line 1

    nach langem bla bla

  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!