Avatar billede kelfe Nybegynder
28. marts 2005 - 22:31 Der er 24 kommentarer og
1 løsning

simpel hjælp til php. Undefined variable

jeg har lavet en simpelt php kode som skulle gøre det muligt at skrive hvad variablen $navn skal være.. Men jeg får fejlmeddelelsen:
Notice: Undefined variable: navn in C:\Programmer\Apache Group\Apache2\htdocs\test\navn.php on line 24

Min kode er som følger:

<?
if (isset($navn)){
    $navn="mig";
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
}
else {
    echo "$navn";
    }
?>
andre konstruktive forslag til koden er velkomne
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 22:35 #1
<?
if(isset($_POST['navn']))
{
  echo $_POST['navn'];
}
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 22:35 #2
Læs denne her artikel: http://www.eksperten.dk/artikler/57
Avatar billede kelfe Nybegynder
28. marts 2005 - 22:44 #3
mange tak... men hvorfor får jeg nu denne fejlmeddelelse:
Parse error: parse error in C:\Programmer\Apache Group\Apache2\htdocs\test\navn.php on line 24
linie 24 er else linien!

<?
if(isset($_POST['navn']))
{
  echo $_POST['navn'];
}
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
else {echo "$navn";}
?>
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 22:47 #4
hvorfor vil du have en else linje på ? Forklar hvad pointen med dit script er.

Jeg gik ud fra at du bare ville have at de postede værdien af din form.

Du mangler } før din else, hvis du vil lave det sådan. Men din forståelse af PHP er misset lidt.

Tuborgklammerne { } skal passe perfekt sammen i antal, osv.
Og variabler skal declares uden for if() sætning hvis du vil bruge dem andre steder, end i selve if() sætningen.
Avatar billede jara06 Nybegynder
28. marts 2005 - 22:47 #5
du må ikke afbryde en if/else på den måde.
det her bør virke

<?
if(isset($_POST['navn']))
{
  echo $_POST['navn'];
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
}
else {echo "$navn";}
?>
Avatar billede jara06 Nybegynder
28. marts 2005 - 22:51 #6
alister_crowley, jeg ved ikke hvordan holdningen til indlæg af din karakter (dét med linket i) er her på exp.dk for tiden, men personligt ville jeg blive sur hvis nogen sagde til mig "det står i BT idag, side 22".

Jeg "betaler" ikke dobbelt for at få et svar her på exp (spm + artikel). :)
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 22:54 #7
jara06

Jeg samler slet ikke på points, så den holdning kan du godt droppe.
Hvis nybegyndere spørger om noget de ikke har læst nok om, så er det bare RTFM.

Hvis man ikke gider læse dokumentation, ellers tutorials så kan man godt droppe at programmere, og spille fodbold eller lign. istedet.

Og jeg gav faktisk en løsnings forslag, men da meningen med scriptet virkede wierd, venter jeg på en forklaring, for at kunne komme med en bedre løsning.
Avatar billede jara06 Nybegynder
28. marts 2005 - 22:59 #8
Jeg er enig. Kan man ikke, må man læse, men så læg links til relevante sider, og ikke "betalingssider". Jeg så godt det var en anden brugers art., og jeg har heller ikke beskyldt dig for at være pointrytter, så tal pænt.
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:00 #9
Og udover det, så er de artiker jeg har skrevet, 100% gratis.

De ligger også frit tilgængelige på min hjemmeside, så brok dig til de grådige personer, som tager points for deres artikler.

www.php.net/ <- dokumentationen, er også 100% fri tilgængelig.
Avatar billede kelfe Nybegynder
28. marts 2005 - 23:00 #10
forstår jer godt og i må undskylde min manglende forståelse af php.. Men det er lidt forvirrende når det der står i den bog man bruger kun delvist kan bruges.

Det jeg vil have er en kode der gør sådan at hvis $navn er defineret så bliver den skrevet ud og det var dette else skulle gøre.. Hvis ikke $navn er sat til noget så skal man gå ind og skrive hvad det skal være med <form>..
vil det være smartere at gøre det omvendt sådan her?

<?
if($_POST['navn'])
{
  echo $_POST['navn'];
}
else {
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
}
?>

ja det virkede men hvordan kan jeg gøre sådan at den første gang ikke kommer frem med meddelelsen

Undefined index: navn
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:01 #11
Og her er så den gratis udgave at den først link jeg gav:

http://se.php.net/register_globals

Den er "desværre" på engelsk, hvilket måske kan være træls for nybegyndere, men den er gratis .. :P
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:02 #12
<?
if($_POST['navn'])
{
  echo $_POST['navn'];
}
else
{
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
}
?>

Din egen løstning er faktisk korrekt :) Og den burde ikke sige undefindes variable nogle som helst steder.
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:04 #13
eller retter

if($_POST['navn']) skal være if(isset($_POST['navn']))

www.php.net/isset
Avatar billede kelfe Nybegynder
28. marts 2005 - 23:04 #14
men det gør den i linien if($_POST['navn'])
kan dette løses på en måde
Avatar billede kelfe Nybegynder
28. marts 2005 - 23:05 #15
vil du venligst forklare betydningen af isset??? er ved at have styr på det men ikke helt!
Avatar billede jara06 Nybegynder
28. marts 2005 - 23:05 #16
på denne måde undgår du det undefined index, og du undgår en bruger bare fylder felter med mellemrum og trykker enter

<?php

if (isset($_POST['navn']))
{
  if (!empty(trim($_POST['navn'])))
  {
    echo $_POST['navn'];
  }
  else
  {
    echo "Navnet var tomt."
  }
}
else
{

?>

<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>

<?

}

?>
hjælp:
http://dk2.php.net/strlen (tjek længden på strengen)
http://dk2.php.net/trim
Avatar billede jara06 Nybegynder
28. marts 2005 - 23:07 #17
glemte
http://dk2.php.net/empty  (tjek om en sat variabel er tom)

isset tjekker bare om variablen er sat (indhold i).

if ($bla)  - fejler, men

$bla = "";
if ($bla)  - gør ikke

variablen er sat, men stadig uden indhold. prøv også

$bla = null;
if ($bla)
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:08 #18
eller en kortere udgave

<?
if(isset($_POST['navn']) && !empty($_POST['navn']))
{
  echo $_POST['navn'];
}
else
{
?>
<FORM METHOD=POST ACTION="navn.php">
<p>indtast dit navn</p>
<INPUT TYPE=TEXT NAME=navn>
<INPUT TYPE=SUBMIT VALUE=send>
</FORM>
<?
}
?>
Avatar billede kelfe Nybegynder
28. marts 2005 - 23:09 #19
mange tak hvis en af jer lige vil lave et svar så jeg kan lukke dette spørgsmål.. I har været meget hjælpsomme
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:09 #20
Og om lidt spørger i omkring hvad && og ! er til, så kig her: http://se2.php.net/operators
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:10 #21
Det må blive jara06 som svarer :) jeg samler ikke på points.
Avatar billede jara06 Nybegynder
28. marts 2005 - 23:13 #22
hvor dumsmart kan man være..
mon en helt newbie i php kender til de ting jeg skrev.
men, tak som byder. :)

kelfe, gl til dig, ellers bar spør videre.

"Og variabler skal declares uden for if() sætning hvis du vil bruge dem andre steder, end i selve if() sætningen."
I php 4.x, virker det og man behøver ikke declare før.
I alle andre sprog (så vidt jeg ved), virker det ikke og man skal declare.
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:17 #23
I php 4 kommer der ingen fejl nej :)

I php5 kommer der en notice, som faktisk kan slåes fra med error_reporting (slå det selv op), og i alle andre programmeringsprog kommer der også en fejl hvis du ikke declaere dine variable.

java06 , det er ikke dig som jeg mener er newbie, det er spørgeren, derfor jeg valgte at finde en dansk guide til register_globals (som koster 5 værdiløse exp points) istedet for den engelsk udgave på php.net
Avatar billede jara06 Nybegynder
28. marts 2005 - 23:19 #24
det ok. Jeg har programmeret i c, c++, java, delphi?, php3-5, men det kunne du jo ikke vide ..

god aften de herre.
Avatar billede alister_crowley Nybegynder
28. marts 2005 - 23:21 #25
Og mig i c++, java, vb, .net, php, asp, php4 , jsp :)

Bekræftede det bare, fordi det lød usikkert :)
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