Andreas: Get Variable: nur erstes Wort der Var. wird übertragen?

Hallo!
Hab mal eine Frage, ich habe in meinem Warenkorb eine Tabelle(html), in die ich am Ende einen Link eingefügt habe, der den Datensatz löscht. Das ganze sieht so aus:

echo "<tr><td>$row[1]</td><td>$row[2]</td><td>$row[3]</td><td>$row[4]</td><td><a href=select.php?del=$row[2]>entfernen</a> </td></tr>\n";

die Datei heißt select.php, d.h. die Seite wird aktualisiert, daran habe ich die Variable $row[2] gehängt, in der der Produktname gespeichert wird. Funktioniert wunderbar, nur sobald der Produktname aus mehr als einem Wort besteht, wird nichts mehr gelöscht, da in der Variable immer nur das erste Wort gespeichert wird.
Liegt wohl daran, dass ich die "" um den Link weggelassen habe, aber wenn ich die einfüge, funktioniert es nicht mehr, da PHP das für das Ende von echo hält.
Ich habe auch schon andere Zeichen probiert, war natürlich erfolglos!
Noch zur Erklährung, eine Anfrage eingefügt, die den Datensatz löscht, wo die Variable $del = Produkt.
Oder weiß jemand eine bessere Möglichkeit das zu realisieren?
Vielleicht dazu noch eine andere Frage, ich könnte das evtl umgehen, wenn ich einen Autowert in der MySQL Tabelle einfüge, den ich dann ja abfragen könnte, der hat ja keine Leerzeichen. Geht das irgendwie mit phpMyAdmin?
Aber interessieren ob das obige trotzdem irgendwie geht würde mich schon
Gruß Andreas

  1. Hi,

    Funktioniert wunderbar, nur sobald der Produktname aus mehr als einem Wort besteht,

    Sonderzeichen müssen innerhalb einer - auch relativen - URL kodiert werden. Dazu gehören nicht nur Leerzeichen, sondern z.B. auch Umlaute, eventuelle "&" oder "=" usw.

    Schlag in der PHP-Doku nach, was diese zu "URL" und "Kodierung" enthält.

    Liegt wohl daran, dass ich die "" um den Link weggelassen habe,

    Nein; das sollten einen anständigen Browser schon allein wegen des "?" zur Verweigerung seiner Arbeit bringen. Wenn Du nicht sicher bist, ob ein Attributwert in Anführungszeichen stehen muss, dann benutze sie vorsichtshalber - das ist niemals falsch.

    aber wenn ich die einfüge, funktioniert es nicht mehr, da PHP das für das Ende von echo hält.

    Richtig. Was ich auf <?m=6926&t=1131> geantwortet habe, gilt auch für Dich.

    Ich habe auch schon andere Zeichen probiert,

    Don't do wild tries. When in doubt, RTFM.

    war natürlich erfolglos!

    Das sind wilde Versuche fast immer - im Zweifel machen sie nur irgendwas kaputt.

    Cheatah

    1. Hi!
      Danke für die schnelle Antwort!
      Stimmt, aber das Fragezeichen ist wohl OK, steht doch immer bei GET Variablen!
      Also meinst Du soll ich beim Eintrag in die DB das Leerzeichen ändern? Aber woanders wird es ja richtig angezeigt, in der TAbelle steht bei row[2] der kpl. Eintrag!
      Gruß
      Andreas

      1. Hi,

        Stimmt, aber das Fragezeichen ist wohl OK, steht doch immer bei GET Variablen!

        das Fragezeichen in einer URL ist legitim; es trennt den Searchpart ab. In einem HTML-Attributwert darf es nur dann stehen, wenn dieser durch Anführungszeichen eingerahmt ist.

        Also meinst Du soll ich beim Eintrag in die DB das Leerzeichen ändern?

        Nein. In die DB schreibst Du exakt das, was Du drin stehen haben möchtest - dazu ist sie da. Wenn Du die Daten aber irgendwo - wo auch immer! - verwenden möchtest, musst Du Dir zunächst ansehen, was dort zu kodieren ist. In einer URL sind das u.a. Umlaute, Leerzeichen usw., und wenn Du die URL dann noch in HTML-Code verwendest, kommen dort weitere Zeichen hinzu (insbesondere das "&"), die ihre eigene Form der Kodierung benötigen.

        Aber woanders wird es ja richtig angezeigt,

        Woanders ist es ja auch keine URL.

        Cheatah

        1. Hi!
          Noch eine Frage:
          Wenn ich jetzt doch keine "" verwende, da ich eine einstellige ID verwende, das läuft jetzt bei mir IE5.5, kann es da wohl Probleme mit anderen Browsern geben???
          Gruß
          Andreas

  2. Hallo Andreas!

    Mit " bringste die " in einer php-Zeichenkette unter. Und mit urlencode() bekommst du alle Zeichen valide in die URL. Dann sollte der Link so aussehen:
      echo "<a href="select.php?del=".urlencode($row[2])."">entfernen</a>";

    Gruss,
     Carsten

    1. Genau das habe ich gesucht!
      Vielen Dank!

      Andreas

  3. Hallo Andreas

    zu dem was Cheatah sagt noch:

    echo "<tr><td>$row[1]</td><td>$row[2]</td><td>$row[3]</td><td>$row[4]</td><td><a href=select.php?del=$row[2]>entfernen</a> </td></tr>\n";

    php erlaubt auch folgende Notation:

    echo '"..."'
    allerdings müssen hier Variablen dann mit '<tr><td>'.$row[1].'</td>' übergeben werden.

    Maskieren ist auch möglich: echo """

    Viele Grüße

    Antje

    1. Hallo,

      es ist zwar alles richtig was cheatah und antje sagen, keine frage, nur sollte man etwas auf die Arbeitsweisse von PHP achten, bei der richtigen notierung kann man sein skript um einiges beschleunigen, sowie lesbarer machen:

      echo "string string string $var string string";
      ist zwar richtig, und funktioniert auch einwandfrei, nur der parser wird dabei gezwungen den string nach einer variablen zu durchsuchen. Beschleunigen könnte man das ganze mit:
      echo "string string string ".$var." string string";

      Das nächste problem sind Arrays eine notation in der art:

      echo "string string string $var[0] string string";
      funktioniert ohne probleme, nur versuch mal:
      echo "string string string $var["asso"] string string";
      daran scheitert der parser, um assoziative Arrays in strings einzubinden, muss man zwangsläufig den string bereich vom Variablen/array bereich trenne:
      echo "string string string ".$var["asso"]." string string";

      Manch einer wird jetzt denken wo sich hier die lesbarkeit steigert, verwendet einfach mal einen editor mit syntaxhighlighting, dieser wird variablen/arrays innerhalb von strings nicht als solche erkennen, wird das allerdings getrennt, werden die variablen/arrays auch als solche gekennzeichnet.

      Der geschwindigkeitsvorteil den ich oben beschrieben habe, tritt erst spürbar bei größeren skripten auf (>500 zeilen) (ansonsten hilft da der zend_optimizer auch ziemlich)

      my 2cents
      Ludwig

      PS: ja mir ist fad, ja ich konnte nicht schlafen, und ja ich geh jetzt gleich in die arbeit :)))