webForumDet fria alternativet

Querystring i formulär-action?

7 svar · 527 visningar · startad av Frazze

FrazzeMedlem sedan jan. 200614 inlägg
#1

Visste ärligt talat inte hur jag skulle formulera rubriken.

Har ett formulär som vid action utför ett phpscript som mailar uppgifter i formuläret till en mailadress. För att komma tillbaka till formulärsidan använder jag header i mitt php-script som helt enkelt skickar mig tillbaka till adressen, så här (har tagit bort allt onödigt, hoppas vad jag menar framgår ändå):

Formuläret: Form.html
<form action="mitt.php"> //kör scriptet mitt.php vid knapptryckningen
formulärkod.....
</form>

PHPscriptet:

mail (a@b.se, "Ett ämne", "Ett litet meddelande") or print "Kan inte skicka mail!!!"; //Maila lite skräp
header("Location: http://adressen/Form.html); //Och skicka sen tillbaka mig till den fasta adressen.

Detta är ju helt statiskt, jag kommer alltid att skickas tillbaka till den hårdkodade adressen http://adressen/Form.html vilket ju funkar fint här.

MEN, har läst i de massvis med trådar som finns kring hurman skickar med en adress från en sida till ett phpscript. Verkar ju funka fint om man ex i en länk skriver så här: <a href="form.php?X=$sida>LÄNK</a>. Värder på X kommer att skickas med och kan skrivas ut i mitt phpscript. Värdet på $sida kan ändras och är inte statiskt. Men om jag vill göra samma sak i mitt formulär, i action-delen? I min hjärna borde jag kunna skriva så här för att skicka med ett värde till phpscriptet, men det verkar inte funka:
<form acion="mitt.php?X=$sida">
formulärkod.....
</form>

Vet inte om det är helt hopplöst att förstå mina kryptiska frågor men jag hoppas nån kan luska ut vad jag menar :)

Det är alltså två frågor eg.
1. Är det tillvägagångsätt jag använder ok med att i min "header" i det phpscript som skickar ett mail, skicka tillbaka användaren till en statisk/fast adress som innehåller formuläret?

2. Kan jag skicka med värden i en "Action" i ett formulär när jag går vidare till mitt php-script?

@ndersMedlem sedan juni 200032 969 inlägg
#2
  1. Ja, under förutsättning att du angivit metoden POST i formuläret. Kör du GET (GET antas per default om du inte anger metod i form-tagggen) måste du använda dolda formulärfält.
aasahMedlem sedan mars 20034 471 inlägg
#3

@nders - Vad 17 menar du med det? :q

Frazze:

  1. Ja i princip, men... Din nuvarande kod fungerar om och endast om mailet går iväg och du glömt ett " bara här när du återgav koden. Du skrev:
//PHPscriptet:
mail (a@b.se, "Ett ämne", "Ett litet meddelande") or print "Kan inte skicka mail!!!";             //Maila lite skräp
header("Location: http://adressen/Form.html); //Och skicka sen tillbaka mig till den fasta adressen.

Men om felmeddelandet skickas, så har du skrivit något före att du försöker göra en redirect, och det fungerar inte. Därför bör det snarast se ut så här:

//PHPscriptet:
$ok = mail (a@b.se, "Ett ämne", "Ett litet meddelande");
if (!$ok) //Fixa tillbakaskickning via länk efter att felmeddelandet lästs.
  print "Kan inte skicka mail!!! <BR><a href=\"http://adressen/Form.html\">Tillbaka</a>";   
else //Annars skicka sen tillbaka mig till den fasta adressen
  header("Location: http://adressen/Form.html");

Frazze skrev:

MEN, har läst i de massvis med trådar som finns kring hurman skickar med en adress från en sida till ett phpscript. Verkar ju funka fint om man ex i en länk skriver så här: <a href="form.php?X=$sida>LÄNK</a>.

2. Kan jag skicka med värden i en "Action" i ett formulär när jag går vidare till mitt php-script?

Det fungerar på följande sätt: OM din form ser ut så här: (method="GET")

<form name="tst" method="GET" action="my.php">
<input type="radio" name="ex" value="1">
<input type="submit" name="Sex" value="Send"></form>

Då kommer ett submit att med automatik skicka dig till följande URL:
my.php?ex=1&Sex=Send
I my.php kan du läsa av värdena enligt:

if (isSet($_GET['ex'])) echo $_GET['ex']; // ==> 1
if (isSet($_GET['Sex'])) echo $_GET['Sex']; // ==> Send

OM din form i stället ser ut så här: (method="POST")

<form name="tst" method="POST" action="my.php">
<input type="radio" name="ex" value="1">
<input type="submit" name="Sex" value="Send"></form>

Då kommer ett submit att med automatik skicka dig till följande URL:
my.php
I my.php kan du läsa av värdena enligt:

if (isSet($_POST['ex'])) echo $_POST['ex']; // ==> 1
if (isSet($_POST['Sex'])) echo $_POST['Sex']; // ==> Send

Och om du inte anger någon method så används GET för att skicka formen.

@ndersMedlem sedan juni 200032 969 inlägg
#4

@nders - Vad 17 menar du med det?

Tja, det jag menar är helt enkelt att om man använder metoden GET i sitt formulär kan man inte skicka med värden i querystring genom att lägga till dem i action. Då måste du lägga till dem som hidden-fält i formuläret. Däremot går det bra att göra om du använder metoden POST. Följande fungerar alltså inte:

<form action="foo.php?foo=1&bar=2" method="get">

Vill du skicka med värden med querystring, lägg till hiddenfält:

<form action="foo.php" method="get">
<input type="hidden" name="foo" value="1">
<input type="hidden" name="bar" value="2">

Använder man metoden POST fungerar det första alternativet.

Mvh

aasahMedlem sedan mars 20034 471 inlägg
#5

@nders skrev:

... Följande fungerar alltså inte:

<form action="foo.php?foo=1&bar=2" method="get">

...Använder man metoden POST fungerar det första alternativet...

Aha! OK, jag missförstod dig nog. Det du menar är att ev. variabler i Querysträngen skrivs över när man submittar ett GET-formulär?

Det jag tyckte var otydligt uttryckt var att om man använder POST för att skicka iväg värden med variabler i querysträngen också, så måste de variabler som skickas via URL:en ändå läsas av med $_GET, trots att formulärvärdena läses av med $_POST.

@ndersMedlem sedan juni 200032 969 inlägg
#6

Det du menar är att ev. variabler i Querysträngen skrivs över när man submittar ett GET-formulär?

Nej, jag menar att de inte skickas överhuvudtaget.

Det jag tyckte var otydligt uttryckt var att om man använder POST för att skicka iväg värden med variabler i querysträngen också, så måste de variabler som skickas via URL:en ändå läsas av med $_GET, trots att formulärvärdena läses av med $_POST.

Ok, jag tyckte jag var jättetydlig, men... :)

FrazzeMedlem sedan jan. 200614 inlägg
#7

Tackar tackar, det låter logiskt. Skicka mailet och lägg resultatet i en variabel typ. Man lär så länge man lever :-)

FrazzeMedlem sedan jan. 200614 inlägg
#8

En snabb fråga till ang. detta med mail. Har fått det att funka fint, skriver ut en text och ber användaren klicka för att åtegå till formuläret. Men det dyker också upp en varningstext, ser ut så här:
Warning: mail() [function.mail]: SMTP server response: 550 Invalid recipient: <en felaktik mailadress ex.> in phpscriptet on line 16

Kan jag på något sätt slippa att denna text skrivs ut då jag ändå konstaterat att det blivit fel. Skulle se snyggare ut liksom.

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)