Avatar billede djsteiner Nybegynder
18. december 2011 - 17:08 Der er 10 kommentarer og
1 løsning

fejl i voting script

Hej

Jeg for denne fejl i et script:

Notice: Undefined variable: action in C:\wamp\www\Afsteming\inc\functions.php on line 69 Call Stack: 0.0008 669304 1. {main}() C:\wamp\www\Afsteming\index.php:0 0.0064 718824 2. require('C:\wamp\www\Afsteming\inc\functions.php') C:\wamp\www\Afsteming\index.php:3 Notice: Undefined index: cleanCookie in C:\wamp\www\Afsteming\inc\functions.php on line 82 Call Stack: 0.0008 669304 1. {main}() C:\wamp\www\Afsteming\index.php:0 0.0064 718824 2. require('C:\wamp\www\Afsteming\inc\functions.php') C:\wamp\www\Afsteming\index.php:3

koden er her:


liner 69 er her :

//VOTE START
if ($action == "vote"){
   
    if (isset($_COOKIE["poll" . getPollID($pollAnswerID)])) {
        echo "voted";
    } else {
        $query  = "UPDATE pollAnswers SET pollAnswerPoints = pollAnswerPoints + 1 WHERE pollAnswerID = ".$pollAnswerID."";
        mysql_query($query) or die('Error, insert query failed');
        setcookie("poll" . getPollID($pollAnswerID), 1, time()+259200, "/", ".webresourcesdepot.com");
        getPollResults(1);
    }
}
//VOTE END
line 82  starter her
if (mysql_real_escape_string($_GET['cleanCookie']) == 1){
    setcookie("poll1", "", time()-3600, "/", ".webresourcesdepot.com");
    header('Location: http://webresourcesdepot.com/wp-content/uploads/file/ajax-poll-script/');
}
?>
Avatar billede olebole Juniormester
18. december 2011 - 17:30 #1
<ole>

Udfra det, du viser, er fejlene, at $action ikke er erklæret, inden du bruger den i if-sætningen - og du tester ikke, om $_GET['cleanCookie'] er sat, inden du bruger den.

/mvh
</bole>
Avatar billede inteeeL Nybegynder
19. december 2011 - 09:06 #2
Ole har fuldstændig ret, du definerer ikke variablerne. Dog er der en måde at undgå de advarsler - dette gøres ved at ændre i graden af PHP-advarsler ved følgende kode:

error_reporting(E_ALL ^ E_NOTICE);


Ovenstående skal du tilføje enten i PHP.ini eller øverst i din .php fil.
Avatar billede olebole Juniormester
19. december 2011 - 15:53 #3
@inteeeL: Nej, det ville være alt andet end klogt! I 'gamle dage' var de advarsler slået fra, men de er netop blevet slået til pr. default for at lære folk at kode ordentligt - og undgå, at en sjusket kodestil går hen og resulterer i alvorlige fejl.

Lad være med at trampe på termometret ... patienten er stadig syg, selvom du ikke længere kan se det  *o)
Avatar billede olebole Juniormester
19. december 2011 - 15:55 #4
PS: og skulle det endelig skrives i php.ini, ville syntaksen i øvrigt være en anden. Men som sagt: "Lær at kode i stedet"  *o)
Avatar billede inteeeL Nybegynder
19. december 2011 - 18:08 #5
Det er bare i orden - og mere end rigtigt.. Altid noget andet at få det at vide fra en rutineret. :-)
Avatar billede olebole Juniormester
19. december 2011 - 18:21 #6
Løsningen er altid at erklære sine variabler - eller at tjekke, om de er sat, før man bruger dem. F.eks. kunne man slippe af med den første fejl med:

if (isset($action) && $action == "vote"){

- og den anden med:

if (isset($_GET['cleanCookie']) && mysql_real_escape_string($_GET['cleanCookie']) == 1){

- og måske, det hele skal indlejres i:


if (!empty($_GET)) {
    // Bestående kode her
}

Avatar billede olebole Juniormester
19. december 2011 - 18:30 #7
Nu ved jeg ikke, hvor $action kommer fra, men den kunne f.eks. stamme fra en betingelse:


if (BETINGELSE) {
  $action = 123;
}


- men så bliver variablen kun sat, hvis betingelsen er opfyldt. En bedre/pænere kodepraksis end at bruge isset, som vist ovenfor, ville være at skrive noget i stil med:


$action = false;
if (BETINGELSE) {
  $action = 123;
}


Så ville følgende ikke udløse en advarsel:

if ($action == "vote"){


Med GET variabler er det noget andet. Dem bør man tjekke med isset - og hvis dokumentet kan forventes tilgået uden querystreng, bør man også tjekke, om GET er tomt, med empty
Avatar billede djsteiner Nybegynder
19. december 2011 - 22:59 #8
Hej mange tak for jeres svar! :)

olebole  kan du ikke lige komme med et svar så får du point :)

Jeg går ud fra hvis jeg har flere spørgsmål omkring hvordan man udvider dette script så skal  jeg lave et nyt spørgsmål ?
Avatar billede olebole Juniormester
20. december 2011 - 17:55 #9
Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes.

Hvis spørgsmålene afviger væsentligt fra spørgsmålet her, er det nok meget godt at åbne en eller flere nye tråde. Så bliver det lettere for andre at søge hjælp i 'gamle' tråde. Ellers kan du bare spørge løs her  =)
Avatar billede djsteiner Nybegynder
20. december 2011 - 22:48 #10
Tak for det! :)

Jeg vender nok tilbage med et nyt spørgsmål omkring noget med at lave et lave flere end et spørgsmål i det spørge skema/ aftemnings script jeg er ved at lave! :)

Jeg er nemlig noget på bar bund i hvordan jeg laver dette !
Avatar billede djsteiner Nybegynder
20. december 2011 - 22:57 #11
Hehe det siste jeg skrev er vist lidt noger sluder, men håber det gav mening! :)

Jeg kan lige sige at det jeg kæmper med at lave et aftemnings script hvor man, som bruger kan stemme på billeder både ens egne og anders.

Bare helt enkelt afstemning ja/nej

Man skal så kunne uploade ens billeder så mange som man nu har lyst til.

Men er noget på bar bund her hvordan jeg skal gribe det an med hensyn til databasen og selve scriptet?
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