Bei mysql_query gehen Daten verloren

  • Themenstarter Themenstarter moritz115
  • Beginndatum Beginndatum
M

moritz115

Hallo,

ich habe einen Fehler bei mysql. Beim abspeichern in meine Datenbank. Hier der Code:

PHP:
$time = microtime();
$url = "www.pages.ein-mal-page.de/".$_POST["name"].".php";

if(!empty($_POST['name']) || !empty($_POST['inhalt'])) {
 
  $sqlbef = "INSERT INTO wwp_page
('name' ,'Inhalt','geprueft','url','microtime') VALUES ('".$_POST["name"]."','".$_POST["inhalt"]."','no',".$url.",".$time.")";
var_dump($sqlbef);
$sqlerg = mysql_query($sqlbef) or die(mysql_error());

  
  
  
  echo "Datensatz hinzugefügt!";
 }
 else
 {
  echo "Kein Datensatz hinzugefügt!";
 }


Der Fehler:


string(163) "INSERT INTO wwp_page ('name' ,'Inhalt','geprueft','url','microtime') VALUES ('hallodan','halapa','no',http://www.pages.ein-mal-page.de/hallodan.php,0.32301300 1272053300)"
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name' ,'Inhalt','geprueft','url','microtime') VALUES ('hallodan','halapa','no',' at line 2
Wie ihr seht gehen ein paar Daten verloren....

Könnt ihr mir bitte helfen?
WÄre nett. Danke!
moritz115
 
Guck mal hier:

PHP:
sqlbef = "INSERT INTO wwp_page 
('name' ,'Inhalt','geprueft','url','microtime') VALUES ('".$_POST["name"]."','".$_POST["inhalt"]."','no',".$url.",".$time.")";

Dat is natürlich falsch:

Versuchs mal so:
PHP:
sqlbef = "INSERT INTO wwp_page 
(`name` ,`Inhalt`,`geprueft`,`url`,`microtime`) VALUES ('".$_POST["name"]."','".$_POST["inhalt"]."','no',".$url.",".$time.")";
 
man darf die tabellen namen nicht in " " oder ' ' schreiben. dann erkennt der die spalten irgendwie nicht.
zumindest lag es bei mir mal daran.
 
Hallo!

Wie ihr seht gehen ein paar Daten verloren....
Ich sehe da keine verlorenen Daten.
Ganz im gegenteil, in Deinem Script beginnt die URL mit "www", aber var_dump() sagt dass sie mit "http://" beginnt.
Also entweder ist der gezeigte Code nicht der, der den Fehler verursacht..... oder PHP "dichtet" da irgendwas hinzu.
Ich denke aber eher dass ersteres zutrifft. ;)

mysql_error() gibt nicht den gesamten Query aus, sondern nur den Teil in dessen Nähe (near) der Fehler zu suchen ist.
Der Wert von microtime() enthält ein Leerzeichen, daher denke ich dass Du $time ebenfalls in einfache Anführungszeichen ('".$time."') setzen musst (der Ordnung halber würde ich es auch mit der URL machen).

Im übrigen ist es anzuraten alle vom Formular übergebenen Daten durch mysql_real_escape_string() zu jagen..... oder zumindest auf unerlaubte Werte zu überprüfen und entsprechend gegen zu steuern.

Gruss Dr Dau
 
Hallo,

danke für eure Hinweise. Es hat geholfen. Es werden die Daten nun eingetragen. Aber leider ist immer noch ein fehler vom MySQL error :( Aber ein kleinerer^^

string(200) "INSERT INTO wwp_page (`name`,`Inhalt`,`geprueft`,`url`,`microtime`) VALUES ('testnachi','hallo das klappt jetzt hoffentlich! ;)','no','www.pages.ein-mal-page.de/testnachi.php','0.12987200 1272093884')"

Was ist an diesem Code noch falsch?


PHP:
$time = microtime();
$url = "www.pages.ein-mal-page.de/".$_POST["name"].".php";

if(!empty($_POST['name']) || !empty($_POST['inhalt'])) {
 
  $sqlbef = "INSERT INTO wwp_page (`name`,`Inhalt`,`geprueft`,`url`,`microtime`) VALUES ('".$_POST["name"]."','".$_POST["inhalt"]."','no','".$url."','".$time."')";
var_dump($sqlbef);
$sqlerg = mysql_query($sqlbef) or die(mysql_error());

  
  
  
  echo "Datensatz hinzugefügt!";
 }
 else
 {
  echo "Kein Datensatz hinzugefügt!";
 }


Ich denke mal, nur noch ein kleiner Zeichensetzungsfehler, denn in die Datenbank wird alles richtig eingetragen... Hoffe jemand von euch kann mir helfen!
Danke für die bisherige Hilfe und mfg
moritz115
 
Zuletzt bearbeitet von einem Moderator:
Das ist kein Fehler ;)
Das ist bloß der var_dump ;)
PS: du kannst die Anführungszeichen bei Tabellenname und so ganz wegnehmen ;)
Lg
Daniel
 
Hallo,

vielen Dank! Jetzt funktioniert alles. Danke an alle!
Aber noch eine Frage. Wie sichere ich ab, dass in das Formularfeld "inhalt" kein PHP oder HTML code eingetragen werden darf? BBcode ist ok. Dafür habe ich auch schon etwas gecodet.

Vielen Dank für eure hilfe
moritz115
 
Also um das ganze sicher zu machen musst du jede POST eingabe absichern...
Bei nummern schreibst du einfach ein (int) davor.. wenn das ein string ist, wird er zu 0.
Bei strings habe ich eine Funktion geschrieben ;)
Ich poste sie jetzt mal:
PHP:
function make_secure($secure, $mysql=true, $nohtml=true) {
$secure = preg_replace('/</', '&lt;', $secure);
$secure = preg_replace("/'/", '\'', $secure);
$secure = preg_replace('/"/', '\"', $secure);
if ($mysql == true) {
$secure = mysql_real_escape_string($secure);
}
if ($nohtml == true) {
$secure = htmlspecialchars($secure);
}
return $secure;
}
wenn du schreibst make_secure($string, false, false);
Dann heißt das das htmlspecialchars nicht aufgerufen wird... das heißt du willst es nicht nochmal zusätzlich gegen HTML/PHP absichern ;)
wenn du schreibst make_secure($string, true, false);
Wird htmlspecialchars ebenfalls nicht aufgerufen, das script jedoch zuätzlich gegen MySQL injections gesichert.
Wenn du es ganz sicher machen willst schreib make_secure($string, true, true);
Dann ist es doppelt gegen HTML/PHP gesichert und gegen MySQL injections :D
Lg
Daniel
 
Zurück