/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Udefinerede Variabler.
Fra : Heine Laursen


Dato : 15-10-02 14:08

Hejsa. Ng

Jeg er igang med at lege med php. Men jeg har et problem, med at linke
til scripts

www.minserver.dk/mitscript.php?id=1&mode=vis

Giver fejlmeddelsen, udefineret variabel. Hvordan får, jeg scriptet til
at virke???

<?php
mysql_connect('???','???','???');
mysql_select_db("???");
$php_self = $_SERVER['PHP_SELF'];

$i = 0;
//$mode = $mode
print("Mode:$mode<p>");

if($mode == NULL)
{
   $query = "SELECT * from index_main";
   $result = mysql_query($query);
   $number = mysql_numrows($result);

   echo("<br>Antal hits er : $number <p><p><p>");

   if ($number == 0) :
      print("<center></h2>Der er intet i database. Beklager.</h2>
</center>");
   elseif ($number > 0) :
      while ($i < $number) :
      $id = mysql_result($result,$i,"id");
      $kort = mysql_result($result,$i,"kort");
      print("<a href='$php_self?id=$id&mode=vis'>$kort</a><br>");
      $i++;
      endwhile;
   endif;
}
if($mode == 'vis')
{
   $query = "select * from index_main where id=$id";
   $result = mysql_query($query);

   $besk = mysql_result($result,1,"besk");
   $beskrivelse = mysql_result($result,1,"beskrivelse");
   $forfatter = mysql_result($result,1,"forfatter");
   $kommentar = mysql_result($result,1,"kommentar");

   $query = "select * from forfatter where id=$forfatter";
   $result = mysql_query($query);

   $bruger = mysql_result($result,1,"bruger");
   $mail = mysql_result($result,1,"mail");

   print("Spørgesmål : $besk<p>");
   print("Svar :<p>$beskrivelse");
   print("<p><p>Skrevet af <a href='mailto:$mail'>$bruger");

}
mysql_close();
?>

--
Mvh
Heine Laursen

 
 
Jesper Brunholm (15-10-2002)
Kommentar
Fra : Jesper Brunholm


Dato : 15-10-02 14:23

Heine Laursen wrote:
> Hejsa. Ng
>
> Jeg er igang med at lege med php. Men jeg har et problem, med at linke
> til scripts
>
> www.minserver.dk/mitscript.php?id=1&mode=vis
>
> Giver fejlmeddelsen, udefineret variabel. Hvordan får, jeg scriptet til
> at virke???

Hvilken variabel er udefineret? Hvis det tilfældigvis handler om id og
mode så er det nok fordi du har glemt at skrive $id=$_GET['id']; osv -
det handler om optrappet sikkerhed i de nyere versioner af php, det er
en god ting (selv om den kan være lidt besværlig) og keywords til
manualen (og til at søge efter mere om sagen i gruppens gamle indlæg) er
bla. "register_globals" og "Predefined variables"

Hvis det ikke handler om de to så er det måske noget med at checke hvor
hvilke variabler får deres indhold, og evt at checke om en variabel er
empty før man bruger den (så man kan fylde noget i hvis den er). Det kan
gøres med
if(!empty($min_var)){
#brug $min_var
}

eller

if(isset($min_var)){
#brug $min_var
}


venligst

Jesper Brunholm


--
Phønix - dansk folk-musik fra unge musikere - http://www.phonixfolk.dk


Heine Laursen (15-10-2002)
Kommentar
Fra : Heine Laursen


Dato : 15-10-02 14:48

Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in news:aoh4qr$h4g$1
@news.net.uni-c.dk:


> if(!empty($min_var)){
> #brug $min_var
> }
>
> eller
>
> if(isset($min_var)){
> #brug $min_var
> }

Det var jo lige den, jeg har brug for, Men når jeg indsætter fæl i toppen
af sriptet:

if(!empty($mode))
{
$mode == NULL;
}

får jeg stadigvæk samme fejlmeddelse!

Notice: Undefined variable: mode in c:\wwwroot\ny ting\index.php on line 17

--
Mvh
Heine Laursen

[5000] Jesper Brunho~ (15-10-2002)
Kommentar
Fra : [5000] Jesper Brunho~


Dato : 15-10-02 18:02

Heine Laursen wrote:
> Jesper Brunholm <nospam@brunholm-scharff.dk> wrote in news:aoh4qr$h4g$1
>>if(!empty($min_var)){
>> #brug $min_var
>>}

> Det var jo lige den, jeg har brug for, Men når jeg indsætter fæl i toppen
> af sriptet:
>
> if(!empty($mode))
> {
> $mode == NULL;
> }
>

jeg forstår ikke helt hvad den kodestump skulle gøre, prøv lige:

if (!empty($mode)){
echo $mode;
}

og husk at overveje det andet jeg skrev, prøv evt:

if (!empty($_GET['mode'])){
$mode=$_GET['mode'];
}
if (!empty($mode)){
echo $mode;
}

hjalp det?

/jesper brunholm


Heine Laursen (17-10-2002)
Kommentar
Fra : Heine Laursen


Dato : 17-10-02 07:28

"[5000] Jesper Brunholm" <nospam@brunholm-scharff.dk> wrote in
news:aohhlf$1366$1@news.net.uni-c.dk:

> Heine Laursen wrote:
>>
>> if(!empty($mode))
>> {
>> $mode == NULL;
>> }
>>
>
> jeg forstår ikke helt hvad den kodestump skulle gøre, prøv lige:

Den skulde gerne oprette en variabel der ikke eksistere, (håbede jeg på,)

>
> if (!empty($mode)){
> echo $mode;
> }
>
> og husk at overveje det andet jeg skrev, prøv evt:
>
> if (!empty($_GET['mode'])){
> $mode=$_GET['mode'];
> }
> if (!empty($mode)){
> echo $mode;
> }
>
> hjalp det?

Jeg får fejlmeddelsen, når jeg caller
if (!empty($mode))
eller
if (!empty($_GET['mode']))


Nej. Okay. Forfra. Første gang mitscript kaldes er det uden parametere.
www.minserver.dk/mitscript.php, der skulde så komme et index op, og man kan
clicke på det emne man herne vil vil læse, og så vil mitscript.php blive
kaldet igen. mitscript.php?id=1&mode=vis
Her antagede jeg at den udeklærede variabel mode = NULL


eks:

<?php

Hvis mode er NULL gør så:
kig i database, skriv en index ud.

hvis mode er vis går så istædet for:
kig i database.Skriv detileret ud omkring det emne der blev clickket på.

?>

Jeg har før lavet php scripts der gjorde dette, unden besvær, men det må
vel være de nye sikkerheds ting, der gør livet svært, eller også har jeg
aldrig lavet det ordenligt før!

--
Mvh
Heine Laursen

Niels Andersen (17-10-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-10-02 10:36

Heine Laursen wrote in <Xns92AA55DBDC932gozarmyrealboxcom@130.225.247.90>:
>>> if(!empty($mode))
>>> {
>>> $mode == NULL;
>>> }
>>>
>>
>> jeg forstår ikke helt hvad den kodestump skulle gøre, prøv lige:
>
> Den skulde gerne oprette en variabel der ikke eksistere, (håbede jeg på,)

Så vidt jeg husker er "$var=NULL" det samme som "unset($var)".
Jeg kan dog ikke huske hvordan "empty" reagerer mht. ikke-eksisterende
variabler.

Jeg ville fx. gøre sådan her:

if (!isset($mode)) {
$mode = '';
}

I hvert fald hvis vi ser isoleret på den kodestump. :)

$mode er jo en streng, så "default" må vel være en tom streng. :)

> Jeg får fejlmeddelsen, når jeg caller
> if (!empty($mode))
> eller
> if (!empty($_GET['mode']))

Det er fordi empty ikke kontrollere om variablen eksisterer, men kigger på
hvad der er i den. Brug isset(), som vist herover. :)

> Nej. Okay. Forfra. Første gang mitscript kaldes er det uden parametere.
> www.minserver.dk/mitscript.php, der skulde så komme et index op, og man
> kan clicke på det emne man herne vil vil læse, og så vil mitscript.php
> blive kaldet igen. mitscript.php?id=1&mode=vis

Det er meget normalt at bruge det princip.

Hvis dit script ikke kan andet end at vise, ville jeg dog droppe variablen
"mode".
I stedet ville jeg tjekke om id er sat. Hvis den er, og der findes indhold
med det id, så ville jeg vise indholdet.
Hvis id er sat, men er ugyldig, så vil jeg enten lade som om den ikke er sat
eller vise en fejlmeddelelse.

Hvis scriptet kan mere end blot almindelig visning, ville jeg nok lade
"default mode" være "vis", det giver en pænere url.

> Her antagede jeg at den udeklærede variabel mode = NULL

Det har du også ret i, så vidt jeg husker.

PHP er ret ... fri, hvad den slags angår.

> Jeg har før lavet php scripts der gjorde dette, unden besvær, men det må
> vel være de nye sikkerheds ting, der gør livet svært, eller også har jeg
> aldrig lavet det ordenligt før!

Det er et definitionsspørgmål, om det gjort "godt nok"/"ordentligt". :)
Jeg vil ikke tøve med at påstå, at den "nye"[1] måde at gøre det på er
bedre, omend i nogle tilfælle et sted mellem marginalt og ligegyldigt.

Der er dog nogle (få), som ikke mener det er bedre, men bare mere
besværligt. Jeg vil gætte på at de normalt arbejder med ting, hvor
forskellen er forsvindende lille[2], eller at de ikke helt ved hvad de
snakker om.

[1] Jeg har længe haft magic_quotes og register_globals slået fra, og sat
error_level til notice på udviklingsserver. Der er altså ikke noget nyt i
alt det her, det nye er blot standard-indstillingerne.

[2] Bemærk at jeg ikke taler eller tænker nedsættende om disse personer.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Heine Laursen (17-10-2002)
Kommentar
Fra : Heine Laursen


Dato : 17-10-02 11:13

Niels Andersen <niels-usenet@myplace.dk> wrote in
news:1yvr9.118863$Qk5.5080976@news010.worldonline.dk:

> Jeg ville fx. gøre sådan her:
>
> if (!isset($mode)) {
> $mode = '';
> }

Jeg bukker, og takker dig, og Jesper Brunholm. Det virker perfekt, uden
fejlmeddelser, eller andet gejl.

Jeg vil dog lige komme med den kommentar, at det virker både hvis jeg
erklære variablen = NULL eller = ''

> I hvert fald hvis vi ser isoleret på den kodestump. :)
>
> $mode er jo en streng, så "default" må vel være en tom streng. :)
>
>> Jeg får fejlmeddelsen, når jeg caller
>> if (!empty($mode))
>> eller
>> if (!empty($_GET['mode']))
>
> Det er fordi empty ikke kontrollere om variablen eksisterer, men
> kigger på hvad der er i den. Brug isset(), som vist herover. :)

Og det er bare noget der dur

>> Nej. Okay. Forfra. Første gang mitscript kaldes er det uden
>> parametere. www.minserver.dk/mitscript.php, der skulde så komme et
>> index op, og man kan clicke på det emne man herne vil vil læse, og så
>> vil mitscript.php blive kaldet igen. mitscript.php?id=1&mode=vis
>
> Det er meget normalt at bruge det princip.
>
> Hvis dit script ikke kan andet end at vise, ville jeg dog droppe
> variablen "mode".
> I stedet ville jeg tjekke om id er sat. Hvis den er, og der findes
> indhold med det id, så ville jeg vise indholdet.
> Hvis id er sat, men er ugyldig, så vil jeg enten lade som om den ikke
> er sat eller vise en fejlmeddelelse.

Se det havde jeg jo overhovedet ikke tænkt på, men vil det ikke skabe
yderligere belastning på mysql serveren? Jeg tænker på at den først skal
chekke om id'et eksistere, og og hvis id'et eksistere, skal den så hente
resten.

Om det bare er bakketeller skal jeg ikke gøre mig klog på. (Jeg er meget
grøn på php / mysql området)


> Hvis scriptet kan mere end blot almindelig visning, ville jeg nok lade
> "default mode" være "vis", det giver en pænere url.

Se ovenover

>> Her antagede jeg at den udeklærede variabel mode = NULL
>
> Det har du også ret i, så vidt jeg husker.
>
> PHP er ret ... fri, hvad den slags angår.
>
>> Jeg har før lavet php scripts der gjorde dette, unden besvær, men det
>> må vel være de nye sikkerheds ting, der gør livet svært, eller også
>> har jeg aldrig lavet det ordenligt før!
>
> Det er et definitionsspørgmål, om det gjort "godt nok"/"ordentligt".
> :) Jeg vil ikke tøve med at påstå, at den "nye"[1] måde at gøre det på
> er bedre, omend i nogle tilfælle et sted mellem marginalt og
> ligegyldigt.
>
> Der er dog nogle (få), som ikke mener det er bedre, men bare mere
> besværligt. Jeg vil gætte på at de normalt arbejder med ting, hvor
> forskellen er forsvindende lille[2], eller at de ikke helt ved hvad de
> snakker om.

Nu kan jeg godt lide at gøre tingende på den gammel måde, så da jeg ikke
kunde bruge $PHP_SELF, satte jeg straks google til at arbejde på en
løsning. Jeg har så valgt at gøre sådan i mine scripts :
$PHP_SELF = $_SERVER['PHP_SELF'];

Er det sjusk? og ville det have sikkerheds messige fordele at udelukkende
bruge $_SERVER['hvad_nu_man_skal_bruge'] ?

> [1] Jeg har længe haft magic_quotes og register_globals slået fra, og
> sat error_level til notice på udviklingsserver. Der er altså ikke
> noget nyt i alt det her, det nye er blot standard-indstillingerne.
>
> [2] Bemærk at jeg ikke taler eller tænker nedsættende om disse
> personer.

--
Mvh
Heine Laursen

Niels Andersen (17-10-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-10-02 11:25

Heine Laursen wrote in <Xns92AA7BF526938gozarmyrealboxcom@130.225.247.90>:
>> if (!isset($mode)) {
>> $mode = '';
>> }

> Jeg vil dog lige komme med den kommentar, at det virker både hvis jeg
> erklære variablen = NULL eller = ''

OK, så er unset($var) og $var=NULL nok ikke samme. :)
Men det mener jeg det var engang... Måske husker jeg forkert. :)

>> I stedet ville jeg tjekke om id er sat. Hvis den er, og der findes
>> indhold med det id, så ville jeg vise indholdet.

> Se det havde jeg jo overhovedet ikke tænkt på, men vil det ikke skabe
> yderligere belastning på mysql serveren? Jeg tænker på at den først skal
> chekke om id'et eksistere, og og hvis id'et eksistere, skal den så hente
> resten.

Hvis du gør det på den måde, så giver det ganske rigtigt mere belastning,
men belastningen er i forvejen så lille, så det skulle ikke gøre noget.

Men du kan godt klare opgaven med præcis samme belastning, som du har nu.

Pseudo-kode med linje-nummer-syntax, da dataflow-diagrammer er en udfordring
at lave med ren tekst:

1) Tjek om ID er sat. Ja: 2, Nej: 4
2) Hent indhold med den id
3) Hvis indhold blev hentet, vis og afslut.
4) Vis index

> Nu kan jeg godt lide at gøre tingende på den gammel måde, så da jeg ikke
> kunde bruge $PHP_SELF, satte jeg straks google til at arbejde på en
> løsning. Jeg har så valgt at gøre sådan i mine scripts :
> $PHP_SELF = $_SERVER['PHP_SELF'];
>
> Er det sjusk? og ville det have sikkerheds messige fordele at udelukkende
> bruge $_SERVER['hvad_nu_man_skal_bruge'] ?

Det er helt i orden. :)
Hovedsagen er nemlig, at du ved hvad dit "namespace" indeholder.

En farlig situation kan fx være:

//$valideret er benyttet tidligere i dette script
if (...) {
$valideret = true;
}
....

if ($valideret) {
....

Det eneste man skal gøre her for at gå uden om valideringen er:

script.php?valideret=1

Hvis man altså bruger register_globals. :)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste