Toon posts:

[php] Serialize probleempje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Lo allen,

Ik heb een klein serialize probleempje. Ik heb een vote script voor downloads. Mensen kunnen een cijfer geven aan een bepaalde download (volledig legaal voor mensen gaan klagen, het gaat hier om mods voor GP3/4 :)). Om te voorkomen dat mensen 2 keer stemmen wordt een cookie aangemaakt. Het is niet ultiem veilig, maar er vallen ten slotte geen prijzen mee te winnen dus zo erg is het niet als er gefraudeerd wordt.

Wanneer er gevote wordt, wordt op de volgende manier cookies aangemaakt:
PHP:
1
<?function addvote($id, $rating){[hier stond de query]        global $HTTP_COOKIE_VARS;    if ( isset( $HTTP_COOKIE_VARS[voted] )) //is al eerder gevote dus    {        $old = unserialize( $HTTP_COOKIE_VARS[voted] ); //$old wordt weer een array        $old[] = $id; //array krijgt extra element van nieuwe id        $ids = serialize( $old ); //en wordt weer geserialized    }    else    {        $id[0] = $id; //of er wordt een nieuwe array gemaakt        $ids = serialize( $id );    }    setcookie("voted", $ids, time()+7776000);        echo "<html><head><title>Stem toegevoegd</title></head><body onload=\"opener.location.reload(true);\"><font size=2 face=verdana>";    echo "Bedankt voor je stem!";}?>

En zo gecheckt of er al gevote is op een bepaalde download met id nummer:
PHP:
1
<?if ( isset( $HTTP_COOKIE_VARS[voted] ))    {        $voted = unserialize( $HTTP_COOKIE_VARS[voted] );                foreach ( $voted AS $value )        {            if ($value == $id)            {                echo "<html><head><title>Fraud detected :)</title></head><body><font size=2 face=verdana>";                echo "Sorry, je mag maar één keer stemmen!</font></body></html>";                $valid = "N";            }        }    }    if ( $valid != "N" &amp;&amp; !isset( $valid ) )    {        include("functions.php");        addvote($id, $rating); //das bovenstaande functie dus    }?>

Het probleem zit 'm er dus in dat het geen array wordt met unserialize terwijl dat volgens mij wel het geval zou moeten zijn. echo $voted; geeft gewoon nix (ook niet 'array' dus). Wat doe ik fout?

edit: sorry voor de puinhoop, na een edit heeft het hele forum me mooie layout verneukt :'(.

edit2: nu beter? :)

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Lijn je code ff goed uit:
PHP:
1
<?function addvote($id, $rating) //download id{    connecttodb(); //andere functie    mysql_query("UPDATE downloads SET vrating=vrating+$rating, aantal_votes=aantal_votes+1 WHERE id='$id'") or die ("Het lijkt er op dat er een probleem is met de database. Probeer het later nog eens, onze excuses! ".mysql_error());  global $HTTP_COOKIE_VARS;    if ( isset( $HTTP_COOKIE_VARS[voted] )) //als er al eerder gevote is op een andere download..    {        $old = unserialize( $HTTP_COOKIE_VARS[voted] ); //cookie wordt weer omgezet in een array* $old[] = $id; //er wordt nog een id aan de array toegevoegd        $ids = serialize( $old ); //en de boel wordt weer geserialized    }    else //eerste vote    {        $id[0] = $id; //van het id wordt een array gemaakt        $ids = serialize( $id ); //en geserialized    }    setcookie("voted", $ids, time()+7776000);        echo "<html><head><title>Stem toegevoegd</title></head><body onload=\"opener.location.reload(true);\"><font size=2 face=verdana>";    echo "Bedankt voor je stem!";}?>

En hier het stukkie code dat checkt of er al gevote is op een bepaalde dl of niet:
PHP:
1
<?if ( isset( $HTTP_COOKIE_VARS[voted] )) //als de cookies gezet zijn, anders is het sowieso goed    {        $voted = unserialize( $HTTP_COOKIE_VARS[voted] ); //$voted wordt weer de array, hier gaat het fout                foreach ( $voted AS $value ) //hier komt de error-->is geen array        {            if ($value == $id)            {                echo "<html><head><title>Fraud detected :)</title></head><body><font size=2 face=verdana>";                echo "Sorry, je mag maar één keer stemmen!";                $valid = "N";            }        }    }    if ( $valid != "N" &amp;amp;amp;&amp;amp;amp; !isset( $valid ) ) //als er nog niet gevote is op dit item of helemaal niet gevote    {        include("functions.php");        addvote($id, $rating); //wordt bovenstaande functie uitgevoerd    }?>

[/quote]
Damn wat een k*tcode zeg. Eerst 's kijken hoe het er zo uitziet.

Verwijderd

Topicstarter
Zoals ik al zei:
edit: sorry voor de puinhoop, na een edit heeft het hele forum me mooie layout verneukt
Zaten gewoon allemaal tabs e.d. in, maar die zijn er dus uit. Zal zo ff opnieuw proberen...

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Op zaterdag 04 mei 2002 17:55 schreef Frank83 het volgende:
Zoals ik al zei:
[..]

Zaten gewoon allemaal tabs e.d. in, maar die zijn er dus uit. Zal zo ff opnieuw proberen...
Gewoon tabs vervangen door spaties (4 volgens de PEAR standaard).

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
gebruik in ieder geval quotes binnen je named arrays, en gebruik ook eens print_r($HTTP_COOKIE_VARS) en if(is_array($mijn_array))

Verwijderd

Topicstarter
Array ( [voted] => a:1:{i:0;s:1:\"6\";} [lastvisit] => 2002-05-04 17:03:57 )

dat staat er in me $HTTP_COOKIE_VARS...

Verwijderd

Topicstarter
Dit is de error btw:
Warning: Invalid argument supplied for foreach() in c:\phpdev\www\gp4\vote.php on line 27

line 27 is dus foreach ( $voted AS $value )

Verwijderd

Topicstarter
*schop*

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op zondag 05 mei 2002 15:51 schreef Frank83 het volgende:
*schop*
*au* ;)

Maareh, probeer gewoon eens wat te debuggen.. doe eens een print_r($voted) na je unserialize... of een echo($voted), wat Array() zou moeten printen.. enz..

On track


Verwijderd

Topicstarter
zoals ik al zei geeft echo $voted; gewoon helemaal niets. Ook niet 'array()'. Vandaar die error in foreach..

sorry trouwens van die schop, was nix persoonlijks hoor :P.

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

probeer eens met unserialize(stripslashes($HTTP_COOKIE_VARS["voted"]))

On track


Verwijderd

Topicstarter
verrek het werkt ! Mijn dank is uiteraard enorm groot :).

Verwijderd

Topicstarter
hmmm...dit is een oude thread van mij, die ik nu weer even omhoog schop...

Hetzelfde script werkt nu namelijk niet meer. Het werkt hier lokaal nog steeds perfect, maar niet op de webserver. Ikzelf draai PHP 4.0.6 (PHPDev) en de server ook, dat is het vreemde.

De phpinfo() van de server:
http://gp3.gamers.nl/test.php

Wat kan het probleem zijn? De foutmelding is overigens nog steeds hetzelfde als bovengenoemde, dus het wordt geen array na unserialize( stripslashes( $HTTP_COOKIE_VARS[voted] )) maar een string..

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

WouZz:
probeer eens met unserialize(stripslashes($HTTP_COOKIE_VARS["voted"]))
Beter
code:
1
2
3
4
if ( get_magic_quotes_gpc () )
   $var = unserialize ( stripslashes ( $HTTP_COOKIE_VARS [ 'name' ] ) );
else
   $var = unserialize ( $HTTP_COOKIE_VARS [ 'name' ] );

Die magic_quotes functie checkt of er idd addslashes wordt gedaan bij het setten van een cookie.

of natuurlijk bij het setten van een cookie (is eigenlijk beter) zorgen dattie altijd addslashes doet...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
mjah geen suc6..ik kan Gamepoint wel ff vragen een schop te geven tegen die server, maar ik heb het id dat dat niet gaat werken..

Verwijderd

Topicstarter
niemand dus?
Pagina: 1