Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 19:31 Der er 22 kommentarer og
1 løsning

php ignorerer de fleste af mine if()

hejsa jeg har lavet en form som skal oprette en vare i db via en form 
her er et udkast af koden.

    function opret_vare($varenr, $navn, $beskrivelse, $pris, $tilbud, $kategori, $udsolgt, $imgname, $imgtempname, $img2name, $img2tempname, $antal)
    {
        if(!isset($varenr))
        {
            $this->err="Du skal huske at taste et vare nummer";
            $this->err_no=111;
            return;
        }   
        if(!isset($navn))
        {
            $this->err="FEJL : Du har ikke angivet et navn på din vare.";
            $this->err_no=300;
            return;
        }
        if(!isset($beskrivelse))
        {
            $this->err="FEJL : Du har ikke beskrevet din vare.";
            $this->err_no=301;
            return;
        }
        if(!isset($pris))
        {
            $this->err="FEJL : Skal varen ikke koste noget ? husk prisen skal angives ex. moms";
            $this->err_no=302;
            return;
        }
        if(!isset($antal))
        {
            $this->err="FEJL : Hvor mange af denne vare skal lagerføres ?";
            $this->err_no=303;
            return;
        }
        if(!isset($kategori))
        {
            $this->err="FEJL : Hvis du ikke tilslutter din vare en kategori, kan varen ikke vises i shoppen.";
            $this->err_no=303;
            return;
        }

ALT i denne kode bliver totalt ignoreret undtagen
if(!isset($kategori))
        {
            $this->err="FEJL : Hvis du ikke tilslutter din vare en kategori, kan varen ikke vises i shoppen.";
            $this->err_no=303;
            return;
        }

er der nogen der kan give mig en fornuftig forklaring på det ???

det skal siges at det har virket....
Avatar billede nielle Nybegynder
30. oktober 2005 - 20:13 #1
Hvor får du dine variable $varenr, $navn, $beskrivelse, $pris, $tilbud, $kategori, $udsolgt, $imgname, $imgtempname, $img2name, $img2tempname og $antal fra?
Avatar billede erikjacobsen Ekspert
30. oktober 2005 - 20:40 #2
Hvis der er flere fejl, får du kun den sidste. Er det hvad du ønsker skal ske?
Avatar billede nielle Nybegynder
30. oktober 2005 - 20:46 #3
Han burde nu få den første fejl (og kun den) eftersom at der er en return i hver ensete if-sætrning.
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 20:51 #4
som nielle skriver skal jeg have den første fejl hvis $navn ikke er sat og eller bare derud af med de andre... men med denne kan jeg gå igennem alle fejl hvis jeg blot sætter kategori. den er ligeglad med alle de andre....

Jeg får mine variabler fra en form på en anden side, som så kalder denne function...

Som sagt det har virket før og alle variabler er stillet i rigtig rækkefølge, for hvis jeg taster alle felterne, kommer alle i det rigtige sted i db... derfor virker det meget underligt at den ikke vil reagere....
Avatar billede nielle Nybegynder
30. oktober 2005 - 20:54 #5
Hvordan ser koden ud der hvor du får fat på dine variable? Berguer du $_POST eller $_GET til at få dem fra formen?
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 21:12 #6
$a = new lager();
    $a->opret_vare($_REQUEST["varenr"], $_REQUEST["navn"], $_REQUEST["beskrivelse"], $_REQUEST["pris"], $_REQUEST["tilbud"], $_REQUEST["kategori"],  $_REQUEST["udsolgt"], $_FILES["img"]["name"], $_FILES["img"]["tmp_name"], $_FILES["img2"]["name"], $_FILES["img2"]["tmp_name"], $_REQUEST["antal"]);
   
    if($a->err_no)
    {
        $besked = "" .$a->err. ", " .$a->err_no. "";
    }
    else
    {
        $besked = "Vare Nr. " .$a->vare_nr. " er nu oprettet.\nTryk <a href='productinfo.php?id=" .$a->id. "'>HER</a> for at se varen i shoppen.";
    }
Avatar billede nielle Nybegynder
30. oktober 2005 - 22:09 #7
Det ser jo umiddelbart ud til at være ok.

Prøv eventuelt at rette dine if-sætninger til noget i stil med:

if(!isset($antal) || $antal == "")
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 18:24 #8
Ja okey det giver ikke meget mening.... hvis jeg gør som du siger med || $variabel == "" så virker de alle hvor jeg gør dette....
er der en ybere mening med det ??
Avatar billede erikjacobsen Ekspert
31. oktober 2005 - 18:29 #9
Ja, isset(...) siger om variablen er defineret. Det er den hvis der står den tomme streng i. Kommer du fra en <form> med felter, vil de være definerede. Men de kan så være tomme.  (30/10-2005 20:46:20, ja, nielle, jeg så forkert *g*)
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 18:40 #10
erikjacobsen>> de burde virke... jeg har 3 andre sider på andre servere hvor denne metode virker fint. og dette her virkede også fint lige indtil jeg fik rettet en del andre ting i samme funktion, så stoppede det med at virke....
nu har jeg lavet denne også if(isset($imgname) || $imgname != "") den er stik modsat.. den skal kun gøre noget hvis der er sat noget i variablen, men den er også skide ligeglad... den udfører koden lige meget hvad... ???
Avatar billede nielle Nybegynder
31. oktober 2005 - 18:41 #11
Som erikjacobsen siger:

Der er tale om en 2-trins test.

Trin 1) if (!isset($antal) ...

- tester om variablen er sat (defineret) eller ej. Hvis den ikke er det returnere !isset($antal) værdien sand og du får dermed returneret en fejlkode.

PHP benytter en smart form for boolsk tjek på udtryk som:

if (Test1 || Test2) { ... }

Hvis Test1 returnere sand, så "gider" PHP ikke en gang at teste på Test2; Uanset om Test2 er sand eller falsk vil det hele jo alligevel blive sand.

Dette "boolean-shortcircuit" (boolsk kortslutning) benytter jeg mig af i kodestumpen:

Trin 2) ... || $antal == ""

Hvis !isset($antal) returnere sand, bliver der slet ikke testet på højresiden af or'en (altså på $antal == ""). Hvis !isset($antal) derimod er falsk, så er $asntal derimod defineret, men den kan som sagt bare være lig med den tomme streng.

Håber at det gav mening?
Avatar billede nielle Nybegynder
31. oktober 2005 - 18:43 #12
Det kan være at du skal lave et endnu grovere tjek med:

if(isset($imgname) || trim($imgname) != "")
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 18:53 #13
jeg skal væl ikke bruge if(!isset her da den jo netop SKAL være sat før den skal gøre noget ???
Avatar billede nielle Nybegynder
31. oktober 2005 - 19:00 #14
Hvsi din funktion er beregnet på at teste om alle felterne har en fornuftigt værdi, så er det nødvendig at have:

if (!isset($antal) ...

- -testen først.
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 19:12 #15
ja min funktion skal teste alle de andre variabler om de er der ellers kom med en fejl, men netop img ifferne skal ikke give fejl... den skal uploade et billede hvis det er sat, og ellers skal den bare ignorerer denne variabel..
Avatar billede nielle Nybegynder
31. oktober 2005 - 19:15 #16
Så skal de vel ikke fodres ind i den funktion? Eller er det måske meningen at tjekket blot skal være et andet for netop dsse variable?
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 19:22 #17
Altså jeg har en funktion hvor den først teste om der er sat noget i de variabler som jeg bestemmer at der SKAL skrives noget.. og bagefter begynder den at udføre funktioner som fek.s at uploade billeder og indsætte data i mysql og så videre...

med andre ord jeg har en form hvor alle data skal udfyldes undtagen billeder de er valfrie.
i funktionen tester jeg først om tingene er udfylt hvis de er det, tjekker jeg om billederne er sat (der er 2) HVIS de er det, skal den uploade dem via ftp hvis IKKE ignorer den del af koden.
Derefter indsæt data i Mysql... men den uploader billeder selvom der ikke er nogen at uploade, så uploader den bare 2 billeder med time() som navn og billedet fylder 0kb
Avatar billede nielle Nybegynder
31. oktober 2005 - 19:31 #18
Den del af koden som tester på om billederne er sat, kunne se sådan her ud:

if (isset($imgname) && trim($imgname) != "")
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 19:36 #19
Ja okey... der var den.. hmm syndes bare det er underligt der skal så meget til.... har jeg sku ikke på de andre sider, og de virker fint... men nok om det... vil i begge svare ?? så skal jeg lukke...
Avatar billede nielle Nybegynder
31. oktober 2005 - 20:13 #20
Der er forskelle på hvordan de enkelte PHP-servere er konfigureret. Nogle af disse forskelle har store konsekvensre mht. hvordan din kode skal se ud.

... og et svar :^)
Avatar billede bacce.dk Nybegynder
31. oktober 2005 - 20:20 #21
Ja det er jeg naturligvis med på.. det sjove er bare at de er sat ens op... benytter kun egne servere.... og alle er sat ens op, og alle har det samme installeret....
Men det er også lige meget... det skal bare virke og det gør det nu.. :-)
Avatar billede bacce.dk Nybegynder
02. november 2005 - 14:16 #22
erikjacobsen>> vil du ikk ehave point ??
Avatar billede bacce.dk Nybegynder
02. november 2005 - 20:21 #23
Nå men så lukkes der
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