Harlequin: utf-Codierung / Verwendung von mysqli

Beitrag lesen

Yerf!

Ich kann zwar eigentlich kaum PHP, nur aus ein paar kleineren CMS-Anpassungen und dem was ich hier so mitlese, aber vielleicht kann ich trotzdem (oder gerade deswegen) ein paar Anhaltspunkte geben.

(evtl. kann Jens ja noch ein paar Kommentare dazu geben)

Alle SQL-Statements, nicht nur diese vier, werden gleich behandelt, was den Weg zum DMBS hin betrifft.

Was willst Du mir _damit_ sagen?

Das soll heisen, das an der Stelle, wo du *ein bestimmtes* SQL-Statement verwenden kannst, eigentlich *jedes* Statement möglich ist. Änder doch in deinem Beispiel die Variable $sql die du dem prepare() übergibst einfach entsprechend. Mysqli ist es völlig egal, ob du da einen select, update oder drop table drinnen hast. Einfach etwas damit rumexperimentieren.

Ich verstehe Dich einfach nicht!!! Wenn man über das Formular zB beim Namen Hans eingibt und davor und danach ein Anführungszeichen schreibt, dann landet das als "Hans" in der DB. Aber nicht, weil ich mich darum gekümmert habe, sondern weil das durch das mysqli und den prepared Statements automatisch passiert, oder??

Nein, das kommt nicht von mysqli oder den prepared statements, die arbeiten völlig transparent. Die Slashes kommen von den Magic-Quotes die scheinbar angeschalten sind. Dies passiert am Anfang des Scripts völlig unabhängig von irgendwelchen Datenbanksachen (und genau das ist auch deren Problem).

Hier geht es doch um keine Eingabedaten, hier gebe ich was _aus_!

Zu diesem Zeitpunkt sind die Daten schon "versaut", da musst du schon vorher eingreifen, das komt gleich:

Mir wurde doch letztens extra erklärt, wenn ich diese moderne Form (also das mysqli) nehme, dann brauche ich keine Angst vor SQL Injections haben und mich auch nicht davor schützen, weil das das System automatisch macht. Und jetzt muß ich mich _doch_ plötzlich wieder um Dinge wie Magic Quotes kümmern? Dachte, das betrifft mich nur, wenn ich die althergebrachten Methoden verwende?

Du musst kein extra Escaping mehr vornehmen, ja das ist richtig. Allerdings musst du sicherstellen, dass die Magic Quotes ausgeschalten sind oder diese am Anfang des Scriptes händisch rückgängig machen, da sie dir ansonsten die Daten versauen. Ein Problem das erst mit PHP 6 endgültig gelöst sein wird (da fliegen die Dinger raus)

Aha. Bin zwar jetzt schon so verwirrt, daß ich gar nichts mehr verstehe, aber ich gebe es wieder dazu, lasse das also IMMER dabei.

Die Kodierungsangabe ist nicht nur für die Daten, die du der DB übergibst zuständig, sie sagt auch aus, in welcher Kodierung du gerne die Antwort hättest. Die Datenbank ist da flexibel und nimmt notfalls ein umkodieren vor, wenn du die Daten anders haben möchtest, als sie in der Tabelle abgelegt sind.

2B) Ausgabe von Datensätzen unter einer Bedingung mit mysqli:
$sql = 'SELECT id, name, ort, geburtsjahr FROM tabelle1 WHERE ort='.$\_POST['ortsuche'].' ORDER BY id';
$ergebnis = $db->prepare( $sql );

Integriere den Parameter so in dein Statement, wie du das bereits bei 1) getan hast. Du verwendest P.S., also brauchst du keine Daten händisch in das Statement einzubauen.

Wie meinst Du das? BITTE schreib mir doch die Zeile so hin, wie es richtig wäre.

Er meint anstelle von ort='.$\_POST['ortsuche'].' ein ort=? und danach mit bind_param('ssi',$_POST['ortsuche']) arbeiten.

Nur über bind_param wird das Escapen überflüssig, was du händisch in den SQL-String einbaust müsstest du entsprechend bearbeiten.

Super. Weil GENAU DAS war es ja, was ich wissen wollte, weil ich es eben NICHT kann. Und ich finde auch nach 4 Stunden nicht _eine_ Seite im Netz, wo das hergezeigt wird. Ich finde weiterhin nur Seiten, wo man Beispielcodes für das Erstellen von Datensätzen oder für das Anzeigen aller Datensätze einer Tabelle sieht.

$sql = 'UPDATE tabelle1 SET geburtsjahr = ? WHERE name = ?';
 $kommando = $db->prepare($sql);
 $kommando->bind_param('ssi', $_POST['name'], $_POST['geburtsjahr']);
 $kommando->execute();

Ungetestet, sollte aber das Geburtsdatum aller Personen mit dem entsprechenden Namen setzen...

Gruß,

Harlequin

--
<!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
0 57

Sonderzeichen bei Mail mit Inhalt aus Formular

Brombeermilchtrinker
  • php
  1. 0

    Ursprungsproblem gelöst / nun anderes Codierungsproblem

    Brombeermilchtrinker
    1. 0
      Markus**
      1. 0
        Brombeermilchtrinker
    2. 0
      Sven Rautenberg
      1. 0
        Brombeermilchtrinker
        1. 1
          Sven Rautenberg
          1. 0
            Brombeermilchtrinker
        2. 0
          Jens Holzkämper
    3. 0
      dedlfix
      1. 0
        Brombeermilchtrinker
        1. 0
          dedlfix
          1. 0
            Brombeermilchtrinker
            1. 0
              dedlfix
              1. 0
                Sven Rautenberg
              2. 0
                Brombeermilchtrinker
                1. 0
                  dedlfix
                  1. 0
                    Brombeermilchtrinker
                    1. 0
                      Jens Holzkämper
                    2. 0
                      Vinzenz Mai
                      1. 0
                        Brombeermilchtrinker
                        1. 0
                          Vinzenz Mai
                          1. 0
                            Brombeermilchtrinker
                            1. 0
                              Brombeermilchtrinker
                              1. 0
                                Harlequin
                                1. 0
                                  Sven Rautenberg
                                2. 0
                                  Brombeermilchtrinker
                                  1. 0
                                    Jens Holzkämper
                                    1. 0
                                      Brombeermilchtrinker
                                      1. 0
                                        Jens Holzkämper
  2. 0
    Markus**
  3. 0

    Mail Codierung - Problem noch immer nicht gelöst

    Brombeermilchtrinker
    1. 0
      dedlfix
      1. 0
        Brombeermilchtrinker
        1. 0
          dedlfix
          1. 0
            Brombeermilchtrinker
            1. 0
              dedlfix
              1. 0
                at
              2. 0
                Brombeermilchtrinker
                1. 0
                  Harlequin
                  1. 0
                    Brombeermilchtrinker
                2. 0
                  dedlfix
                  1. 0
                    Brombeermilchtrinker
                    1. 0
                      dedlfix
                      1. 0

                        utf-Codierung / Verwendung von mysqli

                        Brombeermilchtrinker
                        1. 0
                          flowh
                        2. 0
                          dedlfix
                          1. 0
                            Brombeermilchtrinker
                            1. 0
                              Harlequin
                              1. 0
                                Brombeermilchtrinker
                              2. 0
                                dedlfix
                                1. 0
                                  Harlequin
                                  1. 0
                                    Brombeermilchtrinker
                            2. 0
                              flowh
                              1. 0
                                Brombeermilchtrinker
                            3. 0
                              dedlfix
                              1. 0
                                Brombeermilchtrinker