Beitrag von sebastian (533 Beiträge) am Mittwoch, 18.Mai.2005, 21:38.
ein wert vom get im form übergeben
guten abend,
mit folgendem code möchte ich einen wert den ich mit get hole in einem <form> an eine neue seite übergeben. der erste wert wird auch schon per <form> und get an dieses seite übergeben. jetzt beginnt mein <form> aber vor dem get und so mit ist der wert "D_01" noch nicht vorhanden. da er ja erst mit dem get geholt wird. habe auch schon versucht das get überhalb des <form> zu setzen, aber dann wir mir immer nur der erste wert der datenbank geholt. wo liegt den mein denkfehler ? hier mal der code
out "<FORM ACTION=\"http://luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/detail&Name==$Name&D_01==$D_01\" METHOD=\"post\" ENCTYPE=\"multipart/form-data\" value=\"/luftus-shop.de/test_01/detail&Name==$Name&D_01==$D_01\">";
############oben der anfang vom form als werte wird $Name und $D_01 mit übergeben
get "D_01==* & Name==$Name", "artikel";
#############hier werden die doppelten werte aussortiert und die restlichen in einem auswahlmenue angezeigt
out "<select name='Name~=' style=\"font-family:'verdana'; color: #003399 ; background-color:#E5E5E5;\">";
while(get_next("artikel"))
{
if ($D_01_ist ne $D_01){
out "<option value=\"$D_01\">$D_01";
}
$D_01_ist = $D_01;
}
out "</OPTION>";
out "</select>";
</perl> <INPUT TYPE="submit" VALUE="ANZEIGEN"
CLASS="schrift2a"
STYLE="background-color:#00315A; color: white; font-size: 9pt">
</FONT></P></FORM>
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Donnerstag, 19.Mai.2005, 07:57.
Re: ein wert vom get im form übergeben
Mhm - erst mal die Frage, was willst du erreichen?
Weil, Du übergibst zum einen im Link Name==$Name (für Name ist gleich dem Namenswert) und im Formular mit dem Auswahl- bzw. Optionfeld Name~=$D_01 (für Name beginnt mit Wert aus von D_01 aus dem Optionfeld). Und da ist für mich nicht ersichtlich, was soll passieren auf der anderen Seite, welche Datensätze sollen denn nun ausgegeben werden?
Und wie wird dises Template aufgerufen, was hat das für Parameter beim Erstaufruf übergeben bekommen?
Irgendwie brauchst mehr Input... ;-)
Antworten
Beitrag von sebastian (533 Beiträge) am Donnerstag, 19.Mai.2005, 08:58.
Re: ein wert vom get im form übergeben
geuten morgen, erreichen möchte ich das nur bestimmt artikel aus der datenbank angezeigt werden. auf der ersten seite "such_001" wird der $Name ausgewählt. dieser wert wird auf die seite "suche_002" übergeben. wird dort auch korrekt angezeigt. auf der seite "suche_002" will ich jetzt anhand der vor ausgewählten $Name noch die verschiedenen werte von $D_01 auswählen. und dann das ganze weiter auf eine seite geben. dort wird dann dieser einzige artikel angezeigt. das ganze fängt hier an dieser url an:
http://www.luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/suche_001
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Donnerstag, 19.Mai.2005, 15:16.
Re: ein wert vom get im form übergeben
mhm - also gut, wenn ichs richtig verstanden habe:
suche_001 Auswahl der Namen aus Optionfeld
suche_002 soll zugehörige Werte aus D_01zu dem in suche_001 gewählten Namen holen, da wählt man das wieder aus und es soll dann der entsprechende Datensatz mit der Bedingung Name gleich Auswahl aus suche_001 und D_01 aus suche_002 angezeigt werden - richtig so?
Wenn es so sein soll, dann nicht mit den Operatoren in der URL arbeiten und auch die Feldnamen richtig einsetzen in die Formularfelder, nicht für D_01 den Feldname "Name" verwenden...
- in suche_001 statt <select name="Name~=".. select name="FName=" verwenden, da gibts dann keine Parameter/ bzw. Variablenüberschneidung
- in suche_002 dann die Parameter am Formular weglassen, und stattdessen ein hidden-Formfield einsetzen, ebenfalls mit Name "FName=" und als Value da $FName einsetzen, damit wäre das Durchreichen des Filterwertes für den Namen geklärt...
Das Formfeld für $D_01 bspw. in "$FD_01=" benennen, da wäre der Filterwert für D_01 geklärt...
Das get für die Optionwerte dann so:
get "D_01==* Name==$FName", "artikel";
damit kann das irgendwo vors Formular kommen
- in detail dann das get wie folgt:
get "Name=$FName D_01==$FD_01", "artikel";
while(get_next("artikel")){
html-ausgaben...oder sonstwas
}
alles klar? ;-)
Man kann das natürlich auch alles in ein Template packen, jeweils in gesonderte Bedingungsblöcke und einen Parameter mitgeben, der die Stufe der Suche kennzeichnet...nur mal so am Rande als Denkanstoss...
Antworten
Beitrag von sebastian (533 Beiträge) am Donnerstag, 19.Mai.2005, 20:47.
Re: ein wert vom get im form übergeben
guten abend,
habe bei suche_002 den falschen select-namen. habe bei der suche_001 den select-namen aud $D_01 geändert. habe auf suche_001 den select-namen auf $FName geändert. das get auf der such_002 hole ich mir folgt: get ["D_01","==", "*", "&", "Name", "==", "$FName"], "artikel"; wegen der leerzeichen. im form habe ich folgendes drinnen ...detail&Name==$FName&D_01==$D_01 und das komische ist das es funktioniert. es wird der richtige artikel angezeigt. in der url ist aber nur beim "Namen" ein wert vorhanden, beim "D_01" ist leer, aber es wird der richtige artikel angezeigt.
das hidden-Formfield lege ich in der artikel datenbank mit an ?
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Donnerstag, 19.Mai.2005, 23:36.
Re: ein wert vom get im form übergeben
Antworten
Beitrag von sebastian (533 Beiträge) am Freitag, 20.Mai.2005, 09:31.
Re: ein wert vom get im form übergeben
einen sonnigen guten morgen,
das ganze wird mir jetzt langsam verständlich. aber wo wird das hidden-feld angelegt bzw. wo hinterlege ich das feld ?
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 20.Mai.2005, 09:47.
Re: ein wert vom get im form übergeben
hier mal so freihändig schnell das Script mit paar Erläuterungen
<!-- such_002 -->
<perl>
# Hier mal die Zeile mit der Ausgabe der Variablen, die reinkommen (oder auch nicht)
out "Kontrollausgabe: \$Name($Name) - \$D_01($D_01) - \$FName($FName) - \$FD_01($FD_01)<br>";
# Optionfeldwerte bauen für Datensätze mit Name=$FName, wobei FName der Feldname
# des Suchformulars aus dem Template such001 sein muss (es würde in diesem Falle auch
# $Name gehen, aber dann immer weiter führen, also auch im hidden-Field unten
# In hier gebauten Falle aber dann auch im Template detail $FName für Filterkriterium
# verwenden (get "D_01=$FD_01 Name=$FName"...
#
get "D_01==* & Name==$FName", "artikel";
while(get_next("artikel")){
if ($D_01_ist ne $D_01){
$optionwerte .= "<option value=\"$D_01\">$D_01</option>\n";
}
$D_01_ist = $D_01;
}
out<<EOF;
<form action="http://luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/detail" method="post" enctype="multipart/form-data">
<input type="hidden" name="FName=" value="$FName"></input>
<select name="FName~=" style="font-family:'verdana'; color: #003399 ; background-color:#E5E5E5;">
$optionwerte
</select>
<input type="submit" value="ANZEIGEN" class="schrift2a" style="background-color:#00315A; color: white; font-size: 9pt">
</form>
EOF
</perl>
Antworten
Beitrag von sebastian (533 Beiträge) am Freitag, 20.Mai.2005, 09:53.
Re: ein wert vom get im form übergeben
dankeschön, so hab ich übers wochenende eine aufgabe, hoffentlich regnets . .
sebastian
Antworten
Beitrag von sebastian (533 Beiträge) am Freitag, 20.Mai.2005, 18:58.
Re: ein wert vom get im form übergeben
guten abend,
habe das ganz mal ausprobiert und wieder ein stück mehr verstanden. bei der suche_001 und suche_002. funktioniert alles. muss man eigentlich nicht bei der suche_002 auch als hidden-feld $FD_01 mit übergeben ?
das große problem ist aber jetzt ein neues, auf der detail-seite, obwohl auf get "D_01==$FD_01 & Name==$FName .... umgestellt habe, kommen da plötzlich keine werte mehr an.
habe suche_002 mal so abgeändert, und auf der detail kommt im $FName, genau der wert von $FD_01 und $FD_01 ist leer. hier mal der code:
out<<EOF;
<form action="http://luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/detail" method="post" enctype="multipart/form-data">
<input type="hidden" name="Name=" value="$FName"> ####verwende ich name="FName=" kommt gar nicht an werten an, so wenigstens der Name !!!!!!!!!
<input type="hidden" name="D_01=" value="$FD_01">
<select name="FName~=" style="font-family:'verdana'; color: #003399 ; background-color:#E5E5E5;">
$optionwerte
</select>
<input type="submit" value="ANZEIGEN" class="schrift2a" style="background-color:#00315A; color: white; font-size: 9pt">
</form>
EOF
</perl>
und hier mal url:
http://luftus-shop.de/cgi-bin/baseportal.pl?htx=/luftus-shop.de/test_01/suche_001
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Samstag, 21.Mai.2005, 10:16.
Re: ein wert vom get im form übergeben
wichtig für eine reibungslose Funktion ist, dass die Filterwerte (Variablennamen) von der ersten bis zur letzten Seite immer gleich heißen - zum einen die Feldnamen (oder bei Links die Parameternamen) und dann natürlich auch im get.
Also mal der Reihe nach:
- Erste Suchseite:
Formular mit Auswahl des Namens - das Feld heisst "FName=" - ruft zweite Suchseite auf.
- Zweite Suchseite:
Alle Datensätze holen mit beliebigem Wert für Durchmesser (Datenbankfeld D_01) aber nur mit dem Übergebenen Wert für den Namen (steht in der Variable also das get für das Holen der zum Namen gehörigen Durchmesser
=> get "$D_01=* Name=$FName", "artikel";
while(get_next("artikel"){
... Optionwerte für select-Feld bauen ...
}
Dann bekommt das Suchformular auf dieser Seite ein hidden-Feld, welches den Filterwert für den Namen aus der ersten Suchseite wieder mit an die dritte Suchseite weitergibt, Name "FName=", Wert (Value) $FName, weil der ja so von der ersten Suchseite reingekommen ist.
Das Option- bzw. Select-Feld bekommt nun den Namen "$FD_01=", das Forumular ruft dann die dritte Suchseite auf.
- Dritte Suchseite:
Hier nun sollen nur die Datensätze ausgegeben werden, die den ausgewählten Kriterien entsprechen, also die, die im Datenfeld Name gleich dem Wert aus Suchseite 1 und im Datenfeld D_01 gleich dem Wert aus Suchseite 2 stehen haben.
Nun haben wir in Suchseite 1 das Filterwert-Feld "FName" genannt und in Suchseite 2 das Filterwert-Feld "FD_01".
Deshalb stehen die ausgewählten Werte auch in den Variablen mit Namen $FName und $FD_01 zur Verfügung. (wenn du genauer wissen wills, warum das so ist, empfehle ich die mehrfach genannte Einsteigerliteratur zu Perl/CGI - das gehört einfach zum Grundwissen...ohne das man kaum verstehen kann, was wie funktioniert)
Diese Werte müssen nun ins get eingesetzt werden und voila, wir haben genau die gewünschten Datensätze zur Verfügung:
get "Name=$FName D_01=$D_01", "artikel";
while(get_next("artikel"){
... hier jetzt die Datensätze ausgeben ...
}
Alles Klar ? ;-)
Antworten
Beitrag von sebastian (533 Beiträge) am Samstag, 21.Mai.2005, 14:32.
Re: ein wert vom get im form übergeben
guten mittag,
habe mich glaube jetzt strikt an deine beschreibung gehalten, aber irgendwie kommen die werte nicht an bzw. verkehrt
das <form> von suche_001 >> FName wird weitergegeben
out "<FORM ACTION=\"http://luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/suche_002\" METHOD=\"post\" ENCTYPE=\"multipart/form-data\">
<input type=\"hidden\" name=\"FName=\" value=\"$FName\"></input>";
das <form> von suche_002 >> FName und FD_01 sollen weitergegeben werden
out<<EOF;
<form action="http://luftus-shop.de/cgi-bin/baseportal.pl?kid=$kid&htx=/luftus-shop.de/test_01/detail" method="post" enctype="multipart/form-data">
<input type="hidden" name="FName=" value="$FName"></input>
<input type="hidden" name="FD_01=" value="$FD_01"></input>
<select name="FName~=" style="font-family:'verdana'; color: #003399 ; background-color:#E5E5E5;">
$optionwerte
</select>
und das get in detailseite
<perl>
get ["D_01","==", "$FD_01", "&", "Name", "==", "$FName"], "artikel";
foreach $artikel (split /#/,$mArtikel)
{
($anzahl,$r)=split /\:/,$artikel;
last if $r==$_id;
$anzahl=0;
}
hier mal die "kontrollausgabe" von suche_002
Kontrollausgabe: $Name() - $D_01() - $FName(Fortluftbogen 90) - $FD_01()
hier ist $FNmae noch richtig gefüllt
"Kontrollausgabe" detail
Kontrollausgabe: $Name() - $D_01() - $FName(250) - $FD_01()
ab hier ist der wert von $FD_01 im $FName und $FName wert verschwindet
sebastian
Antworten
Beitrag von hempelr (1976 Beiträge) am Samstag, 21.Mai.2005, 15:12.
Re: ein wert vom get im form übergeben
Antworten
Beitrag von sebastian (533 Beiträge) am Sonntag, 22.Mai.2005, 00:25.
Re: ein wert vom get im form übergeben
dankeschön,
jetzt klappt alles so wie beschrieben. und habe wieder eine menge dazu gelernt. vorallem mal wieder den weg gezeigt bekommen, wie man nach dem fehler systematisch suchen kann.
sebastian
Antworten