# Mehrere Variablen in URL übergeben



## GudrunS (11. August 2004)

Hallo,

ich bin ganz neu hier aber habe natürlich gleich eine Frage.

Ich habe eine Homepage gemacht, auf der ich meine überflüssigen Bücher verkaufen will. Bisher habe ich ein Link "Bestellen" gehabt, hinter dem einfach eine "mailto"-Verknüpfung war.
Jetzt möchte ich die Bestellung per Formular ermöglichen und da stolpere ich von einem Problem zum anderen. Aber keine Angst, ich möchte jetzt erst mal ein Problem lösen und dann schauen, ob ich die anderen nicht selbst in den Griff bekomme...

Mein php-Hintergrund ist leider nicht sehr groß.. Mein aktuelles Problem versuche ich seit 1 Woche mit Hilfe von Büchern (leider nicht sehr viele in der Bücherei vorhanden), Forenlesen und Google-Suchen zu lösen, komme aber nicht weiter.

Ich möchte gerne von der Buchbeschreibungsseite aus das Bestellformular aufrufen und die jeweiligen Buchdaten in das Formular übergeben.
Das Anhängen der Daten an die URL habe ich begriffen:
"bestellung.phtml?a=Autor&t=Titel&b=Buchnummer&p=Preis"

ABER: Bücher haben oft Umlaute und die will ich gerne aufgelöst übergeben.
Auf "rawurlencode" bzw. "urlencode" bin ich auch schon gestossen, aber da hänge ich jetzt auch fest.
Ich habe im Forum folgenden Artikel gefunden:
http://www.tutorials.de/forum/showthread.php?s=&threadid=148251&highlight=rawurlencode 
und habe dann folgendes Skript gebastelt:


```
<?PHP
$autor = "Hammerstein, Oliver von";
$titel = "Ich war ein Munie - Tageb&uuml;cher und Berichte einer Befreiung aus der Mun-Sekte";
$buchnr = "G-009";
$preis = "5,10 EUR";
$autor_encode = rawurlencode($autor);
$titel_encode = rawurlencode($titel);
$buchnr_encode = rawurlencode($buchnr);
$preis_encode = rawurlencode($preis);
echo "<a href="bestellung.phtml?a=' . $autor_encode . '&t=' . $titel_encode . '&b=' . $buchnr_encode . '&p=' . $preis_encode . '"><b>Bestellen</b></a>";
?>
```

Als Ergebnis bekomme ich aber leider keinen Link "Bestellen" sondern folgendes: Bestellen; ?> ohne Link.

Was mache ich falsch? Ich finde einfach keine Erklärung für das Verknüpfen mehrerer Variablen und "rawurlencode"

Ich bin für jede Hilfe dankbar...

Gruß
Gudrun


----------



## ludz (11. August 2004)

Zum einen stimmt deine Echo-Anweisung nur bedingt. Ändere diese bitte wie folgt ab:


```
echo '<a href="bestellung.phtml?a=' . $autor_encode . '&t=' . $titel_encode . '&b=' . $buchnr_encode . '&p=' . $preis_encode . '"><b>Bestellen</b></a>';
```

Zum anderen – falls obige Änderung nicht das Problem behebt – soltlest du überprüfen, ob auf deinem Server .phtml-Seiten auch wirklich durch den PHP-Interpreter geparst werden.


----------



## GudrunS (11. August 2004)

Vielen Dank für Deine Hilfe, aber jetzt ist - egal ob ich die Datei .phtml oder .php benenne - die Tabellenzelle, in der "Bestellen" auftauchen soll, LEER.

Jetzt bin ich völlig ratlos.

Gruß
GudrunS


----------



## ludz (11. August 2004)

Wie sieht denn dein Script insgesamt aus?
Was steht denn bei der Ausgabe im HTML-Quelltext?


----------



## saila (11. August 2004)

also prinzipiell:

a) wie ist dein script aufgebaut. 
b) werden die variablen von einer auf eine andere seite übergeben oder folgen noch mehr seiten?
c) gibt es eine datenbank?
d) warum die variablen per url übergeben?
e) wie willst du die daten verarbeiten?
f) was soll nach der verarbeitung mit den daten geschehen?
usw. usw. usw..

etwas zu umlauten. wenn du html mal gelesen hast, ist sauberer html auch in bezug auf umlaute mit sondernzeichen zu versehen. beispiel:

ä = &auml;
Ä = &Auml;

wäre das dein problem und würdest du die daten nicht an die url anhängen, sondern in den üblichen formular-tags versehenen variablen verwenden, wäre das problem recht einfach gelöst. 

es gibt einige tuts zu formularen und wie diese weiter verarbeitet werden können. und das dies nicht per google oder sonstigen tuts zu finden gewesen sei.........


----------



## GudrunS (11. August 2004)

Also, in der Datei, in der das Script steht (=Buchbeschreibungsseite) ist es das einzige Script und ich habe auch den gesamten Script-Text angegeben. Die Datei habe ich jetzt mal als Attachment drangehängt: g-009.txt

Was Du mit "Was steht denn bei der Ausgabe im HTML-Quelltext?" meinst, verstehe ich nicht ganz, da ich ja in der letzten Version keinen Link mehr habe, den ich anklicken kann und ich daher kein Ergebnis in "bestellung.phtml" habe.

Die Datei, die dann das Bestellformular enthält (bestellung.phtml) habe ich von meinem Provider übernommen, der eine Datei formmailer.phtml anbietet, und ich habe sie schon mal teilweise auf meine Bedürfnisse umgestellt. Da sind aber noch so viele Fehler drin, dass ich nicht mit gutem Gewissen empfehlen kann, sie sich anzusehen. (Außerdem kann man hier wohl nur eine Seite dranhängen)

Bin wie immer für jeden Hinweis dankbar.

Gruß
GudrunS


----------



## saila (11. August 2004)

bevor du nun weiter planlos arbeitest und auf antworten wartest - hier einige infos zu formularen und deren datenverarbeitung: http://www.dclp-faq.de/ch/ch-webvariablen.html

les es dir so oft wie möglich durch und wenn du was nicht verstehst, frag nach.


----------



## GudrunS (11. August 2004)

Hallo saila,

zu: a) wie ist dein script aufgebaut
Das Script, bzw. die Seite in der es drinen ist, habe ich an die vorige Antwort angehängt.

zu b) werden die variablen von einer auf eine andere seite übergeben oder folgen noch mehr seiten?
Die Variablen werden an "bestellung.phtml" übergeben und dienen dort dazu, das Buchbestellformular mit den Daten des bestellten Buches zu füttern.
Ich möchte nämlich nur ein Bestellformular haben. Dieses Bestellformular soll aber mir per Email die Buchdaten übermitteln, sonst weiß ich ja nicht, was bestellt wurde.

c) gibt es eine datenbank?
Nein, ich mache für jedes Buch eine eigene html-Seite und habe halt ein paar Übersichtsseiten.

d) warum die variablen per url übergeben?
Das hat mir ein Bekannter empfohlen, der aber von php soviel Ahnung hat wie ich...

e) wie willst du die daten verarbeiten?
Die Daten sollen in "bestellung.phtml" am Anfang des Bestellformulars auftauchen und danach auch noch in die Bestell-Email eingetragen werden (und wenn es ganz gut läuft auch noch in die Bestätigunsseite).
Damit habe ich auch noch meine Schwierigkeiten. Bei meinen ersten Versuchen - da übergebe ich die Variablen ohne "rawurlencode" - kommen die Variablen zwar in "bestellung.phtml" an, werden aber nicht an die Email weitergeleitet und tauchen auch nicht auf der Bestätigunsseite auf. Das wäre dann meine nächste Baustelle, die ich beackern muss.
Das ganze kann man sich übrigens hier anschauen:
http://www.diebuecherwuermer.de/test/
Man muss bei "Buchangebot" anfangen und landet dann bei dem individualisierten Bestellformular.
Und jetzt gebe ich meine ganze Unbedartheit frei und hänge auch noch die Bestelldatei als txt-Datei an...

Die Umlaute sind eigentlich in den Dateien sauber nach html-Codierungen geschrieben. Ich erstelle alle meine Dateien mit phase5. Reines html macht mir keine Schwierigkeiten, damit schreibe ich schon seit etlichen Jahren und habe mit diesen Seiten eigentlich noch nie Schwierigkeiten gehabt. Aber php ist Neuland für mich und ich gebe es ehrlich zu, dass ich mit den meisten Anleitungen Schwierigkeiten habe.

Mir ist jetzt zwischenzeitlich der Gedanke gekommen, ob ich die Buchdaten (Autor, Titel etc.) im Bestellformular so mit php eintragen kann, dass von dem Buchangebot über die URl, die das Bestellformular aufruft, nur die Buchnummer an das Bestellformular übergeben wird und dort dann über die Buchnummer die jeweiligen Variablen angesprochen werden können.
Ins Unreine gesprochen ungefähr so:
if $buchnr=G-009 dann fülle aus: a="Hammerstein, Oliver von"; t="Ich war ein Munie - Tagebücher und Berichte einer Befreiung aus der Mun-Sekte"; b=G-009; p=5,10 EUR
Aber da habe ich jetzt noch gar nicht recherchiert.

Ich hoffe, meine Erläuterungen sind nicht zu laienhaft und bedanke mich für die Gedult, die ihr mit mir habt.

Gruß
Gudrun


----------



## Chino (12. August 2004)

> _Original geschrieben von GudrunS _
> *c) gibt es eine datenbank?
> Nein, ich mache für jedes Buch eine eigene html-Seite und habe halt ein paar Übersichtsseiten.
> 
> ...



Also, um Dir mal eine kleine Anregung zu geben:

Ich würde Dir empfehlen, eine Datenbank für alle Deine Bücher anzulegen. Zum einen brauchst Du da nicht für jedes Buch eine statische HTML-Seite bauen, zum anderen hast Du bei der Bestellung erhebliche Vorteile.

Das Prinzip dabei ist folgendes: Du legst jedes Buch als Eintrag in einer Datenbanktabelle ab. Dazu kannst Du ja noch alle Daten abspeichern, Die Du darstellen willst. Also beispielsweise ein Beschreibungstext, ein Bild, genau wie Du es jetzt bereits hast. Jedes Buch wird dabei mit einer einmaligen Nummer versehen, über die Du das Buch aus der Datenbank abfragen kannst.

Hast Du die Bücher in der Datenbank, kannst Du sie einfach gelistet ausgeben lassen (oder sogar nach besonderen Suchkriterien o.ä). Ein Link führt zu der Beschreibungsseite, welche Du allerdings ein einziges mal als HTML-Datei vorliegen haben musst. Die Daten für das jeweilige Buch kommen dabei aus der Datenbank, anhand von der Nummer, die über die URL mit übergeben wird. Auf der "Detailseite" machst Du, vereinfacht gesagt folgendes:

-> Datenbank: Gib mir alle Informationen zu einem Buch, wo die Nummer gleich 124 ist.

Wenn Du diese Abfrage an die Datenbank stellst, dann kannst Du auf der Seite alle Daten, die Du in der Datenbank zu dem Buch abgespeichert hast, anzeigen lassen. Will der Besucher nun das Buch bestellen, klickt er auf einen "Bestell"-Link, wo ebenfalls nur die ID zum Buch mitübergeben wird. Auf der Formularseite machst Du dann im Prinzip die gleiche Datenbankanfrage, damit Du die Daten im Formular ausgeben lassen kannst. 

Du musst bedenken, wenn Du die Daten im Klartext über die URL auf die Formularseite weitergibst, sind sie veränderbar, sprich: der Besucher kann beispielsweise den Namen vom Buch ändern (ob jetzt beabsichtigt oder nicht sei mal dahingestellt). Du hast aber keinerlei Kontrolle darüber. Arbeitest Du mit einer Datenbank, kannst Du bei einer falschen Buch-Nummer eine entsprechende Fehlermeldung ausgeben lassen.

Ebenfalls hast Du den Vorteil, dass Du, sofern Du eine Datenbank verwendest, die Ausgabe auf mehrere Seiten verteilen kannst, anstatt alle Bücher auf eine Seite aufzulisten.

Also, wie Du siehst, spricht alles für eine Datenbank, vor allem bei so vielen Daten wir bei Dir. Das hört sich jetzt vielleicht, gerad für einen PHP-Anfänger, etwas kompliziert an, aber unmöglich ist das keineswegs  Es gibt ja schließlich noch das Forum *g*

Zum Schluss noch ein paar sehr nützliche Links, die auch sehr Anfängertauglich sind 

http://tut.php-q.net/ 
http://www.schattenbaum.net/php/


----------



## GudrunS (12. August 2004)

*Ein Problem gelöst...*

Vielen Dank noch für die ganzen Hilfen.

Ich habe das Problem in der Urspungsdatei (=Buchseite) gelöst:
Ich Dubbel habe gestern in meinem Tran das PHP-Script in die .html-Datei und nicht in die .php-Datei eingebaut. Da kann es natürlich nicht tun...

Inzwischen habe ich das korrigiert und jetzt funktioniert dieses erste Script so wie es soll.

Meine anderen Probleme versuche ich erst mal selbst zu lösen, bevor ich wieder das Forum belästige.

Hallo Chino,

Du hast wahrscheinlich recht, dass eine Datenbanklösung vom Arbeitsaufwand geringer wäre. Aber ich habe die statischen html-Seiten mit Absicht genommen.
Wie ich in mehreren Mailinglisten von professionelen Buchverkäufern erfahren habe, werden von den Suchmaschinen - auf deren Indexierung man natürlich immer hofft - statische html-Seiten ausgewertet, dynamische aber nicht.
Am Anfang hatte ich z.B. 30 Bücher auf einer html-Seite und diese Seiten habe ich jetzt alle auf einzelne statische Seiten umgestellt, weil ich so die Möglichkeit habe, Autor und Titel im title-Tag unterzubringen und so die einzelnen Seiten ziemlich suchmaschinengerecht zu machen.
Der Arbeitsaufwand war auch am Anfang recht groß aber jetzt kommen ja nur noch die neu aufgenommenen Bücher dazu und ich habe mir die Angebotsseite wie ein Template hinterlegt, in das ich dann nur noch die relevanten Daten eintrage. Da hält sich der Aufwand in Grenzen.

Falls Du andere Infos über die Auswertung von Datenbanken durch Suchmaschinen hast, bin ich über jede neue Information dankbar.

Grüße
GudrunS


----------



## Ben Ben (12. August 2004)

> Wie ich in mehreren Mailinglisten von professionelen Buchverkäufern erfahren habe, werden von den Suchmaschinen - auf deren Indexierung man natürlich immer hofft - statische html-Seiten ausgewertet, dynamische aber nicht.



Dieses kann man jedoch mit direktem Eingriff in die Webserverconfig (bei Apache mit mod_rewrite) umgehen oder Beispielsweise für die Wichtigsten Parameter Unterverzeichnisse erstellen. Die IndexDatei in jedem Unterverzeichnis wandelt dann den Baum in die Parameter um und Leitet weiter.

Als Beispiel: http://www.test.de/index.php?cat=auto&motor=diesel
Dann legst du ein Verzeichnis auto und darunter ein Verzeichnis diesel an. Die index-Datei im Verzeichnis Diesel leitet dann entsprechend weiter.
Ist zwar etwas Aufwand, aber mit dem passenden Script einfach realisierbar, vor allem wenn man nicht an der Serverconfig drehen kann.
In irgendeiner Ausgabe von phpArch war diesbezüglich mal ein Artikel drin...


----------



## saila (12. August 2004)

hi gudrunS,

also das sind doch schon mal angaben mit denen man alles anfangen kann.

selbst du bist schon auf eine problemlösung gestossen. 

nun zu deiner bestellungverarbeitung.

wenn du nun ein buch bestellen möchtest, würde ich das ganze (da mysql-datenbank ja nicht gewünscht wird) mit hidden-tags verarbeiten.

das läuft wie folgt:

du erstellst deine html seiten. legst dann einen form-tag an und in den form-tag legst du wiederum hidden-tags. das ganze in der detailansicht eines buches.

sieht wie folgt aus:

<form action="bestellung.php" method="post">
<input type="hidden" name="autor" value="$autor">
<input type="hidden" name="titel" value="$titel">
<input type="hidden" name="buch_nr" value="$buch">
<input type="hidden" name="preis" value="$preis">

dort wo dein link ist - bestellen - machst du einfach einen 

<input type="image" src="pfad_zum_bild" width="breite_des_bildes" height="hoehe_des_bildes" border="0">

ein bildbutton rein.

wenn man nun auf bestellen klickt, werden die variablen an das von dir per link gezeigte bestellformular übermittelt. somit werden die leeren felder gefüllt bzw. autor, titel usw..

jetzt musst du aber darauf achten, das du diese hidden-tags wieder in dem formular http://www.diebuecherwuermer.de/test/bestellung.php einbindest, damit beim absenden der anderen daten auch die buchdaten mit übermittelt werden. und schon hast du alles was du brauchst.

denk auch daran eine fehlerprüfung einzubinden. denn es könnte jemand eine emailadresse angeben die nicht korrekt ist


----------



## GudrunS (16. August 2004)

*Danke!*

Vielen Dank für die ganzen Hilfen.

Ich habe jetzt die Hauptprobleme gelöst, d.h. die Buchseite übergibt die Buchdaten an das Formular und dort landen sie auf allen Plätzen, auf die sie sollen, werden verschickt und landen auch auf der Bestätigungsseite.

Ich habe jetzt noch ein paar kleine, aber eher optische Probleme.
Z.B. werden bei der Fehlerüberprüfung die vorher ausgewählten Radio-Buttons leer zurückgegeben. Das habe ich aber auch schon auf professionellen Seiten gesehen, daher denke ich, dass das nicht so einfach zu lösen ist.

Aber nochmals vielen Dank!

Gruß
GudrunS


----------



## saila (17. August 2004)

natürlich ist das zu lösen. wenn das nicht bei professionellen seiten enthalten ist, ist sie auch nicht professionell 

es ist recht einfach. es läuft mit if / else ab.

beispiel:

<form name="form1" >
  <input type="radio" name="radiobutton" value="1"> ja 
  <input type="radio" name="radiobutton" value="2"> nein 
  <input type="radio" name="radiobutton" value="3"> weis nicht 
  <input type="submit" name="test" value="testen">
</form>

wenn du nun das formular absendest, geht das ganze ja in eine prüfung über. d.h. du prüfst, ob die felder a) richtig (email) ausgefüllt sind oder b) ob die pflichtfelder ausgefüllt sind.

wenn du nun für den bereich radiobutton auch eine prüfung einbeziehen willst - oder auch nicht, muss ja der bereits gewählte wert wieder erscheinen und das geht so:


```
<?php
echo "<form name=\"gleiche_datei.php?test=\" method=\"post\" name=\"radiobutton_test\">
  <input type=\"radio\" name=\"radiobutton\" value=\"1\""; 
  if($radiobutton == 1) { echo "checked"; } echo "> ja 
  <input type=\"radio\" name=\"radiobutton\" value=\"2\"";
  if($radiobutton == 2) { echo "checked"; } echo "> nein 
  <input type=\"radio\" name=\"radiobutton\" value=\"3\"";
  if($radiobutton == 3) { echo "checked"; } echo "> weis nicht 
  <input type=\"submit\" name=\"test\" value=\"testen\">
</form>";?>
```


----------

