Requete mysql qui s'execute avant l'execution de la page

Requete mysql qui s'execute avant l'execution de la page - PHP - Programmation

Marsh Posté le 08-02-2010 à 11:53:17    

Bonjour,
 
Voici mon problème :
 
Prenons un exemple simple :  
un utilisateur A veut faire une sélection d'objet.
Afin de vérifier qu'il ne possède pas déjà cet objet, je vérifie avec son identifiant "utilisateur A" qu'il ne possède rien sur la base de données.
 

Code :
  1. $obj_a_inserer = "tv";
  2. $identifiant = "utilisateur A";
  3. $tab_id_objet = array();
  4. //Connexion a la BDD
  5. $connexion = mysql_connect($host, $login, $mdp);
  6. mysql_select_db("toto" ); // Sélection de la base mateo21
  7. $resultat = mysql_query("SELECT objet
  8.    FROM test
  9.   WHERE identifiant='$identifiant';" ) or die(mysql_error());
  10. $i = 0;
  11. while($donnees = mysql_fetch_assoc($resultat)){
  12. $tab_id_objet[$i] = $donnees['id_objet'];
  13. $i++;
  14. }
  15. mysql_close();
  16. if (in_array($obj_a_inserer,$tab_id_objet)){
  17. echo "Entre 1".'<br>';
  18. }else{
  19. echo "Entre 2".'<br>';
  20. }


 
Ce code fonctionne très bien !
 
Je veux maintenant insérer la valeur si elle n'existe pas dans la base de données

Code :
  1. $obj_a_inserer = "tv";
  2. $identifiant = "utilisateur A";
  3. $tab_id_objet = array();
  4. //Connexion a la BDD
  5. $connexion = mysql_connect($host, $login, $mdp);
  6. mysql_select_db("toto" ); // Sélection de la base mateo21
  7. $resultat = mysql_query("SELECT objet
  8.    FROM test
  9.   WHERE identifiant='$identifiant';" ) or die(mysql_error());
  10. $i = 0;
  11. while($donnees = mysql_fetch_assoc($resultat)){
  12. $tab_id_objet[$i] = $donnees['id_objet'];
  13. $i++;
  14. }
  15. mysql_close();
  16. if (in_array($obj_a_inserer,$tab_id_objet)){
  17. echo "Entre 1".'<br>';
  18. }else{
  19. echo "Entre 2".'<br>';
  20. $connexion = mysql_connect($host, $login, $mdp);
  21. mysql_select_db("toto" );
  22. mysql_query("INSERT INTO test VALUES ('$identifiant','$obj_a_inserer');" ) or die(mysql_error());
  23. mysql_close();
  24. }


 
C'est la que se pose mon problème, je me retrouve toujours dans la boucle "Entre  1", que l'objet soit ou ne soit pas la base de données...
En plus, l'objet a insérer est bien inséré dans la base de données...
 
On dirait que la requête pour inclure l'objet se fait des le démarrage de la page et qu'ensuite il exécute le contenu de la page.
 
Savez vous d'où peux provenir ce phénomène ?
 
Merci
 
 
 
 

Reply

Marsh Posté le 08-02-2010 à 11:53:17   

Reply

Marsh Posté le 08-02-2010 à 13:29:15    

c'est normal que dans ta requête SQL, le champ dans le select s'appelle "objet" alors que quand tu récupère le résultat, le champ s'appelle "id_objet"?
 
ps : c'est très ballot de fermer et réouvrir ta connexion dans le script. Faut l'ouvrir une fois en début et la fermer à la in du script :/


---------------
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 08-02-2010 à 13:43:39    

Bonjour,
 
Merci pour ta réponse.
 
Pour ta première question, il s'agit juste d'une faute de frappe.
 
Pour ton PS : j'ai tout tester pour savoir d'où ca pouvait venir, d'habitude je ne ferme jamais la connexion avant d'avoir terminer.

Reply

Marsh Posté le 08-02-2010 à 13:49:29    

Tu sais que tu peux ouvrir la connexion mysql au début de la page, et la fermeture se fera toute seule à la fin  ;)  
 
Ensuite tu peux remplacer
 

Code :
  1. $i = 0;
  2. while($donnees = mysql_fetch_assoc($resultat)){
  3. $tab_id_objet[$i] = $donnees['id_objet'];
  4. $i++;
  5. }


 
...par...
 

Code :
  1. while($donnees = mysql_fetch_assoc($resultat)){
  2.     $tab_id_objet[] = $donnees['id_objet'];
  3. }


 
Ensuite, 'id_objet' n'est pas demandé par ta requête SQL, je ne vois pas comment tu peux l'utiliser par la suite  ;)  
 
 
Enfin, tu peux faire tout ca en SQL pur...
 

Code :
  1. SELECT COUNT(id_objet) AS nbre
  2. FROM test
  3. WHERE identifiant='$identifiant'
  4.     AND id_objet='$obj_a_inserer'


 
Ensuite tu récupères la réponse :
 

Code :
  1. $donnees = mysql_fetch_assoc($resultat);
  2. $nombre = $donnees['nbre'];


 
$nombre vaudra soit 0, soit 1 (ou plus s'il y a un problème  :na: ), et tu peux l'utiliser dans tes conditions  ;)


Message édité par Pascal le nain le 08-02-2010 à 14:14:06
Reply

Sujets relatifs:

Leave a Replay

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