Avatar billede alh Nybegynder
20. marts 2004 - 23:19 Der er 8 kommentarer og
2 løsninger

Hmmm opsætning forkert?

Hej,
Jeg er lige begyndt med php, og tror allerede jeg har lavet en opsætningsfejl et eller andet sted. Jeg har installeret Apache, php og Mysql og troede faktisk lidt der det var klaret fjong med hello world og hele pjattet :) men så begyndte jeg at lege med eksempler og nu er det så jeg bliver ved med at have problemer med mine variable og så var det jeg tænkt om en af jer måske vidste hvad der kunne være galt?!
eksempel:
<html>

<head>
  <title></title>
</head>
<FORM>
    please type:<br>
    <INPUT TYPE=TEXT NAME=username><br><br>
    <INPUT TYPE=submit VALUE="submit data">
</FORM>
<body>

<?php

echo ($username);

?>

</body>

</html>

Så får jeg:
Notice: Undefined variable: username in C:\Program Files\Apache Group\Apache2\htdocs\Anjas legeplads\test.php on line 15
Avatar billede ztyxx Nybegynder
20. marts 2004 - 23:24 #1
<html>

<head>
  <title></title>
</head>
<FORM method="post" action="<? $_SERVER["PHP_SELF"];?>">
    please type:<br>
    <INPUT TYPE=TEXT NAME=username><br><br>
    <INPUT TYPE=submit VALUE="submit data">
</FORM>
<body>

<?php

echo $_POST["username"];

?>

</body>

</html>
Avatar billede googolplex Novice
20. marts 2004 - 23:26 #2
<html>

<head>
  <title></title>
</head>
<FORM method="post" action="<?php $_SERVER['PHP_SELF']; ?>" >
    please type:<br>
    <INPUT TYPE="TEXT" NAME="username"><br><br>
    <INPUT TYPE="submit" VALUE="submit data">
</FORM>
<body>

<?php

if (isset($_POST['submit']))
{
echo $_POST['username'];
}
?>

</body>

</html>
Avatar billede alh Nybegynder
20. marts 2004 - 23:29 #3
Til det første forslag skriver den...Notice: Undefined index: username in C:\Program Files\Apache Group\Apache2\htdocs\Anjas legeplads\ff.php on line 15
og til det andet ingenting der kommer intet der hvor php-koden skulle give noget...
Så det er opsætningen den er galt med så er det bare hvad...eller?
Avatar billede googolplex Novice
20. marts 2004 - 23:35 #4
Det burde i hvert fald virke.
Avatar billede fangel Nybegynder
20. marts 2004 - 23:36 #5
googolplex's svar er det bedste af dem... forklaringen:

Siden PHP version grønlangkål (4.3 så vidt jeg husker, tjek selv) har PHP kørt med register_globals sat til "off" (og jo, det er en god ting)... dette giver lidt problemer til at starte med, men når man har vænnet sig til det vil du indse det smarte ved det...

det det gør at, når du skal have fat i variabler _fra_ brugeren, bruger du ikke variablens navn, men derimod en key i et array - ex:

når noget kommer fra en form med
<input type="text" name="userinput">
så hedder den i dit script
$_POST['userinput']

måden du finder ud af hvilket af de super-globale variabler du skal bruge er ved at kigge i manualen, eller i dette skema (ses bedst i en preformateret skrifttype)

+---------------+------------------------------------------------------+
| $_POST        | Når variablen kommer fra en <form> med method="post" |
| $_GET        | Når variablen kommer fra addresselinie ( ?foo=bar )  |
| $_COOKIE      | Når variablen kommer fra en cookie                  |
| $_REQUEST    | En samling af de tre ovenstående                    |
| $_SESSION    | Når variablen kommer fra en session (var. kan også  |
|              | registres på denne måde                              |
| $GLOBALS      | En liste over variabler der er gjordt gobale        |
+---------------+------------------------------------------------------+

---

At googolplex så laver en ekstra if(expr) skyldes at i mange af tilfældende vil variablen ikke findes, da formen ikke er blevet sendt endnu (læs: ikke trykket på submit) - og variablen vil derfor ikke findes (og en notice vil blive udsendt)... googolplex tjekker om variablen findes med funktionen isset() (http://php.net/isset) og udskriver den hvis den findes... dette tjek bør altid foretages for at sikre script (og så det ikke undsender notices)

Morten
Avatar billede alh Nybegynder
20. marts 2004 - 23:42 #6
Jamen det virkede jo heller ikke så jeg var mere interesseret i hvor i min opsætning af php jeg skulle ændre så jeg kunne få bare noget til at virke..
Avatar billede fangel Nybegynder
20. marts 2004 - 23:48 #7
googolplex's foreslag vill virker hvis ikke han havde lavet en (dum) fejl... (og HTML koden er noget lorot, så den er lige blevet lidt pænere)

<html>
<head>
  <title></title>
</head>
<body>
<form method="post" action="<?php basename($_SERVER['PHP_SELF']); ?>" >
  please type:<br>
  <INPUT TYPE="TEXT" NAME="username"><br><br>
  <INPUT TYPE="submit" VALUE="submit data">
</form>
<?php
if (isset($_POST['username'])){
  echo $_POST['username'];
}
?>
</body>
</html>

1) ALDRIG hav NOGET der skal fremvises uden for <body> !!!
2) lav en ordenlig ident, det gør det så mange lettere når man skal se om man har glemt nogle tags !

PHP-fejlen var at han tjekkede efter variablen "submit" fra en form, men da submit-knappen ikke var navngivet kom denne aldrig... derfor er scriptet ændret så det tjekker på tekst-variablen istedet...

Morten
Avatar billede alh Nybegynder
20. marts 2004 - 23:52 #8
Helt kanon nu virker det....
men det er jo lidt noget skidt at den bog jeg skal lære php's koder ligsom ikke er så god som jer...hmm
Tusind tak for hjælpen! Smider du også et svar på Morten?
Avatar billede fangel Nybegynder
20. marts 2004 - 23:58 #9
svaa'r

JA, desværre er rigtig mange af de bøger / guider man finder forfærdelig sløsede med sikkerhed og notices, og man må bare tage ved lære hver gang man ser noget kode der er bedre end ens egen... nogle burde sætte sig ned og skrive en bog der lærer folk gode programmerings-skikke fra starten...

Morten
Avatar billede alh Nybegynder
21. marts 2004 - 00:52 #10
Du må igang med at skrive en god php bog...jeg vil meget gerne være gennemlæser på den så får du ihvertfald begynderne med :)
Tak for hjælpen jeg dukker jo nok op med flere spm hen ad vejen fra min gamle bog \ALH
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