meisterB: mysql_fetch_array liefert keine Strings mit Leerzeiche!

Hallo, wie schon geschrieben liefert mein SQL-Query die Strings nur bis zum Leerzeichen zurück. Mach ich was falsch?
Hier der Code:

include 'connect.php';
$result = mysql_query("SELECT * FROM tab_land");
echo'<form action="LaenderBEARB.php" method="GET" target="rechtsu"><table><tr><td>KFZ:</td><td>Land:</td><td><img src="./imgs/b_edit.png" alt="Bearbeiten" width="16" height="16" border="0"></td><td><img src="./imgs/b_drop.png" alt="Loeschen" width="16" height="16" border="0"></td></tr>';
while($row = mysql_fetch_array($result))
{ echo '<tr><td><input type="text" name="AusgabeKfz"  size="5" value='.$row["Land_Kfz"].' readonly></td>
                  <td><input type="text" name="AusgabeLand" size="30" value='.$row["Land"].' readonly></td>
                  <td><input type="RADIO" name="CB" value='.$row["Land_Kfz"].'></td>
                  <td><input type="RADIO" name="CL" value='.$row["Land_Kfz"].'></td></tr>';
 }
echo'<tr><td></td><td><input type="SUBMIT" value="Bearbeiten"></td><td></td><td></td></tr>';
echo"</table></form>";
mysql_close();

Danke im Vorraus!

  1. Moin!

    Hallo, wie schon geschrieben liefert mein SQL-Query die Strings nur bis zum Leerzeichen zurück. Mach ich was falsch?

    Schau nicht in die Browseranzeige, schau in deinen Quelltext! Da sind die Texte mit allen Leerzeichen zu 100% enthalten - nur leider in einer für HTML unzugänglichen Form.

    echo '<input type="text" name="AusgabeKfz"  size="5" value='.$row["Land_Kfz"].' readonly>'

    - Sven Rautenberg

    1. Hallo Sven,
      Leider kann ich mit deiner Aussage nicht viel anfangen. Was meinst du mit: für html unzugängliche Form??
      Wie komme ich an die Daten ran??

      1. Hallo Sven,
        Leider kann ich mit deiner Aussage nicht viel anfangen. Was meinst du mit: für html unzugängliche Form??

        Ich habs verstanden, es liegt am Textfeld. Gibt es da eine Möglichkeit irgendwie den String reinzubekommen?? In diesem Stück ist es zwar egal, aber in einem anderen MUSS es ins Textfeld, da ich dort ändern muß. :-D

        Wie komme ich an die Daten ran??

        1. Hello,

          Ich habs verstanden, es liegt am Textfeld. Gibt es da eine Möglichkeit irgendwie den String reinzubekommen?? In diesem Stück ist es zwar egal, aber in einem anderen MUSS es ins Textfeld, da ich dort ändern muß. :-D

          Die Strings werden nicht nur Leerzeichen (#032 dezimal) enthalten, sondern auch Zeilenumbrüche oder Tabulatoren o.ä.. Die werden aber von einem Textfeld als Textendemarke interpretiert.

          Du müsstest also vorher alle Whitespaces mit Ausnahme der echten Leerzeichen entfernen, oder aber eine Textarea für die Darstellung benutzen. Vergiß aber nicht, die HTMLeignen Zeichen zu codieren.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Habe jetzt versucht die Leerzeichen mit &#32 zu ersetzen. Will aber nicht klappen. Da wo ein Leerzeichen drin ist sagt er trotzdem als Ergebnis 0.

            str_replace($row["Land"], " ", "&#32",$row["Land"]);

            1. Habe jetzt versucht die Leerzeichen mit &#32 zu ersetzen. Will aber nicht klappen. Da wo ein Leerzeichen drin ist sagt er trotzdem als Ergebnis 0.

              str_replace($row["Land"], " ", "&#32",$row["Land"]);

              So, mit

              $row["Land"] = ereg_replace(" ", "&#32", $row["Land"]);

              geht es jetzt!!
              Danke für Eure Hilfe!!!

              MFG meisterB

              1. Moin!

                So, mit

                $row["Land"] = ereg_replace(" ", "&#32", $row["Land"]);

                geht es jetzt!!

                Und du hast immer noch keine Anführungszeichen um deinen Attribut-Wert gemacht - MIT denen hättest du deine Probleme mit den Leerzeichen aber nicht gehabt.

                Und als Anmerkung2: Nimm, wenn schon, dann preg_replace() und nicht ereg_replace() für reguläre Ausdrücke. Und zur simplen Stringersetzung ohne die Notwendigkeit von regulären Ausdrücken nimm bitte str_replace().

                - Sven Rautenberg

                1. Moin!

                  So, mit

                  $row["Land"] = ereg_replace(" ", "&#32", $row["Land"]);

                  geht es jetzt!!

                  Und du hast immer noch keine Anführungszeichen um deinen Attribut-Wert gemacht - MIT denen hättest du deine Probleme mit den Leerzeichen aber nicht gehabt.

                  Du meinst also einfach:

                  <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value="'.$row["Land_Kfz"].'">

                  statt

                  <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value='.$row["Land_Kfz"].'>

                  hätte genügt???

                  Und als Anmerkung2: Nimm, wenn schon, dann preg_replace() und nicht ereg_replace() für reguläre Ausdrücke. Und zur simplen Stringersetzung ohne die Notwendigkeit von regulären Ausdrücken nimm bitte str_replace().

                  str_replace() wollte nicht funktionieren!

                  MFG Sebastian

                  1. hi,

                    Du meinst also einfach:
                    <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value="'.$row["Land_Kfz"].'">
                    statt
                    <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value='.$row["Land_Kfz"].'>
                    hätte genügt???

                    ja (*), leute die sich mit HTML beschäftigt haben, bevor sie mit PHP & co. herumzuspielen anfangen, hätten das auch gleich gewusst.
                    andere basteln dann lösungen wie deine, die immer noch kokolores sind.

                    gruß,
                    wahsaga

                    (*) eigentlich eher ein jein bzw. ein nein, weil ggf. auftauchende HTML-eigene zeichen immer noch nicht berücksichtigt werden.

                    --
                    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                    1. Moin!

                      ja (*), leute die sich mit HTML beschäftigt haben, bevor sie mit PHP & co. herumzuspielen anfangen, hätten das auch gleich gewusst.

                      Hatte ich ganz als erstes ja auch gesagt:
                      "Schau nicht in die Browseranzeige, schau in deinen Quelltext! Da sind die Texte mit allen Leerzeichen zu 100% enthalten - nur leider in einer für HTML unzugänglichen Form."

                      :)

                      - Sven Rautenberg

                    2. hi,

                      Du meinst also einfach:
                      <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value="'.$row["Land_Kfz"].'">
                      statt
                      <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value='.$row["Land_Kfz"].'>
                      hätte genügt???

                      ja (*), leute die sich mit HTML beschäftigt haben, bevor sie mit PHP & co. herumzuspielen anfangen,

                      Man lernt nie aus, oder ließt du erst alle Kochbücher der Welt, bevor du den Herd einschaltest?? :-D

                      hätten das auch gleich gewusst.

                      andere basteln dann lösungen wie deine, die immer noch kokolores sind.

                      gruß,
                      wahsaga

                      (*) eigentlich eher ein jein bzw. ein nein, weil ggf. auftauchende HTML-eigene zeichen immer noch nicht berücksichtigt werden.

                      Also doch lieber Svens Version mit dem htmlspecialchars($string) noch dazu nehmen....

                      Also auf jeden Fall riesen Danke an euch!

                      1. hi,

                        Man lernt nie aus, oder ließt du erst alle Kochbücher der Welt, bevor du den Herd einschaltest?? :-D

                        nein, aber wenn ich etwas bestimmtes kochen will, sorge ich zumindest im vorfeld dafür, dass ich alle nötigen zutaten parat habe.

                        die standardzutat "HTML-grundlagenwissen" fehlt aber in deiner küche offenbar noch.

                        gruß,
                        wahsaga

                        --
                        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                        1. hi,

                          Man lernt nie aus, oder ließt du erst alle Kochbücher der Welt, bevor du den Herd einschaltest?? :-D

                          nein, aber wenn ich etwas bestimmtes kochen will, sorge ich zumindest im vorfeld dafür, dass ich alle nötigen zutaten parat habe.

                          die standardzutat "HTML-grundlagenwissen" fehlt aber in deiner küche offenbar noch.

                          Ja, ich gebe zu, ein paar Sachen fehlen mir da schon, allerdings bin ich ins kalte Wasser geschupst worden. Aber egal... Werd mich bei Gelegenheit ein bisschen besser informieren.

                          MFG Sebastian

                          Danke nochmal für Eure Geduld!

                  2. Moin!

                    Du meinst also einfach:

                    <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value="'.$row["Land_Kfz"].'">

                    statt

                    <input type="TEXT" name="upLandKfz" size="2" maxlength="2" value='.$row["Land_Kfz"].'>

                    hätte genügt???

                    Aber natürlich!

                    Angenommen, der einzufügende String wäre "Ein Land".

                    Mit Variante 1 kommt raus: .... value=Ein Land>
                    "Land" wird vom HTML-Parser als eigenständiges, aber nirgendwo definiertes Attribut gewertet und ignoriert. Der value des Input-Feldes wird auf "Ein" gesetzt.

                    Variante 2 liefert: value="Ein Land">
                    Die Anführungszeichen begrenzen den Value-Wert, genauso wie bei allen anderen Attributen.

                    Grundsatzregel bei HTML: Attributwerte _müssen_ immer mit Anführungszeichen (entweder einfache ' oder doppelte ") umschlossen werden, wenn der Attributwert keine Zahl ist, Sonderzeichen enthält oder was anderes als eine einfache Buchstabenkette. Sie immer zu setzen, auch wenn man es theoretisch nicht muß, ist aber nicht falsch - also setze sie immer.

                    Das einzige, was dir jetzt noch passieren kann: In deinem Land-String ist ein Anführungszeichen " drin. Dann zerschießt es dir den HTML-Code natürlich auch.

                    Abhilfe: Die Ausgabe IMMER mit der Funktion htmlspecialchars() ausgeben:
                    echo "<input value='".htmlspecialchars($string)."' size='2'>";

                    Und als Anmerkung2: Nimm, wenn schon, dann preg_replace() und nicht ereg_replace() für reguläre Ausdrücke. Und zur simplen Stringersetzung ohne die Notwendigkeit von regulären Ausdrücken nimm bitte str_replace().

                    str_replace() wollte nicht funktionieren!

                    Funktionen haben im allgemeinen keinen eigenen Willen und verhalten sich auch nicht störrisch wie ein Esel. Wenn etwas nicht funktioniert, dann liegt in der Regel ein Programmierfehler vor.

                    - Sven Rautenberg

            2. Hallo,

              Habe jetzt versucht die Leerzeichen mit &#32 zu ersetzen. Will aber nicht klappen. Da wo ein Leerzeichen drin ist sagt er trotzdem als Ergebnis 0.
              str_replace($row["Land"], " ", "&#32",$row["Land"]);

              [x] du möchtest dir auf http://de.php.net/str_replace anschauen, welche Parameter str_replace erwartet und was die Funktion zurückgibt.

              Grüße aus Nürnberg
              Tobias

        2. Moin!

          Leider kann ich mit deiner Aussage nicht viel anfangen. Was meinst du mit: für html unzugängliche Form??
          Ich habs verstanden, es liegt am Textfeld. Gibt es da eine Möglichkeit irgendwie den String reinzubekommen?? In diesem Stück ist es zwar egal, aber in einem anderen MUSS es ins Textfeld, da ich dort ändern muß. :-D

          Klar. Um alle anderen Werte der Attribute setzt du doch auch Anführungszeichen drumherum. Wie sieht das bei deinem Quelltext aus, wo die Leerzeichen den Fehler verursachen? Da sind keine Anführungsstriche im Quelltext!

          Ergo... mach Anführungsstriche rein, dann ist der Anfang und das Ende deines Strings für HTML eindeutig definiert.

          - Sven Rautenberg