Claudia: Query-String zum Zweiten

Moin

Bevor ich mit den aufwendigen Seiten weiterfahre, möchte ich das Prinzip vom Query-String verstehen. Leider finde ich im Internet kein komplettes Beispiel.

Von den insgesamt 12 Seiten mit den je 7 Fragen kann ich davon die ersten drei Seiten unter http://home.datacomm.ch/r_frei/Test/Seite1.htm vorzeigen. Damit sollte das Auswertverfahren verständlich sein, das für die Kirchgemeinde bestimmt ist.

Ich erhielt bereits folgende Antwort:

seite1 beispiel link:
<a href="seite2.php?werte=-90">bla</a>

seite2 beispiel link:
<a href="seite2.php?werte=<?=$werte?>,10">bla</a> sollte hier nicht Seite3 stehen?

seite3 Beispiel link:
<a href="seite2.php?werte=<?=$werte?>,50">bla</a> und hier seite4

Meiner Meinung nach gibt mir dieses System, das sich auf die entsprechende Bildzeile bezieht am Ende ein heilloses durcheinander, mit den versprenkelten Antworten. Kann man wirklich mit split Ordnung schaffen? Wäre es nicht einfacher, wenn man die Seitenantwort auf einer zusätzliche Zeile zusammenfassen könnte?

Mein Problem besteht darin, dass ich die Werte am Ende zur weiteren Darstellung in eine Tabellenreihenfolge bringen muss wie:
<table><tr><td>-65</td>
<td>-90</td> ...

Hoffentlich ist meine Problemstellung klar genug für ein Lösungsmodell.

Mit bestem Dank und Gruss

Claudia

  1. Hi,

    Bevor ich mit den aufwendigen Seiten weiterfahre, möchte ich das Prinzip vom Query-String verstehen.

    der Query-String ist ein String, der bei einem Request an eine Ressource übergeben werden kann. Bei Formularen der Methode GET wird er vom Client generiert; darüber hinaus liegen Aufbau und Semantik (im Rahmen gültiger Syntax, versteht sich) voll und ganz im Ermessen des Programmierers.

    Leider finde ich im Internet kein komplettes Beispiel.

    Was wäre denn Deiner Meinung nach vollständig? URLs sind in RFC 1738 (http://www.ietf.org/rfc/rfc1738.txt) definiert, auch der Query-String wird dort erwähnt.

    <a href="seite2.php?werte=-90">bla</a>

    Gibt dieses Script PHP-Code zum Client zurück? Das wäre der einzige Grund, die Ressource auf ".php" zu benennen. Wenn statt dessen HTML zurückgeliefert wird, ist ".html" angemessen.

    <a href="seite2.php?werte=<?=$werte?>

    Dies ist ein Sicherheitsleck, sofern Du $werte nicht zuvor initialisiert hast. Richtig wäre:

    <a href="seite2.html?werte=<?=$_GET['werte']?>

    ,10">

    Hierdurch wird an den vorherigen Wert einfach ",10" angehängt. Die Semantik, Sortierung, Art der Auswertung oder Ignorierung ist absolut Dein Bier und hat letztlich mit dem Query-String nichts mehr zu tun.

    sollte hier nicht Seite3 stehen?

    Wenn das nächste Script diesen Namen tragen soll, ja. Wenn nicht, nicht.

    Meiner Meinung nach gibt mir dieses System, das sich auf die entsprechende Bildzeile bezieht am Ende ein heilloses durcheinander,

    Kommt darauf an, was für Dich ein Durcheinander ist, und ob Du es nicht leicht korrigieren kannst.

    Kann man wirklich mit split Ordnung schaffen?

    Nein; aber mit split kann man sich eine sortierbare Menge erzeugen.

    Wäre es nicht einfacher, wenn man die Seitenantwort auf einer zusätzliche Zeile zusammenfassen könnte?

    Ob das einfacher wäre, kann außer Dir kein fühlendes Wesen des Universums beantworten. Natürlich abgesehen davon, dass es hier keine Zeilen gibt. Vermutlich meintest Du weitere Parameter?

    Mein Problem besteht darin, dass ich die Werte am Ende zur weiteren Darstellung in eine Tabellenreihenfolge bringen muss wie:

    Und dieses Problem hat inwiefern mit dem Query-String zu tun? Inwieweit würde es sich ändern, wenn Du den letztendlichen String im Script hartkodiert hättest?

    Hoffentlich ist meine Problemstellung klar genug für ein Lösungsmodell.

    Die Aufgabenstellung ist mir klar, nicht jedoch das Problem, das Du hast :-)

    Cheatah

  2. Bevor ich mit den aufwendigen Seiten weiterfahre, möchte ich das Prinzip vom Query-String verstehen. Leider finde ich im Internet kein komplettes Beispiel.

    Da gibt es auch nicht viel zu erklären. Das Ding wird mit einem Fragezeichen hinten an die Seitenadresse rangehängt und taucht dann im Skript auf die ein oder andere Art wieder auf. Fertig :)
    Was verstehst Du daran nicht?

    Von den insgesamt 12 Seiten mit den je 7 Fragen kann ich davon die ersten drei Seiten unter http://home.datacomm.ch/r_frei/Test/Seite1.htm vorzeigen. Damit sollte das Auswertverfahren verständlich sein, das für die Kirchgemeinde bestimmt ist.

    An dieser Seite möchte ich mal ein wenig rummeckern, denn irgendwie habe ich den Eindruck, daß Du da eine ganze Menge Dinge heillos durcheinander bekommen hast.

    1.
    Klammer HTML-Seiten doch in ein <html></html>-Paar ein.

    2.
    In Deiner Seite taucht oben PHP-Code auf:

    <?php
      session_register("count");
      $count++;
      ?>

    3.
    Dann diese Konstruktion, die nun wirklich grausig ist:

    <p>
       <span style="LEFT: 323px; POSITION: absolute; TOP: 1px">
        <a href='Seite2.php?antwort1=<table><tr><td>-65</td>' onclick="document.location.href=('Seite2.htm')">
         <input type="image" src="BILDERzS1/Geld.jpg" alt="Geldgier und Raffsucht" id=1>
        </a>
       </span>
      </p>

    • Das <p> sollte man um einen Absatz setzen, hier in Deinem Code erfüllt es irgendwie keine Funktion.
    • <span> ist für Elemente im Textfluss gedacht. Wenn Du sowieso einen Block positionieren willst, nimm doch bitte <div>.
    • Wenn Du nur ein Element positionieren willst, dann positioniere gleich das betreffende Element (hier: <a>) und bau nicht noch zwei drumrum (<p> und <span>).
    • Warum benutzt Du im <a> einmal das href-Attribut und zusätzlich noch ein onclick, um die Adresse zu ändern? Das ist doch doppelt?
    • <input> ist für Formulare (<form>) gedacht, als alleinstehendes Element macht es überhaupt keinen Sinn.

    Das ganze Ding oben kannst Du durch zwei Elemente ersetzen:

    <a style="left:323px;position:absolute;top:1px" href="Seite2.php?antwort1=-65">
       <img src="BILDERzS1/Geld.jpg" alt="Geldgier und Raffsucht">
      </a>

    4.
    Du solltest Dich bemühen, Kleinschreibung zu verwenden. Bei den CSS-Attributen ist das zwar AFAIK egal, aber ganz bestimmt nicht bei den URLs.
    Deine erste Seite heißt "Seite1.htm", die weiteren dann anscheinend "seite2.php" und "seite3.php". Auf diese Art und Weise baust Du Dir nur ärgerliche Fehlerquellen ein, wenn Du in Verweisen meinetwegen aus Gewohnheit "Seite2.php" ansprichst, der Server diese aber nicht finden kann, weil die Datei "seite2.php" heißt. Sowas ist einfach nur unnötig.

    Ich erhielt bereits folgende Antwort:

    Wann? Worauf?

    seite1 beispiel link:
    <a href="seite2.php?werte=-90">bla</a>

    Ich kann aus Deiner Beispielseite nur

    Seite2.php?antwort1=<table><tr><td>70</td>

    bzw. alternativ dazu

    Seite2.htm

    erkennen, je nachdem, ob der Browser der HTML-href oder der Javascript-Variante den Vorzug gibt (könnte wetterabhängig sein).

    seite2 beispiel link:

    (s|S)eite2.(htm|php) existiert nicht.

    seite3 Beispiel link:

    (s|S)eite3.(htm|php) existiert nicht.

    Meiner Meinung nach gibt mir dieses System, das sich auf die entsprechende Bildzeile bezieht am Ende ein heilloses durcheinander,

    Sorry, aber das durcheinander besteht schon in Deinem Quelltext.

    Hoffentlich ist meine Problemstellung klar genug für ein Lösungsmodell.

    Leider nicht. Aber wenn Du es Dir so wünscht, wie ich vermute, würde ich Dir folgendes vorschlagen (zusätzlich zu den oben genannten Punkten):

    <a href="seiteX?<?php echo $_SERVER["QUERY_STRING"]; ?>;hier_kommt_ein_wert">

    $_SERVER["QUERY_STRING"] musst Du eventuell durch $HTTP_SERVER_VARS["QUERY_STRING"] oder $QUERY_STRING ersetzen, je nach PHP-Version.
    Dieser Vorschlag ist ähnlich dem, was Du unter seite2 und 3 anscheinend schon irgendwie versucht hast, umzusetzen.

    In jedem Fall hast Du damit auf der letzten Seite alle Werte schön säuberlich als Kette:

    -90;42;-20;23

    Diesen Text kannst Du dann mit explode() (auf das Semikolon) in ein Feld zerlegen und mit foreach als Tabelle ausgeben.

    Wenn Du den Vorgang verfolgen willst, kannst Du oben in allen Seiten die Variable auch ausgeben:

    <?php
      echo $_SERVER["QUERY_STRING"] ."<p>";
      ?>

    Gruß,
      soenk.e

    1. Hi Sönke,

      <a href='Seite2.php?antwort1=<table><tr><td>-65</td>' onclick="document.location.href=('Seite2.htm')">

      • Warum benutzt Du im <a> einmal das href-Attribut und zusätzlich noch ein onclick, um die Adresse zu ändern? Das ist doch doppelt?

      Der onClick führt zu einer Seite, der href zu einer anderen.
      Das ist keineswegs "doppelt".

      Ich kann aus Deiner Beispielseite nur
        Seite2.php?antwort1=<table><tr><td>70</td>
      bzw. alternativ dazu
        Seite2.htm
      erkennen, je nachdem, ob der Browser der HTML-href oder der Javascript-
      Variante den Vorzug gibt (könnte wetterabhängig sein).

      Könnte aber auch davon abhängen, ob JavaScript eingeschaltet ist oder nicht.

      Viele Grüße
            Michael

      1. <a href='Seite2.php?antwort1=<table><tr><td>-65</td>' onclick="document.location.href=('Seite2.htm')">

        • Warum benutzt Du im <a> einmal das href-Attribut und zusätzlich noch ein onclick, um die Adresse zu ändern? Das ist doch doppelt?

        Der onClick führt zu einer Seite, der href zu einer anderen.
        Das ist keineswegs "doppelt".

        Nichtsdestotrotz sinnlos.

        Gruß,
          soenk.e

        1. Hi,

          <a href='Seite2.php?antwort1=<table><tr><td>-65</td>' onclick="document.location.href=('Seite2.htm')">

          Nichtsdestotrotz sinnlos.

          aber nur, weil a) location immer noch kein Objekt von document ist und b) die Klammern da nichts verloren haben. Ansonsten ist das prinzipiell schon korrekt: mit JavaScript wird etwas anderes gemacht als ohne es.

          Cheatah

          1. Hallo

            Besten Dank für die detaillierten Infos. Daran werde ich noch ein weilchen zu knappern haben.

            Gruss Claudia