Forum: PC-Programmierung INSERT INTO PHP


von Nette M. (nette-mann)


Lesenswert?

Also mein script funzt soweit 100 prozentig. Nur wenn ich z.B. ein " 
einfügen möchte, kommt ein ? in der DB an. Das ganze wird vorm einfügen 
in utf8 decodiert.:

$text = utf8_decode ($inhalt);
$uber = utf8_decode ($uberschrift);
//inert
mysql_select_db('db1078706-1', $connection);
mysql_query("INSERT INTO Archiv (
      Anlass,
      Ueberschrift,
      Text,
      Kategorie,
      Monat,
      Jahr,
      Datumdate,
      Datum

      ) VALUES (

      '$anlass',
      '$uber',
      '$text',
      '$kategorie',
      '$monat',
      '$jahr',
      '$datum',
      '$datum1')") or die(mysql_error());

Formulardaten:

$monat = $_POST ["monat"];
$tag = $_POST ["tag"];
$jahr = $_POST ["jahr"];
$uberschrift = $_POST ["uberschrift"];
$inhalt = $_POST ["inhalt"];
$anlass = 'Bericht';
$kategorie = 'Bericht';
$datum = "$jahr-$monat-$tag";
$datum1 = "$tag.$monat.$jahr";

das geht wie gesagt wunderbar, nur sowas wie " wandelt er in ein ? um. 
woran liegts? decodierung falsch? PHP myAdmin sagt die Attributes bei 
den einzelnen Tabellen nicht gesetzt sind. Schreib ich aber ein " direkt 
in die DB über den PHPmyAdmin spuckt er es mir richtig aus.

von Artur Funk (Gast)


Lesenswert?

probier es mit:
$anlass = 'Bericht';
$out = htmlspecialchars($anlass), ENT_QUOTES);

noch besser:
$out = htmlspecialchars(stripslashes(trim($anlass)), ENT_QUOTES);

von Εrnst B. (ernst)


Lesenswert?

Evtl musst du dem PHP zuerst mit "mysql_set_charset" erkären, dass deine 
Datenbank UTF-8 haben will?

Und unbedingt angewöhnen, die Daten zu checken, bevor mysql die zu 
Gesicht bekommt! Was würde wohl passieren, wenn dir ein Scherzkeks 
folgendes in dein Formular schreibt:
1
'); DROP DATABASE db1078706-1; --
Also, jede Variable einmal auf gültigen Inhalt checken, und 
anschliessend nochmal "mysql_real_escape_string" drüberlaufen lassen.

von Nette M. (nette-mann)


Lesenswert?

bewirkt leider nichts. Und das mit dem überprüfen ist noch Neuland. Habe 
vorhin schon vergeblich nach nem tut gesucht.

von Tom E. (tkon)


Lesenswert?

Probier doch mal aus dir den zusammengesetzten query ausgeben zu lassen 
und kopier den dann in die SQL Eingabe in PHPmyAdmin.

Falls das funktioniert liegt das Problem  sehr wahrscheinlich an der 
Zeichensatzcodierung. Andernfalls passt der INSERT vermutlich aus irgend 
einem Grund nicht zur DB.

Grüße

von TestX .. (xaos)


Lesenswert?

zum einen solltest du die daten encodieren, zum anderen google mal nach 
sql injections....
und vor allen querys einmal so einen...
mysql_query('set character set utf8;');

von Nette M. (nette-mann)


Lesenswert?

mysql_query('set character set utf8;');

hat gestern Abend die komplette DB durcheinander gewürfelt. Seit dem ist 
Sie auch nicht mehr auf latin_1 gecodet sondern Attributes ist nicht 
mehr setzbar.

also aus

$sql = "INSERT INTO Archiv (
      Anlass,
      Ueberschrift,
      Text,
      Kategorie,
      Monat,
      Jahr,
      Datumdate,
      Datum

      ) VALUES (

      '$anlass',
      '$uber',
      '$text',
      '$kategorie',
      '$monat',
      '$jahr',
      '$datum',
      '$datum1')";
      echo $sql;

wird


INSERT INTO Archiv ( Anlass, Ueberschrift, Text, Kategorie, Monat, Jahr, 
Datumdate, Datum ) VALUES ( 'Bericht', '""" Testbeitrag """', 'Test', 
'Bericht', '02', '2009', '2009-02-18', '18.02.2009')


Eier ich INSERT INTO Archiv ( Anlass, Ueberschrift, Text, Kategorie, 
Monat, Jahr,
Datumdate, Datum ) VALUES ( 'Bericht', '""" Testbeitrag """', 'Test',
'Bericht', '02', '2009', '2009-02-18', '18.02.2009') in den PHP Admin 
rinn bei der SQL Konsole, klappt alles wunderbar """ bleibt """ und wird 
nicht ???

von A. F. (artur-f) Benutzerseite


Lesenswert?

Probier mal bein den Values folgendes: 
'".addslashes(htmlspecialchars($DEIN_VALUE))."'

von Chris (Gast)


Lesenswert?

Für diesen Zweck gibt es die Funktion mysql_real_escape_string. Die 
beachtet insbesondere auch das aktuelle character set, es ist also egal, 
ob man vorher latin1 oder utf8 oder etwas anderes gesetzt hat.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hier eine Prise addslashes und da ein paar Tropfen htmlspecialchars 
bringt nichts, wenn man nicht verstanden hat was überhaupt schief läuft.

* In welchem Zeichensatz kommen deine Daten rein (Zeichensatz der 
HTML-Seite mit dem Formular)?
* Welchen Zeichensatz hat deine Tabelle?
* Welchen Zeichensatz hat die MySQL-Verbindung (z.B. "SET NAMES 
'utf8'")?

Wenn du für alles UTF-8 verwendest, dann musst du nichts konvertieren. 
Und wenn du statt den veralteten mysql_*-Funktionen mysqli mit prepared 
statements verwendest, dann kannst du dir auch das Herumhantieren mit 
addslashes/escape/... sparen.

von Nette Mann (Gast)


Lesenswert?

nehme ich das decode nicht, wirds wieder unleserlich bei den Buchstaben. 
Das andere kann ich momentan nicht testen, da FOS

von Nette M. (nette-mann)


Lesenswert?

was ich halt nur nicht  verstehe ist, das der Befehl INSERT INTO keinen 
Codierungsfehler enthält. Aber trotzedem einer auf tritt.

von A. F. (artur-f) Benutzerseite


Lesenswert?

>was ich halt nur nicht  verstehe ist, das der Befehl INSERT INTO keinen
>Codierungsfehler enthält. Aber trotzedem einer auf tritt.
Das hat damit nichts zu tun.

von Nette M. (nette-mann)


Lesenswert?

Hatte immer Text copy past gemacht daher war ein " bald ein ?.  Kann man 
das umstellen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.