[résolu] Problème de récupération d'une valeur en BDD

Problème de récupération d'une valeur en BDD [résolu] - PHP - Programmation

Marsh Posté le 29-04-2015 à 11:02:07    

Bonjour,
 
J'ai un soucis, je souhaite afficher sur mon site ( pour la gestion des avis ) la possibilité de modifié le statut d'un commentaire que si celui-ci a un statut différent de 0.
 
Je n'arrive pas à récupérer la valeur 0 dans la BDD. A chaque fois que je fais une requête pour lui demander si la valeur est 0 ou 1, il me retourne 1 constamment.
 
Je les ai les bases de la programmation, Mr Google ne m'a pas donné la réponse attendu.
 
Ne faites pas attention aux problèmes de sécurité que pourrait rencontrer mon code. Il a pour but de créer un site pour la validation d'un diplôme. La partie sécurité je l'apprendrai en entreprise ( formation courte et donc je ne peux pas tout apprendre ).
 
 
 

Code :
  1. <?php
  2. require_once("../inc/init.inc.php" );
  3. require_once('../inc/haut_de_site.inc.php');
  4. include("../inc/menu.inc.php" );
  5. if(!utilisateurEstConnecteEtAdmin())
  6. {
  7. header("location:../connexion.php" ); //redirection pour tous les membres qui ne sont pas administrateurs (donc tous les autres connectés dont la statut est égal à 0 mais aussi les simples visiteurs !!). Seuls les membres ayant un statut == 1 ont accès à cette page. Cf. BDD
  8.   exit(); //permet de stopper l'éxécution du script
  9. }
  10. if(utilisateurEstConnecteEtAdmin() && isset($_GET['action']) && $_GET['action'] == 'deconnexion')
  11. {
  12.  session_destroy();
  13.  header("location:" . RACINE_SITE . "connexion.php" );
  14. }
  15. //ici c'est le BACKOFFICE : donc restreindre l'accès à cette partie. Uniquement visible pour l'administrateur :  
  16. if(isset($_GET['action']) && $_GET['action'] == "suppression" )
  17. {
  18. executeRequete("DELETE FROM avis WHERE id_avis = $_GET[id_avis]" );
  19. }
  20. if(isset($_GET['action']) && $_GET['action'] == "moderation" )
  21. {
  22. executeRequete("UPDATE avis SET statut=1 WHERE id_avis = $_GET[id_avis]" );
  23. }
  24. echo '<div>
  25. <h1> Liste des commentaires</h1>';
  26. $resultat = executeRequete("SELECT * FROM avis" );
  27. $reqPublication = executeRequete("SELECT statut FROM avis" );                                                                                 // Le problème se situe soit ici
  28. $publication = $reqPublication->fetch_assoc();                                                                                                      // Soit là ...
  29. echo "Nombre de commentaire(s) : " . $resultat->num_rows;
  30. $nbcol = $resultat->field_count;
  31. echo "<table style='border-color:red' border=10> <tr>";
  32. for ($i=0; $i < $nbcol; $i++)
  33. {   
  34.  $colonne = $resultat->fetch_field();
  35.  echo '<th>' . $colonne->name . '</th>';
  36. }
  37. echo "<th></th>";
  38. echo "</tr>";
  39. while ($ligne = $resultat->fetch_assoc())
  40.   { 
  41. //crée-moi autant de lignes <tr> qu'il y a de résultats dans la BDD (utilisation de fecth_assoc() qui nous ressort les informations d'array(). Donc récupération par l'intermédiaire d'une boucle foreach()
  42.  echo '<tr>';
  43.  foreach ($ligne as $indice => $information)
  44.     //on récupère les indices et à les informations. Exemple : $article['id_article'] = 1
  45.  {
  46.    echo "<td>" . $information . "</td>";
  47.  }
  48. if( $publication == 1){
  49.  echo '<td><p>Publié</p></td>';
  50. }
  51. else{
  52.  echo '<td><a href="?action=moderation&id_avis=' . $ligne['id_avis'] .'" OnClick="return(confirm(\'Voulez-vous publier ce commentaire ?\'));"><img src="'. RACINE_SITE . 'photo/check.png" alt="" title="Publier le commentaire"></a></td>';
  53. }
  54.  echo '<td><a href="?action=suppression&id_avis=' . $ligne['id_avis'] .'" OnClick="return(confirm(\'En êtes vous certain ?\'));"><img src="'. RACINE_SITE . 'photo/suppr.png" alt="" title="Supprimer ce commentaire"></a></td>';
  55.  echo '</tr>';
  56. }
  57. echo '</table>';
  58. echo "</div>";


Message édité par chrispc le 06-05-2015 à 15:51:04
Reply

Marsh Posté le 29-04-2015 à 11:02:07   

Reply

Marsh Posté le 29-04-2015 à 14:17:09    

$resultat = executeRequete("SELECT * FROM avis" );
$reqPublication = executeRequete("SELECT statut FROM avis" );
 
-> c'est n'importe quoi :pfff: Déjà parce qu'il ne faut jamais mettre * dans un select, et parce que la première requête ramenant tous les champs de la table AVIS, tu ramènes de fait le champ statut.
 
if( $publication == 1)
-> j'ai de gros doutes que ça marche vu que $publication = $reqPublication->fetch_assoc(); fait que $publication est un array et non un entier. :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-04-2015 à 15:42:18    

Pour sélectionner tous les champs de la BDD pour en faire un tableau c'est le plus simple plutôt que tout réécrire.  
Du moins on nous a apprit comme ça et j'ai jamais eu de soucis pour le moment.
 
Après pour ce qui est de la suite, je cherche juste à afficher le publié si le statut =1 et le l'icone de validation si le statut = 0.
 
Je dois faire comment pour qu'il me le prenne pour un entier et pas un array ?


---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Marsh Posté le 29-04-2015 à 16:19:36    

Faire 2 requête consécutive dans la base de donnée ça a un coup en terme de performance et ça ne sert à rien puicqu'avec * tu as déjà récupérer ta colonne statut.
 
Avec fetch_assoc tu récupères un tableau indexe clé => valeur donc ton statut est dans $publication['statut'].
 
Je t'encourages à relire ton cour et/ou des tutos ainsi que la doc php quitte à regarder chaque fonction (ce qu'elle prennent en paramètre, ce qu'elle renvoie comme valeur), car tu as l'air un peu perdu, mais c'est normal, on a tous commencé un jour... ^^


---------------
D3
Reply

Marsh Posté le 29-04-2015 à 16:29:36    

A vrai dire si je suis perdu c'est que je dois faire 2 sites e-commerce en 4 mois, avec seulement 2 semaines de cours PHP :D !


---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Marsh Posté le 29-04-2015 à 16:35:29    

Honnêtement, vu ton niveau actuel tourne toit vers des solutions toutes faites (Magento, Prestashop, CMS + plugin) car la tache est énorme est un site d'e-commerce se  doit d'être solide au niveau de la sécurité (injection SQL, paiement CB, etc.).
Je ne voudrais pas te décourager mais ce n'est pas approprié de commencer par là...


---------------
D3
Reply

Marsh Posté le 29-04-2015 à 17:00:41    

Ah bah je peux pas, on est 20 dans la même galère et on a interdiction d'utiliser des CMS.
 
A vrai dire ma formation c'est 4 mois de cours intensif où on voit JS, PHP, MySQL, HTML / CSS, XML, CMS Wordpress, Drupal et 4 mois de stage.
 
Le diplome on l'aura uniquement si on code tout en dur, à la main. Les bouquins sont là, la communauté est là ( normalement ) alors ils considèrent que c'est faisable ! Seul problème durant mon stage je n'apprendrai qu'à faire du CMS et de la mise en page de newsletter.  
 
Tout le monde m'a dit que maintenant on ne code plus vraiment mais le but de la formation c'est de tout développer soi-même en utilisant des frameworks si on veut.  
 
Donc si tu as la réponse, ça m'aiderai parce que je bloque alors que je suis sur que c'est tout con en plus ...


---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Marsh Posté le 29-04-2015 à 20:40:50    

Epitech ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-04-2015 à 21:15:28    

Ifocop.
 
Bref, je suis pas là pour raconter ma vie  ^^
 
Personne pour m'aider que je puisse avancer plus rapidement ?


---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Marsh Posté le 30-04-2015 à 09:19:36    

Non mais là on parle de la base de la base... :- /
Si tu récupères 1 c'est que tu te contentes de vérifier le 1er enregistrement retourné, normalement il faut faire une boucle du type :

Code :
  1. while($row = mysql_fetch_assoc($res)) {
  2.    echo $row['statut'].' / ';
  3. }


Si tu as plus d'1 lignes dans ta base et que certain statut sont a zero, ben tu le verras, regarde ta boucle ligne 45 et demande toi pourquoi tu regardes si tu check publié pou pas en dehors de cette boucle...


---------------
D3
Reply

Marsh Posté le 30-04-2015 à 09:19:36   

Reply

Marsh Posté le 30-04-2015 à 10:22:03    

chrispc a écrit :

Ifocop.
 
Bref, je suis pas là pour raconter ma vie  ^^
 
Personne pour m'aider que je puisse avancer plus rapidement ?


Tu relis mon premier post, tu va y trouver la cause de ton pb. Et comme conseillé, relis la doc aussi pour savoir ce que fait chaque fonction car effectivement, tu ne maîtrises pas toutes les bases du php et de l'accès à une BD.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-04-2015 à 10:43:19    

Merci mechkurt, j'ai trouvé mon erreur et maintenant je saurai comment reprendre des données int dans la BDD.
 
Je relirais la doc rufo t'en fais pas, je m'aide d'elle constamment pour développer mais je n'ai pas encore le réflexe de regarder les valeurs retourner par telle ou telle fonction.
 
Et comme je disais, c'était bien un truc tout con mais que j'ai oublié ...
 
Merci à vous deux =)


Message édité par chrispc le 30-04-2015 à 12:16:30

---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Sujets relatifs:

Leave a Replay

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