Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/02/2010, 11h53   #1 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2006
Messages: 200
Par défaut Requete mysql qui s'execute avant l'execution de la page

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 :
 
$obj_a_inserer = "tv";
$identifiant = "utilisateur A";
$tab_id_objet = array();
 
 
//Connexion a la BDD
$connexion = mysql_connect($host, $login, $mdp);
mysql_select_db("toto"); // Sélection de la base mateo21
 
$resultat = mysql_query("SELECT objet
 			FROM test
			WHERE identifiant='$identifiant';") or die(mysql_error());
			
$i = 0;
while($donnees = mysql_fetch_assoc($resultat)){
	$tab_id_objet[$i] = $donnees['id_objet'];
	$i++;
}
mysql_close();
 
if (in_array($obj_a_inserer,$tab_id_objet)){
	echo "Entre 1".'<br>';
}else{
	echo "Entre 2".'<br>';
}
 
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 :
 
 
$obj_a_inserer = "tv";
$identifiant = "utilisateur A";
$tab_id_objet = array();
 
 
//Connexion a la BDD
$connexion = mysql_connect($host, $login, $mdp);
mysql_select_db("toto"); // Sélection de la base mateo21
 
$resultat = mysql_query("SELECT objet
 			FROM test
			WHERE identifiant='$identifiant';") or die(mysql_error());
			
$i = 0;
while($donnees = mysql_fetch_assoc($resultat)){
	$tab_id_objet[$i] = $donnees['id_objet'];
	$i++;
}
mysql_close();
 
if (in_array($obj_a_inserer,$tab_id_objet)){
	echo "Entre 1".'<br>';
}else{
	echo "Entre 2".'<br>';
	$connexion = mysql_connect($host, $login, $mdp);
	mysql_select_db("toto");
	mysql_query("INSERT INTO test VALUES ('$identifiant','$obj_a_inserer');") or die(mysql_error());
	mysql_close();
}
 
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
johnson95 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 12h07   #2 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 911
Par défaut

Sur d'anciennes version de firefox, des liens HTML vides (par exemple link="" ou dans un css background-url("ta_page.php") ) provoque un double appel de la page et donc un double traitement.

Au passage :
- ton $i ne sert à rien :
Code :
 
while($donnees = mysql_fetch_assoc($resultat)){
	$tab_id_objet[] = $donnees['id_objet'];
}
 
- il ne sert a rien de fermer la connexion si c'est pour la ré-ouvrir quelques lignes plus bas.
sabotage est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 13h23   #3 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2006
Messages: 200
Par défaut

Merci pour ta réponse.

Sur ma page, il n'y a que le code que je vous ai mit.
Ma version de firefox est la 3.6

Concernant tes remarques, j'en prend note. Merci !!

Avez vous d'autre solution a me proposer ?
johnson95 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 13h55   #4 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 911
Par défaut

Citation:
Sur ma page, il n'y a que le code que je vous ai mit.
tu n'as pas de HTML ?
sabotage est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 14h15   #5 (permalink)
Membre Confirmé
 
Date d'inscription: juin 2006
Messages: 200
Par défaut

Que j'en mettent ou pas rien ne change.
johnson95 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 14h42   #6 (permalink)
Modérateur
 
Avatar de sabotage
 
Date d'inscription: juillet 2005
Messages: 9 911
Par défaut

tu devrais faire un debug en retirant l'insert.
ca te permettra de mieux enqueter sur ton cas
Citation:
je me retrouve toujours dans la boucle "Entre 1", que l'objet soit ou ne soit pas la base de données...
sabotage est actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h29.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.