Sönke Tesch: Query-String zum Zweiten

Beitrag lesen

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