pb raffraichissement : ok | news pb cannot use scalar?

pb raffraichissement : ok | news pb cannot use scalar? - PHP - Programmation

Marsh Posté le 16-03-2007 à 21:47:55    

Bonjour.
 
Je voulais faire un petit sondage sur le site que je suis entrain de faire pour un amis, enfin un script qui permet la gestion des sondages, ayant peu de temps devant moi j'ai trouver un script open source d'un sondage modifiable facilement et sans bdd.
 
Cela dit il n'avais pas de gestion des votants. Donc j'ai rajouter un petit bout de code maison qui permet de recupérer l'adresse IP du votant et de l'enregistrer en bdd au moment de la validation du formulaire. Si deja voter (donc adresse en bdd) je supprime le bouton valide sinon je le laisse.
 
Donc quand je valide tout va bien il fait bien l'ajout du sondage et affiche le resultat, j'ai bien mon info en bdd mais le souci c'est que le bouton valid est encore présent puisque la page n'a pas ete raffraichit donc voila le probleme
 
comment faire pour raffraichir la page après une action donné
Si je fait un header ca va pas marcher j'ai le fameux header already sent .....
 
voici le code si vous aviez une idée vous me serez d'une grande aide
 
l'ajout en BDD ligne 57
vérification de la presence en bdd de l'ip ligne : 20
banissement du bouton validation ligne : 108
 

Code :
  1. <?
  2. // Définition de la connexion à la base donné
  3. require("../../conf/connection-inc.php" );
  4.   // INFORMATIONS SUR LE SONDAGE
  5.   $titre = 'sondage'; // = nom du fichier dans lequel est stocké les votes
  6.   $question = 'Comment trouvez-vous ce site ?';
  7.   $reponse[1] = 'Bien';
  8.   $reponse[2] = 'Moyen';
  9.   $reponse[3] = 'Mauvais';
  10.   $reponse[4] = 'Pitoyable';
  11.   $nb_max_votes = 0; // 0 si illimité
  12.   // MODIFICATION DU SONDAGE
  13.   $choix = count($reponse);
  14.        $ip = $_SERVER["REMOTE_ADDR"];
  15.     // vérification de l'adresse IP dans la base de donnée
  16. $query = "select count(*) as nb from ip_sondage where ipsond_ip='$ip'";
  17. $result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !" );
  18. $val = mysql_fetch_array($result);
  19. $ip_bdd = $val['nb'];
  20.   if (isset($_GET['vote']))
  21.   {
  22.    $resultats = fopen("$titre.txt", "r+" );
  23.    $vote = $_GET['vote'];
  24.    for ($numero = 1; $numero <= $choix; $numero ++)
  25.    {
  26.     $ligne[$numero] = (int) fgets($resultats);
  27.     if ($numero == $vote)
  28.     {
  29.      $ligne[$numero] ++;
  30.     }
  31.     if (isset($donnees_votes))
  32.     {
  33.      $donnees_votes = $donnees_votes . "\n" . $ligne[$numero];
  34.      $nb_votes += $ligne[$numero]; // comptage du nombre de votes
  35.     }
  36.     else
  37.     {
  38.      $donnees_votes = $ligne[$numero];
  39.      $nb_votes = (int) $ligne[$numero];
  40.     }
  41.    }
  42.    fseek ($resultats, 0);
  43.    if($nb_votes<=$nb_max_votes OR $nb_max_votes==0)
  44.      fputs ($resultats, $donnees_votes); // écriture des données
  45.   //insertion de l'adresse ip du votant en bdd
  46.   $add_ip = "INSERT INTO ip_sondage (ipsond_ip) VALUES ('$ip')";
  47.    mysql_select_db($sql_bdd, $db_link);
  48.     $result = mysql_query($add_ip, $db_link) or die(mysql_error());
  49.    fclose($resultats);
  50.   }
  51.   // LECTURE DU SONDAGE  
  52.   $resultats = fopen("$titre.txt", "r" );
  53.   $numero = 1;
  54.   while ($numero <= $choix) // attribution d'un nombre pour chaque vote à l'array $resultat[]
  55.   {
  56.    $resultat[$numero] = fgets($resultats);
  57.    if ($resultat[$numero] == NULL) // on remplace les lignes vides du fich txt par 0
  58.    {
  59.      $resultat[$numero] = 0;
  60.    }
  61.   $numero ++;
  62.   }
  63.   $total_votes = 0; // calcul du total des votes
  64.   foreach($resultat as $nb_resultat) $total_votes += $nb_resultat;
  65.   if ($total_votes == 0) // éviter la division par 0
  66.   {
  67.    $total_votes = 1;
  68.   }
  69.   $numero = 1;
  70.   while ($numero <= $choix) // transformation du nombre de vote en pourcentages
  71.   {
  72.    $pourcentage[$numero] = $resultat[$numero] / $total_votes * 100;
  73.    $numero ++;
  74.   }
  75.   $long_max_bloc = 120; // longueur maximale du curseur pour un vote en pixels
  76.   // affichage des barres et du nombre de votes
  77.   $numero = 1;
  78.   echo ('<div class="titresondage" align="center">'. $question . '</div><br /><form action=""> ');
  79.   while ($numero <= $choix)
  80.   {
  81.    echo ('<div class="choix"><label><input type="radio" name="vote" value="' . $numero . '" />'. $reponse[$numero] .'</label>
  82.         <br /> <img src="sondage_barre.jpg" height="10"width="' . $pourcentage[$numero] / 100 * $long_max_bloc . '"
  83.         alt="'.round($pourcentage[$numero]).'%" /><br />
  84.         <span style="font-size:80%;"><strong>' . $resultat[$numero] . ' votes</strong></span></div>');
  85. //    echo ($pourcentage[$numero] . '%');  
  86.    $numero ++;
  87.   }
  88.   if ($ip_bdd == "0" ){ echo ('<div align="center"><input type="submit" value="envoyer">'); }
  89.   if ($ip_bdd != "0" ){ echo ('<div align="center">Vous avez déjà voté'); }
  90.   echo ('</div></form>');
  91.   fclose($resultats);
  92. ?>


Message édité par hyptnos le 17-03-2007 à 22:43:45
Reply

Marsh Posté le 16-03-2007 à 21:47:55   

Reply

Marsh Posté le 17-03-2007 à 14:03:10    

ligne 57 et suivante: quand tu ajoute (avec succès) l'adresse ip, elle est alors présente dans la base, tu peux remettre à jour $ip_bdd:

Code :
  1. $ip_bdd = 1;

Reply

Marsh Posté le 17-03-2007 à 14:50:45    

Je vois ce que tu veux dire :) c'est vrai que cela pourrait etre la solution et en plus tres simple :)
 
Je vais tester cela merci bien :)

Reply

Marsh Posté le 17-03-2007 à 22:15:25    

exellent super merci  
un truc tout con sans prise de tete :) et ca marche
 
Moi qui cherchait midi a 14h :)
 

Reply

Marsh Posté le 17-03-2007 à 22:42:31    

j'ai un autre souci maintenant :(
 
j'ai fait un include du fichier sondage.php dans l'index et j'ai une erreur  
 

Citation :


Warning: Cannot use a scalar value as an array in C:\EasyPHP1-8\www\JapanArts\sondage.php on line 112


 
ca veux dire quoi?
 
la ligne 112 c'est  
 

Code :
  1. $resultat[$numero] = fgets($resultats);


 
Une idée?

Reply

Marsh Posté le 17-03-2007 à 23:00:04    

A priori ton indice $numero n'est pas un entier.  
Debug la variable $numero par un var_dump par exemple pour en connaitre le contenu.
Sinon tu peux toujours caster ta variable en int : $numero = (int)$numero

Reply

Marsh Posté le 17-03-2007 à 23:09:28    

Je pense que c'est plutôt $resultat, le problème... il doit déjà avoir une valeur (genre un entier), d'une manière ou d'une autre.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 17-03-2007 à 23:11:22    

euh excuse moi j'ai pas tout compris
 
j'ai rajouter $numero = (int)$numero juste apres la définition de la variable mais ca na rien changer :(
 
le code entier est ci dessus pour plus d'info

Reply

Marsh Posté le 17-03-2007 à 23:18:13    

Fous un $resultat = array() avant ta boucle (c'est plus propre de toute façon, mais normalement le fait de l'omettre ne devrait pas produire ce genre d'erreurs... :spamafote:)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 17-03-2007 à 23:25:00    

merci les gars :)
 
$resultat= array(); avant la boucle et sa roule :)
 
Encore merci :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed