[php] Seltsamer Fehler?

M

Mc.Alcatraz

Gast
Ich habe in php etwas geschrieben um daten in eine my sql tabelle einzufügen folgender code:
PHP:
<?php 
$to=$_POST["to"];
$headline=$_POST["headline"];
$text=$_POST["text"];
$uhrzeit = time();

$new="INSERT INTO pm (from,to,headline,text,date) VALUES ('$myid', '$to', '$headline', '$text', $uhrzeit)";
$add=mysql_query($new); 
if($add == true)
   {
   echo "Senden war erfolgreich";
   }
else
   {
   echo "Fehler beim senden";
   }
Wo kann da der fehler sein meine überprüfung sagt immer: Fehler beim senden.
 
Hallo,

an dem Code an sich kann ich auf die schnelle keinen Fehler sehen.
Wie sieht es denn mit der Datenbank aus?
Hast du davor auch eine Verbindung zu dieser hergestellt? ;)
Und was für Feldtypen verwendest du in dieser?

MfG mh1001

/Edit: Achso, landen die Daten trotzdem in dieser?
 
Du hast bei $uhrzeit die ' vergessen !

Aber mal so nebenbei warum schreibst du die POST Variablen nicht direkt in die SQL anweisung rein ?
 
Die Rechte in der Datenbank für den Benutzer, mit dem du dich verbinden willst, stimmen?
Du hast also die Berechtigung zum Zugriff auf die verwiesene Tabelle haben?

Und die Datentypen der Spalten in pm (from, to, headline, text, date) werden auch korrekt gefüttert?
Ich komm darauf, weil die letzte Spalte zwar "date" heißt, du sie aber wohl nicht im richtigen Format füllst (PHP-Variable $uhrzeit, gesetzt per time(), was ein wohl anderes als das erforderliche date-Format liefert! Vorausgesetzt der Datentyp für diese Spalte ist date in der db).
Behebung: Die $uhrzeit-Variable per Funktion in das richtige (DB-) Format bringen.

Edit:
Ach noch was: Benutzereingaben direkt ohne Prüfung in die DB zu schreiben, ist eine gaaaaanz schlechte Idee. Also würde ich den Vorschlag mit den POST-Variablen mal vergessen und unbedingt die Variablen auf korrekte/erlaubte Zeichen prüfen.
Sonst komm ein Bösewicht und sendet dir manipulierte Werte und kann mit etwas Pech locker leicht deine Datenbank/Tabelle/etc manipulieren oder ausspähen.
Such mal im Google nach "SQL injection" und du wirst wissen, wovon ich rede :)


Gruß,
Matsche
 
Zuletzt bearbeitet:
Wenn date ein Feld vom Typ int ist , braucht er keine Singlequotes zu machen. Seit wann werden Integers gequoted?

Wenn ein (scheinbar) Fehler auftritt, dann kann ich dir die Funktion mysql_error() nur wärmstens ans Herz legen.
Wenn die was ausspuckt, poste den Fehler mal hier im Board.

Ansonsten, wenn das wirklich schon das ganze Script sein soll (wovon ich mal nicht ausgehe), dann hst du vielleicht vergessen zur Datenbank zu connecten.
 
Woraus schließt du, daß das Feld in der DB vom Typ int ist? Wenn wirklich int, dann hast du natürlich vollkommen Recht.
Würde aber wohl eher als Typ 'date' Sinn machen. Und time() liefert laut php.net "die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück." Also ne Zahl.
Und als date-Typ in der DB wird wohl eher was vom Format "YYYY--MM-DD" erwartet.
 
Ah ja das hatte ich nicht bedacht.
Ich bin davon ausgegangen, dass es ein int ist, eben weil er die Funktion time() benutzt.

Stimmt, dass es ein Verständnisproblem seinerseits sein könnte hatte ich gar nicht bedacht :D

Aber da er sich eh nicht mehr meldet, scheint die Sache eh gegessen zu sein.
 
matsche schrieb:
Die Rechte in der Datenbank für den Benutzer, mit dem du dich verbinden willst, stimmen?
Du hast also die Berechtigung zum Zugriff auf die verwiesene Tabelle haben?

Und die Datentypen der Spalten in pm (from, to, headline, text, date) werden auch korrekt gefüttert?
Ich komm darauf, weil die letzte Spalte zwar "date" heißt, du sie aber wohl nicht im richtigen Format füllst (PHP-Variable $uhrzeit, gesetzt per time(), was ein wohl anderes als das erforderliche date-Format liefert! Vorausgesetzt der Datentyp für diese Spalte ist date in der db).
Behebung: Die $uhrzeit-Variable per Funktion in das richtige (DB-) Format bringen.

Edit:
Ach noch was: Benutzereingaben direkt ohne Prüfung in die DB zu schreiben, ist eine gaaaaanz schlechte Idee. Also würde ich den Vorschlag mit den POST-Variablen mal vergessen und unbedingt die Variablen auf korrekte/erlaubte Zeichen prüfen.
Sonst komm ein Bösewicht und sendet dir manipulierte Werte und kann mit etwas Pech locker leicht deine Datenbank/Tabelle/etc manipulieren oder ausspähen.
Such mal im Google nach "SQL injection" und du wirst wissen, wovon ich rede :)


Gruß,
Matsche

Wie würde denn so eine prüfung aussehen?
edit: mysql_error( ) zeigt mir keinen fehler an
 
Zuletzt bearbeitet:
Mc.Alcatraz schrieb:
Wie würde denn so eine prüfung aussehen?
edit: mysql_error( ) zeigt mir keinen fehler an
Schaue dir einmal die Funktionen htmlspecialchars() und und strip_tags() näher an. Je nach Anwendung sollte aber auch eine einfache replace-Funktion die notwendigen Kleinigkeiten erfüllen.

P.S.: Wie sieht es denn jetzt mit deinem anderen Problem aus?

MfG mh1001
 
Zuletzt bearbeitet:
Zurück
Oben