b-phase: Problem Datensatz mit Leerzeichen in MySQL

Hallo zusammen

Bin bereit seit Stunden am Googeln und finde für folgendes Problem keine Lösung:

Ich gebe in eine Datenbanktabelle per Formularfelder folgende Datensätze ein:

mysql_query("INSERT INTO kundendaten(email, anrede, vorname, name, strasse) VALUES ('$email', '$anrede', '$titel', '$vorname', '$name', '$strasse')");

Da das es bei "Straße" kein Feld für "Straßennummer" gibt, wird Straße und Hausnummer mit Leerzeichen getrennt in das Feld "Straße" eingegeben.
Hier habe ich nun das Problem, dass wenn ich das Feld Straße per Array auslesen möchte, die Straßennummer nicht mit angezeigt wird, obwohl diese in der Tabelle vorhanden ist. Das Problem ist wohl das Leerzeichen, das sich leider nicht umgehen lässt.

Ausgabe erfolgt so:

$sql = "SELECT * FROM kundendaten WHERE email='$email' ;
$adresse = mysql_query($sql);

while ($row = mysql_fetch_row($adresse)){
echo "<td>$row[0]></td>";
usw...
}

danke schonmal im Voraus

  1. Hallo,

    mysql_query("INSERT INTO kundendaten(email, anrede, vorname, name, strasse) VALUES ('$email', '$anrede', '$titel', '$vorname', '$name', '$strasse')");

    das Problem ist vermutlich, dass Du keine Fehlerbehandlung machst.
    Sonst hättest Du bemerken müssen, dass dieses SQL-Statement ungültig ist.
    Guck erstmal direkt in die Datenbank ob da überhaupt schon etwas drin steht.

    Viele Grüße

    Stefan

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Soweit bin ich jedenfalls zurechnungsfähig, dass ich überprüft habe, ob in der DB überhaupt ein Datensatz vorhanden ist :-).
      Ich hab den String lediglich fürs Forum gekürzt und $titel nicht gelöscht, sorry.
      Es existieren definitiv Datensätze mit z.B. "Straße 1", wobei lediglich "Straße" beim Auslesen angezeigt wird.

      Hallo,

      mysql_query("INSERT INTO kundendaten(email, anrede, vorname, name, strasse) VALUES ('$email', '$anrede', '$titel', '$vorname', '$name', '$strasse')");

      das Problem ist vermutlich, dass Du keine Fehlerbehandlung machst.
      Sonst hättest Du bemerken müssen, dass dieses SQL-Statement ungültig ist.
      Guck erstmal direkt in die Datenbank ob da überhaupt schon etwas drin steht.

      Viele Grüße

      Stefan

  2. echo $begrüßung;

    mysql_query("INSERT INTO kundendaten(email, anrede, vorname, name, strasse) VALUES ('$email', '$anrede', '$titel', '$vorname', '$name', '$strasse')");

    Hoffentlich hast du die einzutragenden Werte auch dem Kontext gerecht behandelt (Stichwort: mysql_real_escape_string()).

    Hier habe ich nun das Problem, dass wenn ich das Feld Straße per Array auslesen möchte, die Straßennummer nicht mit angezeigt wird, obwohl diese in der Tabelle vorhanden ist. Das Problem ist wohl das Leerzeichen, das sich leider nicht umgehen lässt.

    Nein. Leerzeichen machen beim Auslesen keine anderen Probleme als andere Zeichen auch. Wobei mir bei keinem einzigen Zeichen irgendwelche generellen Probleme bekannt sind.

    $sql = "SELECT * FROM kundendaten WHERE email='$email' ;
    $adresse = mysql_query($sql);
    while ($row = mysql_fetch_row($adresse)){
    echo "<td>$row[0]></td>";

    Eine Kontrollausgabe mit var_dump() ergibt ein genaueres Ergebnis, weil du dabei unter anderem die Länge des Strings angezeigt bekommst. Bitte prüfe diese.

    echo "$verabschiedung $name";

    1. Eine Kontrollausgabe mit var_dump() ergibt ein genaueres Ergebnis, weil du dabei unter anderem die Länge des Strings angezeigt bekommst. Bitte prüfe diese.

      echo "$verabschiedung $name";

      Du hast recht, ich lese den Datensatz in ein Formularfeld ein, es liegt am Formularfeld! Hätte ich auch selbst draufkommen können.

      echo "<td bgcolor=red><input class=formelement name=strasse type=text size=20 value=$row[strasse]></td>";

      Allerdings weiss ich noch immer kein Lösung. Wieso stellt mir das Formularfeld die Nummer nicht dar? Ohne Leerzeichen im Datensatz funktioniert es natürlich.

      1. echo $begrüßung;

        echo "<td bgcolor=red><input class=formelement name=strasse type=text size=20 value=$row[strasse]></td>";

        Allerdings weiss ich noch immer kein Lösung. Wieso stellt mir das Formularfeld die Nummer nicht dar? Ohne Leerzeichen im Datensatz funktioniert es natürlich.

        Weil du die Attributwerte nicht in "" setzt. Ein Attributwert hört nämlich sonst am ersten Leerzeichen auf. Außerdem hast du hier wieder nicht den Kontext beachtet. Der HTML-Kontext verlangt, dass die HTML-eigenen Zeichen gesondert zu notieren sind. Wann immer du irgendeinen Wert (besonders variable Werte aus anderen Quellen) in einem bestimmten Kontext bringst, muss dieser Wert dem Kontext entsprechend behandelt werden. PHP hilft dir für den HTML-Kontext, indem es die Funktion htmlspecialchars() bereitstellt. Beispiel:

        printf('<td bgcolor="red"><input class="formelement" name="strasse" type="text" size="20" value="%s"></td>',
            htmlspecialchars($row['strasse']));

        Weiterhin solltest du beachten: Why is $foo[bar] wrong?

        echo "$verabschiedung $name";

      2. Hello,

        echo "<td bgcolor=red><input class=formelement name=strasse type=text size=20 value=$row[strasse]></td>";

        *args* da sind ja direkt mehrere Fehler drin, einer davon führt zu deinem Problem.

        1. $row[strasse] ist etwas vollkommen anderes als $row["strasse"], was du eigentlich suchst!
        2. Es empfiehlt sich, Attribute mit Anführungszeichen zu versehen. Was bei Zahlen meist gutgeht und bei Text ohne Leerzeichen auch irgendwie funktioniert, bricht dir hier das Genick:
          value="Musterweg 13"
          ist ein Attribut value mit Wert "Musterweg 13" -
          value=Musterweg 13
          hingegen ist ein Attribut value mit Wert "Musterweg" und ein unbekanntes Attribut 13.

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
        1. hingegen ist ein Attribut value mit Wert "Musterweg" und ein unbekanntes Attribut 13.

          MfG
          Rouven

          Du hast recht, bin ich gerade auch drauf gekommen, habe jetzt <input class=formelement name=strasse type=textfield size=20 value='$row[strasse]'> in Hochkomma gesetzt, klappt nun auch.
          So einfach kann das Leben sein.

          Danke Euch!