www.mikrocontroller.net

Forum: PC-Programmierung INSERT INTO PHP


Autor: Nette Mann (nette-mann)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Artur Funk (Gast)
Datum:

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

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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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:
'); DROP DATABASE db1078706-1; --
Also, jede Variable einmal auf gültigen Inhalt checken, und 
anschliessend nochmal "mysql_real_escape_string" drüberlaufen lassen.

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: Tom Ekman (tkon)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht 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;');

Autor: Nette Mann (nette-mann)
Datum:

Bewertung
0 lesenswert
nicht 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 ???

Autor: A. F. (artur-f) Benutzerseite
Datum:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nette Mann (Gast)
Datum:

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

Autor: Nette Mann (nette-mann)
Datum:

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

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nette Mann (nette-mann)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.