Problème de variables. Merci pour votre aide.

Fermé
totorom Messages postés 2 Date d'inscription lundi 17 août 2015 Statut Membre Dernière intervention 17 août 2015 - Modifié par jordane45 le 17/08/2015 à 16:10
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 18 août 2015 à 10:49
Bonjour à tous.

Donc pour ma pars, j'ai eu beau chercher depuis plusieurs jours sur le fofo et sur google, j'ai du mal a trouver pourquoi et comment faire pour que ma requete fonctionne.

Donc je fais actuellement une petite boutique qui vendrait des livres.
D'un côté, j'ai donc le vendeur et de l'autre, l'acheteur.
Côté BDD, j'ai deux tables. Une table membres et une table livre_en_ventes.
Les acheteurs ont la possibilité de voter pour un livre qu'il ont acheté et aimé.

Le problème vient de là.

L'acheteur a donc une page Liste.php où s'affiche la liste des livres qu'il a acheté et aimé/detesté.
Il a donc la possibilité de voter positif si il a aimé le livre, ou de voter négatif si le livre ne lui a pas plus.

En cliquant sur le bouton de vote (positif ou négatif car il y a deux boutons), le traitement renvoi sur le page Liste_votes.php

Sur cette page, il y a 3 requetes qui se suivent Celle-ci s'enregistre bien en base de données :
mysql_query("UPDATE membres set votes_positif_envoyes=votes_positif_envoyes+1 where user='".$_SESSION['user']."'") or die("Erreur 01");

Celle-ci par contre n'enregistre pas du tout :
 mysql_query("UPDATE membres set votes_positif_recus=votes_positif_recus+1 where user='$user_vendeur'") or die("Erreur 02");

Et celle-ci fonctionne impec :
mysql_query("UPDATE livre_en_ventes set vote=1 where id='$id'") or die("Erreur vote positif 1");
 


Je comprends bien que le problème doit provenir de la variable $user_vendeur que je n'arrive pas a implanter sur la page Liste_votes.php, pour que celle-ci fonctionne, mais comment ?

J'ai essayé en faisant des testes en get ou post mais j'ai beaucoup de mal a comprendre ou a trouver le code avec toutes les infos que je trouve à droite ou à gauche sur le web, je me mélange les pinceaux.

Quelqu'un pourrait-il donc me dire ou me donner juste le code pour que ma deuxième requete fonctionne s'il vous plait ?

Merci par avance.

Je mets le code complets des deux fichiers ci-dessous :
page Liste.php
<?
include("config.php");
if (!session_is_registered("password") || !session_is_registered("user"))
{
 header();
 include("fichier_nonconnect.php");
 footer();
}
else
{
    header();
 
?>
<p align="center">
Blabla...
<br>
Merci.</p><br>
<table width="600" style="border:2px solid #4fdcd6; margin:auto; text-align:center;">
<tr style="background:#4fdcd6; font-weight:bold; color:#ffffff;">
  <td>Votre pseudo</td>
  <td>Pseudo du vendeur</td>
  <td>Date d'achat</td>
  <td>Type de livre acheté</td>
  <td>Livre</td>
  <td>Prix de vente</td>
  <td>Votez livre positif</td>
  <td>Votez livre négatif</td>
 </tr>
   <?  
  $exec=mysql_query("select id,id_type,livre,date,heure,user_vendeur,prixdulivre,nom,user_acheteur from livre_en_ventes where user_acheteur='".$_SESSION['user']."' AND vote='0'");
 while ($result = mysql_fetch_array ($exec)) 
 {
 ?> 
        <tr style="background:#ffffff;">
    <td><p><? echo $result['user_acheteur'] ?></p></td>
    <td><p><? echo $result['user_vendeur'] ?></p></td>
          <td><p><? echo $result['date']." à ".substr($result['heure'],0,5) ?></p></td>
          <td><p><? echo $result['nom'] ?></p></td>
    <td><p><? echo $result['livre'] ?></p></td>
    <td><p><? echo $result['prixdulivre'] ?></p></td>
    
    <form name="form1" method="POST" action="Liste_votes.php?act=positif&id=<? echo $result['id']; ?>&user=<? echo $result['user_acheteur']; ?>&vendeur=<? echo $result['user_vendeur']; ?>">
 <td>
       <input type="Submit" name="Submit" value="positif">
    </td>
    </form>
    <form name="form2" method="POST" action="Liste_votes.php?act=negatif&id=<? echo $result['id']; ?>&user=<? echo $result['user_acheteur']; ?>&vendeur=<? echo $result['user_vendeur']; ?>">
         <td>
    <input type="Submit" name="Submit" value="negatif">
    </td>
    </form>
     
        </tr>
        <? 
  }
 
  ?>
</table>
  
 <? 
}
  footer();
?>



Page Liste_votes.php

<?
include ("config.php");

        $Submit = $_POST['Submit'];
        $user_acheteur=$_POST['user_acheteur'];  //On récupère les données envoyées 
        $user_vendeur=$_POST['user_vendeur'];  //On récupère les données envoyées 

  if ($act=="positif")

  {
  
 mysql_query("UPDATE membres set votes_positif_envoyes=votes_positif_envoyes+1 where user='".$_SESSION['user']."'") or die("Erreur 01");
 mysql_query("UPDATE membres set votes_positif_recus=votes_positif_recus+1 where user='$user_vendeur'") or die("Erreur 02");

 mysql_query("UPDATE livre_en_ventes set vote=1 where id='$id'") or die("Erreur vote positif 1");
 
 echo "<p align='center'><strong>Vote <font color='#2d902d'>POSITIF</font> envoyé !<br>
 Merci.<br></strong></p>";
 
 echo"<META HTTP-EQUIV='refresh' CONTENT='5; URL=Liste.php'>";

  }   

if ($act=="negatif")

  {

 mysql_query("UPDATE membres set votes_negatif_envoyes=votes_negatif_envoyes+1 where user='".$_SESSION['user']."'") or die("Erreur 03");
 mysql_query("UPDATE membres set votes_negatif_recus=votes_negatif_recus+1 where user='$user_vendeur'") or die("Erreur 04");

 mysql_query("UPDATE livre_en_ventes set vote=2 where id='$id'") or die("Erreur vote negatif 2");
 
 echo '<p align="center"><strong>Vote <font color="#FF0000">NEGATIF</font> envoyé !<br>
 Merci.<br></strong></p>';
 echo"<META HTTP-EQUIV='refresh' CONTENT='5; URL=Liste.php'>";
  }

?>




EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.

3 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
Modifié par jordane45 le 18/08/2015 à 10:49
Bonjour,

Déjà... il faut récupérer "proprement" les variables AVANT de les utiliser.
Pour se faire.. tu peux utiliser l'écriture TERNAIRE (sorte de IF) et s'assurer que les variables Existent avec la fonction ISSET ou !Empty

ce qui donnerait :
//Récupération des variables
//  $variable = (condition) ? valeur si vraie : valeur si faux ;
$Submit = isset($_POST['Submit'])?$_POST['Submit']:NULL;
$user_acheteur=!empty($_POST['user_acheteur'])? $_POST['user_acheteur'] : NULL;  //On récupère les données envoyées 
$user_vendeur=!empty($_POST['user_vendeur'])?$_POST['user_vendeur']:NULL;  //On récupère les données envoyées 



Ensuite... attention... tu utilises l'ancienne extension mysql. celle-ci est considérée comme obsolète. Je t'invite à passer à la PDO.
Voir ceci : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

Et enfin... il faut que tu ajoutes un peu de debug à ton code.. histoire d'essayer de comprendre où ça bloque.

Par exemple (sans passer à PDO.. ) :

<?php //utilisation de la balise PHP complète au lieu de l'abrégée <?

require_once "config.php";

//Récupération des variables
//  $variable = (condition) ? valeur si vraie : valeur si faux ;
$Submit = isset($_POST['Submit'])?$_POST['Submit']:NULL;
$user_acheteur=!empty($_POST['user_acheteur'])? $_POST['user_acheteur'] : NULL;  //On récupère les données envoyées 
$user_vendeur=!empty($_POST['user_vendeur'])?$_POST['user_vendeur']:NULL;  //On récupère les données envoyées 
$user = !empty($_SESSION['user']) ? $_SESSION['user'] : NULL;

if($Submit){
 //utilisation d'un SWITH au lieu de IF/ELSE..
 switch($act){
 
 case "positif":
   mysql_query("UPDATE membres set votes_positif_envoyes=votes_positif_envoyes+1 where user='".$user."'") or die("Erreur 01");
   mysql_query("UPDATE membres set votes_positif_recus=votes_positif_recus+1 where user='$user_vendeur'") or die("Erreur 02");

   mysql_query("UPDATE livre_en_ventes set vote=1 where id='$id'") or die("Erreur vote positif 1");
   
   echo "<p align='center'><strong>Vote <font color='#2d902d'>POSITIF</font> envoyé !<br>
   Merci.<br></strong></p>";
   
   echo"<META HTTP-EQUIV='refresh' CONTENT='5; URL=Liste.php'>";

 break;
 
 case "negatif":
   mysql_query("UPDATE membres set votes_negatif_envoyes=votes_negatif_envoyes+1 where user='".$user."'") or die("Erreur 03");
    mysql_query("UPDATE membres set votes_negatif_recus=votes_negatif_recus+1 where user='$user_vendeur'") or die("Erreur 04");

    mysql_query("UPDATE livre_en_ventes set vote=2 where id='$id'") or die("Erreur vote negatif 2");
 
    echo '<p align="center"><strong>Vote <font color="#FF0000">NEGATIF</font> envoyé !
        <br> Merci.<br></strong></p>';
    echo"<META HTTP-EQUIV='refresh' CONTENT='5; URL=Liste.php'>";
  break;

  default:
  //aucune valeur correspondante....
  echo "<br> Erreur : variable act inconnue : ".$act; 
  break;
 }//fin du switch   
}else{
 echo "<br> Erreur : la variable submit n'existe pas !<br>";
 echo "<pre>";
 print_r($_POST);
 echo "</pre>";
 
}

?>


Par contre... il y a des variables dans ton code qui sortent de nul part ... $act ... $id ....
D'où viennent-elles ? Comment sont elles initialisées ? (elles viennent de ton fichier config.php ?? )




Cordialement,
Jordane
1
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
17 août 2015 à 16:21
Je vois juste une erreur dans ton code PHP :
<? echo $result['user_acheteur'] ?>

Il doit y avoir un point virgule à la fin, j'ai déjà rencontré des problèmes moi-même à cause de l'utilisationdu <?, à la place mieux vaut utiliser le <?php
<?php echo $result['user_acheteur']; ?>

C'est bête mais peut-être que c'est ça, sinon je vois que tu utilises d'anciennes fonctions mysql_query , elles fonctionnent toujours mais elles sont vieillottes et vont disparaitre dans quelques années, elles ont été remplacées par mysqli_query. Il y a juste un i à rajouter.
0
totorom Messages postés 2 Date d'inscription lundi 17 août 2015 Statut Membre Dernière intervention 17 août 2015
17 août 2015 à 18:30
Merci geekat pour ton idée, mais non ça ne fonctionne toujours pas.

En faite lorsque l'acheteur clic sur la note "positif" ou "négatif", le lien du navigateur donne bien l'url avec l'id , l'user_acheteur et l'user_vendeur, mais lorsque ça arrive sur la page Liste_votes.php pour executer les requêtes, seules la ligne 28 et 31 fonctionnent et s'enregistrent bien.
Pas l'update avec $user_vendeur.

Donc j'ai bien le livre qui est noté dans la table livre_en_ventes, j'ai bien la note+1 pour l'acheteur, celui qui donne la note positive ou négative, mais le vendeur n'a rien du tout.Pas de note.

Donc le problème provient en toute logique de ma variable $user_vendeur je pense.
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
18 août 2015 à 09:40
Et quand tu affiches la variable $user_vendeur ça donne quoi ?
0