Avatar billede nemlig Professor
14. april 2007 - 21:54 Der er 8 kommentarer og
1 løsning

Form-action, der driller:

Prøv lige og se denne kode:

<?php

if(!$_GET[aar]) {

echo "
<form action='".$_SERVER['PHP_SELF']."?aar=$aar' method=post>
<table>
<tr><td colspan=2>Vælg hvilket årstal<br></td>
</tr>
<td>Årstal (4 cifre)</td>
<td><input type=text name=aar size=4></td>
</tr>
</table>
<input type='submit' value='Se tal' onfocus='this.blur()'>
</form>
<br><br><br>
";

} else {

echo "Det lykkedes";
}
?>

Hvorfor får den ikke det indtastede årstal med, når der trykkes på Submit-knappen.
Avatar billede nixir Nybegynder
14. april 2007 - 22:02 #1
Fejlen ligger i at du henter via _GET og ikke _POST ... Læg mærke til at der i din form står method=post. Dvs. du skal hente med $_POST['aar'] og ikke _GET!

Denne if-sætning tjekker i-øvrigt om der er 4 cifre i det der er POSTED: Kan du jo vælge at bruge hvis du vil:
if (preg_match('/([\d]{4})/', $_POST['aar'])) {

}

Brug den istedet - det kan du ligesågodt...

Hvis du forsat vil benytte den anden, så brug istedet:
if(!isset($_POST['aar'])) {

}

isset() tjekker om variablen er defineret ... defineret = true .. ikke defineret = false
Avatar billede nemlig Professor
14. april 2007 - 22:27 #2
Tak for vejledningen, men den henter altså stadig ikke, det er der indtastet, når jeg trykker sumbit.
Den skal jo genindlæse siden med linket ....filnavn.php?aar=2007, hvis jeg i formen har indtastet "2007". Altså "2007" mangler i linket.
Avatar billede nemlig Professor
14. april 2007 - 22:57 #3
Er du sikker på, at det ikke skulle virke med $_GET, da jeg har det kørende i andre filer, hvor method=post.
Og hvis jeg i linket tilføjer årstallet manuelt (altså det som ikke kommer med, når jeg trykker på Submit), så virker koden fint med $_GET.
Avatar billede nixir Nybegynder
14. april 2007 - 23:24 #4
Lyder som om dit webhotel / server tillader det ...

ønsker du at din form skal gå til filnavn.php?aar=$_GET['aar'] ? Det kan jeg bare ikke lige få til at hænge sammen. Du søger efter om _GET[aar] er defineret, hvis den ikke er defineret ønsker du at form'en kommer frem. Denne form skal så linke til filnavn.php?aar=$_GET['aar'] ? Det kan vel ikke lade sig gøre hvis man kun skal gå videre hvis den ikke er defineret? Og hvis du så vil have at aar skal være lig med det indtastede årstal, ja så giver det heller ikke meget mening... For om du får filnavn.php?aar=2007 eller om du får en POST værdi der svarer til det samme burde kun ændre på 1 ting - om du kan give direkte link.

Ønsker du alligevel at have aar=2007 burde det vel kunne klares med method=get? (jeg bruger altid kun post, så ved det ikke).

en måde at bruge post på og lave om til get kunne være:
if(isset($_POST['aar'])) {
    header("Location: ".$_SERVER['PHP_SELF']."?aar=".$_POST['aar']);
    exit;
}elseif(!isset($_GET['aar'])) {
    echo "
<form action='".$_SERVER['PHP_SELF']."?aar=$aar' method=post>
<table>
<tr><td colspan=2>Vælg hvilket årstal<br></td>
</tr>
<td>Årstal (4 cifre)</td>
<td><input type=text name=aar size=4></td>
</tr>
</table>
<input type='submit' value='Se tal' onfocus='this.blur()'>
</form>
<br><br><br>
";
} else {
    echo "Det lykkedes. Året: ".$_GET['aar']." er valgt.;
}
Avatar billede nemlig Professor
14. april 2007 - 23:36 #5
Tanken med koden er:
1. Når jeg indlæser filen filnavn.php, tjekke der om "$_GET[aar]" har noget indhold. Hvis ikke, så indlæses formen.
2. I formen indtaster jeg et årstal og trykker submit. Årstallet er navngivet under input med "name=aar".
3. Siden genindlæses ved submit, men nu skulle "$_GET[aar]" gerne have en værdi, hvorfor der springes over formen og videre til næste, som jeg så for nemheds skyld har kaldt "Det lykkedes".
OM jeg bruger GET eller POST, så kan jeg ikke få noget af det til at virke. Den tager simpelt hen ikke værdien "name=aar" (altså årstallet) med op i linket.
Men nu prøver jeg lige med din kode..... og vender tilbage.
Avatar billede nemlig Professor
14. april 2007 - 23:40 #6
Kan godt se, at din kode virker. Jeg skal lige lege lidt med koden.
Avatar billede nemlig Professor
14. april 2007 - 23:46 #7
Jeg får noget header-fejl, når jeg integerer koden i mit "større" system.

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\kal\tool\java.php:1) in C:\wamp\www\kal\statistik.php on line 16

Nogen forslag??
Avatar billede nemlig Professor
15. april 2007 - 08:59 #8
Så lykkedes det med denne kode:

<?php

if(!isset($_GET['update']) && !$_GET['update']) {

echo "
<form action='".$_SERVER['PHP_SELF']."?update=true' method=post>
<table>
<tr><td colspan=2>Vælg hvilket årstal<br></td>
</tr>
<td>Årstal (4 cifre)</td>
<td><input type=text name=aar size=4></td>
</tr>
</table>
<input type='submit' style='width: 0; height: 0'><input type='submit' class=knap value='Se tal' onfocus='this.blur()'>
</form>
<br><br><br>
";

} else {

echo "Det lykkedes".$_POST['aar'];
}
?>
Avatar billede johan.o Nybegynder
15. april 2007 - 18:21 #9
NÅÅHH...:), men ville det ikke være lidt nemmere at blot gøre sådan her..

if(!isset($_POST['aar'])) {
echo 'din form'; }
else {
echo $_POST['aar']; }

Så kan du blot lave action='".$_SERVER['PHP_SELF']."'

Eller..??

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester