Script en php ne fonctionne plus

Résolu
MisterGreen -  
 mars77 -
Bonjour,

J'utilise depuis plusieurs année un scripts de quizz en php (My_quiz_php, créé par Stéphane Kupecky).
je l'ai très légérement adapté à l'époque où je touchait un peu à la programmation php (un peu je précise et mes obligation depuis deux ans font que je deviens de moins en moins performants si tant est que je l'ai été).

Depuis quelques semaines, il ne fonctionne plus alors que je n'ai à priori rien touché dans son code.

Je cherche depuis quelques semaines mais sans résultats.

Quelqu'un aurait-il une idée ? Y-a-t-il eu des modifications ces dernières semaines qui pourrait expliquer ce brusque bug ?

Sur mon script de quizz que l'on retrouve à l'adresse suivante : http://www.riposteverte.com/quizz/ on ne peut plus s'inscrire.
Dès que l'on essaie de se loger, il est répondu, vous avez déjà participer aujourd'hui et cela quelque soit le login que l'on utilise !!!

Voici le début du code

<form name="formaffiche" action="quizz_verif.php" method="POST">
<?php
include("../configbdd.php");
include("../configquizz.php");
// Vérifier si le visiteur a déjà participé au quizz le même jour.
$datej=date("Y-m-j");
$sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like'$Nom_visiteur' AND date='$datej' ";
$res=mysql_db_query($bdd, $sql);
$row = mysql_fetch_array($res);
if ($nbparticip=='faux'){
$row[0]='tototatatriti';
}
if ($row[0]==$Nom_visiteur){
print ("Désolé $Nom_visiteur, vous avez déjà participé aujourd'hui, retentez votre chance demain");
}

merci d'avance

V Hergott
Configuration: Windows Vista
Firefox 3.0.12

20 réponses

Résumé de la discussion

Un script de quizz PHP ne permet plus l'inscription et affiche systématiquement que l'utilisateur a déjà participé, même pour de nouveaux comptes ou le lendemain. La cause principale est probablement que les valeurs d'entrée ne sont plus récupérées automatiquement puisque le mode register_globals est OFF, il faut donc lire les données via $_POST. Réparer le script implique de récupérer Nom_visiteur via $_POST['Nom_visiteur'], sécuriser l’entrée et utiliser une requête SQL adaptée, ce qui explique les alternances entre les variables et les vérifications. D'autres ajustements utiles peuvent inclure l'échappement des entrées et une vérification de configuration serveur, notamment les paramètres PHP et les règles d'hébergement, afin d'éviter des régressions similaires à l'avenir.

Bobot (l'IA à votre service)
  1. roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   8
     
    bonjour,
    regarde cette ligne
    $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like'$Nom_visiteur' AND
    ou bien il ya autre chose?
    0
  2. MisterGreen
     
    Bonjour Roussos,

    Non il n'y a rien d'autre que les lignes de scripts que j'ai posté dans mon message
    0
  3. roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   8
     
    ok donc l'erreur est à cette ligne like'$Nom_visiteur' AND
    elle devrait plutot etre like='$Nom_visiteur' AND
    0
  4. MisterGreen
     
    en rajoutant le = entre like et '$Nom_visiteur', cela me crée une erreur (ci dessous) et cela me dit toujours que j'ai déjà joué
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /quizz/quizz.php on line 133
    Désolé , vous avez déjà participé aujourd'hui, retentez votre chance demain
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jjsteing Messages postés 1613 Date d'inscription   Statut Contributeur Dernière intervention   181
     
    Bonjour,

    Il te manque un espace :)

    $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like '$Nom_visiteur' AND date='$datej' ";
    0
    1. MisterGreen
       
      J'ai rajouté l'espace mais cela ne change rien
      $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like '$Nom_visiteur' AND date='$datej' ";
      0
  7. roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   8
     
    enleve le like et mes "="
    0
    1. MisterGreen
       
      J'avais essayé et je viens de le refaire
      $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur='$Nom_visiteur' AND date='$datej' ";

      mais cela ne change rien
      0
  8. Alain_42 Messages postés 5413 Statut Membre 904
     
    où prends tu cette variable ? $Nom_visiteur

    $Nom_visiteur=$_POST['Nom_visiteur'];
    0
    1. MisterGreen
       
      On la prend dans le formulaire de départ je pense

      <form name="formaffiche" action="quizz.php" method="POST">
      <tr>
      <td class="quizztitre">   Entrez votre nom/pseudo :   </td>
      <td class="quizztitre">
      <input type="text" name="Nom_visiteur" size="25">
      </td>
      </tr>
      0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    On le tape dans ce formulaire qui est envoyer à quizz.php

    dans quizz.php tu le récupères comment ?

    par $Nom_visiteur=$_POST['Nom_visiteur'];

    ou tu as une ligne du genre extract($_POST);
    0
    1. MisterGreen
       
      Sur la page quizz, cela commence par ca :
      <form name="formaffiche" action="quizz_verif.php" method="POST">
      <?php
      include("../configbdd.php");
      include("../configquizz.php");
      // Vérifier si le visiteur a déjà participé au quizz le même jour.
      $datej=date("Y-m-j");
      $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like '$Nom_visiteur' AND date='$datej' ";
      $res=mysql_db_query($bdd, $sql);
      $row = mysql_fetch_array($res);
      if ($nbparticip=='faux'){
      $row[0]='tototatatriti';
      }
      if ($row[0]==$Nom_visiteur){
      print ("Désolé $Nom_visiteur, vous avez déjà participé aujourd'hui, retentez votre chance demain");
      }
      else{
      // Selectionner les questions

      Donc il n'y a pas de $_post

      Par contre dans la page quizz-verif.php, cela commence par :
      <?php
      include("../configbdd.php");
      include("../configquizz.php");
      // Afficher les coordonnées du participant
      print "<b>";
      print $HTTP_POST_VARS["Nom_visiteur"];
      print "</b><br>";
      0
  10. Alain_42 Messages postés 5413 Statut Membre 904
     
    C'est bien ce que je pensait les valeurs ne sont pas récupérées ton hebergeur a du modifier le fichier de config de php, et REGISTER_GLOBAL est mis à OFF (pour des raisons de sécurité)

    conséquence:

    avant quand un formulaire t'envoyait un <input name="Nom_visiteur"

    tu avait sa valeur directement dans la variable $Nom_visiteur

    maintenant il faut la "récupérer" dans la globale $_POST
    $Nom_visiteur=$_POST['Nom_visiteur'];

    sécurité: tu maintrises les variables que tu souhaites recevoir alors qu'avant un filou pouvait envoyer n'importe quoi.

    donc modifes:

    Sur la page quizz, cela commence par ca :
    <form name="formaffiche" action="quizz_verif.php" method="POST">
    <?php
    include("../configbdd.php");
    include("../configquizz.php");
    // Vérifier si le visiteur a déjà participé au quizz le même jour.
    $datej=date("Y-m-j");
    $Nom_visiteur=mysql_escape_string($_POST['Nom_visiteur']);
    // + une petite sécurisation en passant
    $sql="Select nomvisiteur, date FROM quizz_visiteur WHERE nomvisiteur like '$Nom_visiteur' AND date='$datej' "; 
    
    etc.....
    
    0
    1. MisterGreen
       
      Alain tta remarque me parait logique et effectivement on avance
      Il ne me dit plus que j'ai déjà joué mais par contre il ne m'envoie plus les question du script
      voir : http://www.riposteverte.com/quizz/quizz.php

      Désolé je dois m'absenter quelques temps pour m'occuper de mes enfants. je reviens plus tard dans la soirée
      0
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    if ($nbparticip=='faux'){
    $row[0]='tototatatriti';
    }
    if ($row[0]==$Nom_visiteur){
    print ("Désolé $Nom_visiteur, vous avez déjà participé aujourd'hui, retentez votre chance demain");
    }
    else{


    d'où vient cette variable $nbparticip ?
    0
    1. MisterGreen
       
      Me revoilà pour écouter vos conseils avisés.

      la variable $nbparticip, je la retrouve uniquement dans un fichier configquizz dont voici le contenu

      ?
      //include("configbdd.php");
      $sql="SELECT * FROM quizz_config";
      $res=mysql_db_query($bdd, $sql);

      // Définir les variables de configuration
      $row = @mysql_fetch_Array($res);
      $titre=$row[titre];
      $nbquestion=$row[nbquestion];
      $mode=$row[mode];
      $image=$row[image];
      $reponse_aff=$row[reponse];
      $nbparticip=$row[nbparticip];
      $nbtop=$row[nbtop];
      $mailadmin=$row[mailadmin];
      $mailparticip=$row[mailparticip];
      $adresseadmin=$row[adresseadmin];
      $sujetmail=$row[sujetmail];
      $entetemail=$row[entetemail];
      $hebergeur=$row[hebergeur];
      $categorie=$row[categorie];
      $score=$row[score];
      $cumul=$row[cumul];
      $mono=$row[mono];
      $multi=$row[multi];
      ?>
      0
    2. MisterGreen
       
      j'oubliai pour information, le site est hébergé chez Online.net
      0
  12. Alain_42 Messages postés 5413 Statut Membre 904
     
    et le config_quizz.php ?
    0
    1. MisterGreen
       
      le fichier se nomme configquizz.php
      A l'intérieur, on retrouve


      ?
      //include("configbdd.php");
      $sql="SELECT * FROM quizz_config";
      $res=mysql_db_query($bdd, $sql);

      // Définir les variables de configuration
      $row = @mysql_fetch_Array($res);
      $titre=$row[titre];
      $nbquestion=$row[nbquestion];
      $mode=$row[mode];
      $image=$row[image];
      $reponse_aff=$row[reponse];
      $nbparticip=$row[nbparticip];
      $nbtop=$row[nbtop];
      $mailadmin=$row[mailadmin];
      $mailparticip=$row[mailparticip];
      $adresseadmin=$row[adresseadmin];
      $sujetmail=$row[sujetmail];
      $entetemail=$row[entetemail];
      $hebergeur=$row[hebergeur];
      $categorie=$row[categorie];
      $score=$row[score];
      $cumul=$row[cumul];
      $mono=$row[mono];
      $multi=$row[multi];
      ?>
      0
  13. Alain_42 Messages postés 5413 Statut Membre 904
     
    Ok c'est le fichier qui permet de recuperer les parm de config qui sont stockés dans une table de la BDD

    par contre

    qu'y a-t-il après le else de
    if ($row[0]==$Nom_visiteur){
    print ("Désolé $Nom_visiteur, vous avez déjà participé aujourd'hui, retentez votre chance demain");
    }
    else{


    si tu veux tu m'envoie en MP

    concernant Online.net j'ai jeté un oeil sur leur site

    en php4 Register_global est à on

    en php5 elle est a off, donc tu dois passer surement sur php5
    0
    1. MisterGreen
       
      MP, c'est quoi, message privé ??
      Quelle est la marche à suivre pour MP.

      Comment fait on pour passer en php5.
      J'ai un peu perdu la main c'est dernier temps.

      Je comprends mieux pourquoi tout déconne sur mes script depuis quelques temps.
      Là je regarde de mon côté et la page admin ne fonctionne plus, les données d'administration ne s'enregistrent pas dans la base et donc c'est pour cela que je n'avais pas mes questions affichées après le pseudo
      Mais comme la page admin ne fonctionne plus, je suis en train de le faire directement sur phpmyadmin ce qui contourne le pb mais ne le résous pas
      0
  14. Alain_42 Messages postés 5413 Statut Membre 904
     
    oui MP c'est message privé

    tu cliques sur mon pseudo et la tu as lui ecrire un message

    ça évite de laisser trainer sur le forum des codes un peu "confidentiels"

    dans ton cas il faudrait essayer de forcer ton site à utiliser php4 sur le serveur de online.net

    je vais essayer de voir ça
    0
  15. Alain_42 Messages postés 5413 Statut Membre 904
     
    sur leur site j'ai trouvé ça:

    Online vous propose deux versions de PHP:

    *
    la version 4 qui est utilisée par défaut pour les fichiers nommés .php3 et .php
    *
    la version 5 qui est utilisée par défaut pour les fichiers nommés .php5

    Pour personnaliser la version de php de votre site, il faut placer en racine /www un fichier texte nommé .htaccess comprenant la ligne de commande suivante :

    # Pour faire parser les fichiers ".php" par PHP5
    AddType application/x-httpd-php5 .php


    donc a la lecture de ça tu devrait être en php4 ou alors tu as un fichier .htaccess qui fait la modif vers php5 ?

    pour voir quelle version rajoutes cette ligne

    echo "version de php :".phpversion();

    après
    <?php
    include("../configbdd.php");
    include("../configquizz.php");
    0
    1. MisterGreen1 Messages postés 8 Statut Membre
       
      J'ai donc déjà la modif vers php5.

      Je l'avais mis il y a quelque mois mais impossible de me rappeler pourquoi. Un script qui ne marchait plus mais lequel ?
      0
  16. MisterGreen1 Messages postés 8 Statut Membre
     
    En .htacces, voilà ce que j'ai

    ErrorDocument 404 http://www.riposteverte.com/erreur/index.php

    # Pour faire parser les fichiers ".php" par PHP5
    AddType application/x-httpd-php5 .php
    0
  17. Alain_42 Messages postés 5413 Statut Membre 904
     
    donc tu es bien sur php5
    0
    1. MisterGreen1 Messages postés 8 Statut Membre
       
      Il faut donc que je revienne à du php4 et que j'enleve cela de .htaccess ?
      0
  18. MisterGreen1 Messages postés 8 Statut Membre
     
    Je me rappelle maintenant à quel moment j'ai rajouté

    # Pour faire parser les fichiers ".php" par PHP5
    AddType application/x-httpd-php5 .php

    J'ai un script wanewsletter (pour envoyer en nombre des infos) qui ne marchait plus. Et qui marche avec ce rajout

    Donc si je passe en php5, wanewsletter marche mais le quizz, un formulaire de contact et un un script pour afficher des images en nombre ne marchen plus

    Si je reste en php5, c'est l'inverse, tout fonctionne sauf wanewsletter

    mais j'ai besoin de tous mes scripts

    Aurais tu une idée Alain ?
    0
  19. Alain_42 Messages postés 5413 Statut Membre 904
     
    en revenant au php4 donc en otant la ligne concernée du htaccess ça resoudrait pas mal de problème
    0
    1. MisterGreen1 Messages postés 8 Statut Membre
       
      C'est sur qu'en php4 j'ai plus de script qui fonctionne et un seul qui ne fonctionne pas mais celui ci je l'utilise bcp et j'en ai besoin. Dur dur

      je n'avais pas vu ta réponse en MP
      0
  20. Alain_42 Messages postés 5413 Statut Membre 904
     
    ha ok je suppose que ce script utilise une fonction qui n'existe pas en php4

    si tu retses en php5 pour eviter de rechercher toutes les variables qui coincent tu peux mettre tout au début de chaque page php

    juste après <?php

    extract($_POST,EXTR_OVERWRITE);

    ça fera le boulot automatiquement pour toutes
    0
    1. MisterGreen1 Messages postés 8 Statut Membre
       
      je suis en train de tester.
      je laisse le php5 et je mets extract($_POST,EXTR_OVERWRITE);
      Ca a l'air de régler certains probleme mais peut etre pas tous. Je continue.

      Merci pour tous tes conseils
      0
  21. Alain_42 Messages postés 5413 Statut Membre 904
     
    n'oublies pas de le mettre sur toutes les pages .php
    0
    1. MisterGreen1 Messages postés 8 Statut Membre
       
      A priori, ca régle le pb sur le quizz. C'est le principal
      Ca marche également sur le formulaire de contact
      mais ca ne marche pas sur une petit script pour mettre afficher des vignettes que l'on peut ensuite agrandir
      0
      1. MisterGreen1 Messages postés 8 Statut Membre > MisterGreen1 Messages postés 8 Statut Membre
         
        Ca ne marche pas sur ce script de galerie de photo mais ce n'est pas urgent.
        J'ai enlevé le script et j'affiche les photos autrement. Ca ira pour le moment.
        Je pars en vacances dimanche et je tacherai de régler ce problème à mon retour fin août.

        Merci pour tout à Alain_42

        MisterGreen
        0
    2. mars77
       
      Bonjour,

      Vos messages datent mais j'ai également des pbs avec ce script qui marchait avant . Comment avez vous réglé vos problèmes exactement ? Les variables ne semblent pas passer ds le script de verif
      0