Probleme mit dem INSERT INTO seit Umstellung auf PHP5.4/MySQL5.5

WebMarco

Mitglied
Guten Tag,

mein Provider hat nun von PHP5.3/MySQL5.1 auf PHP5.4/MySQL5.5 umgestellt. Seither funktioniert mein CMS nicht mehr korrekt. Doch was genau liegt vor: über ein PHP-Formular können einzelne Seiten editiert werden. In dem Feld Inhalt können natürlich auch PHP-Code-Teile sein. Die Ausgabe der in der MySQL-DB gespeicherten PHP-Teile (longtext) habe ich mit eval() gelöst. Auch das Eintragen (insert into,...) oder aber auch Ändern (update,... set) habe ich bis dato einfach über das nachfolgend in Auszügen gegebene Skript durchgeführt.

neue Datensätze hinzufügen
PHP:
// Eintrag hinzufügen
if(isset($_POST['artikel-insert']))
{
  $select = "
  INSERT INTO `artikel`
  (
	`1234`
  )
  VALUES
  (
	'". $_POST['1234'][0] ."'
  )
  ";
  mysql_query($select);
  if(mysql_affected_rows () > 0)
  {
	alles gut
  }
  else
  {
	alles schlecht
  }
}

[...]

<textarea name="inhalt[0]" cols="1" rows="1"></textarea>
<input  type="submit" name="artikel-insert" value="eintragen" />

Datensätze ändern
PHP:
// Eintrag ändern
if(isset($_POST['artikel-update']))
{
  $id = $_POST['id'] .'';
  $select = "
  UPDATE `artikel` SET
	`1234`            = '". $_POST['1234'][$id] ."'
  WHERE `id`           = '". $id ."'
  ";
  mysql_query($select);
  if(mysql_affected_rows () > 0)
  { 
	alles gut
  }
  else
  {
	alles schlecht
  }
}

[...]

<textarea name="inhalt['. $dataset['id'] .']" rows="1" cols="1">'. $dataset['inhalt'] .'</textarea>
<input type="submit" name="artikel-update" value="ändern" />

Meine Frage, die sich stellt ist, war das Skript nun schon immer falsch und die neue PHP-Version interpretiert es nun einfach falsch?

Ein Beispiel wäre
PHP:
// IN das Formular eingetragen:
<?php echo ''. $1234 .''."\n"; ?>

// In der Datenbank angekommen/eingetragen (mit dem Zeilenumbruch,...):
<?php echo '. $1234 .'."
"; ?>

Für Hinweise, wie ich dem Skript mitteilen kann, dass es die PHP-Teile aus dem Formularfeld einfach nur eintragen/ändern soll und nicht ausführen soll, bin ich dankbar. Ich hatte bereits an htmlspecialchars gedacht, aber ich möchte ja die Zeichen beim eintragen/ändern nicht umwandeln. Wenn ich <? abschicke soll ja nicht &lt;? in der MySQL-DB stehen.

Ich hoffe, meine Ausführungen reichen aus, um dem Problem zu Leibe zu rücken, wenn nicht versuche ich gerne, weitere Hinweise auf das mögliche Problem zu finden.

Grüße

Marco
 
Ganz unabhängig davon. Du willst nicht direkt aus $_POST in die DB schreiben. Auch nicht wenn es von einer Adminseite kommt.
Du solltest immer mit mysql_real_escape_string() arbeiten.
 
Ok, das war jetzt irgendwie echt zu einfach,... *gesenkten Hauptes auf die Tastatur starr*

Muss ich jetzt jede Zeile so '". mysql_real_escape_string($_POST['1234'][0]) ."', bzw so `1234` = '". mysql_real_escape_string($_POST['1234'][$id]) ."' angeben? Oder lässt zusammenfassend umsetzen.
 
Da es eine callback-Funktion ist, könnte es sein das das folgende funktioniert
PHP:
$1235 = array_map('mysql_real_escape_string', $_POST['1234']);
array_walk/array_walk_recursive wird nicht gehen.
 
Zurück