[Réglé] [resolu] DELETE FROM, WHERE, AND + pb de requetes

Forum de développements privés.

Modérateur: Equipe

Règles du forum
A lire impérativement sur notre page : Règlement

[Réglé] [resolu] DELETE FROM, WHERE, AND + pb de requetes

Messagepar Alcazarfr » 24 Oct 2004 à 17:15

Sur un de mes mods, j'ai une fonction qui permet de quitter une partie.

J'ai modifié et optimisé le code de mes pages, j'ai du modifier le code, qui n'était plus valable, qui permettait de quitter la partie.

Ce qui me donne:

Code: Tout sélectionner
	$sql = "DELETE FROM " . PARTIE_JOUEUR_TABLE . " 
		WHERE id_partie = $id
		AND id_joueur = " . $userdata['user_id'];

	if ( !($result = $db->sql_query($sql)) )
	{
			message_die(GENERAL_ERROR, 'MArches pas...', '', __LINE__, __FILE__, $sql);
	}


La table en question est constitué de 4 valeurs, dont" aucune ne sont primaires", ce qui empecherait mon mod de fonctionner...

NB:le nom de table, de variable, etc sont corrects, et renvoie aux bonnes valeurs (tests nombreux...).

:roll: :oops: :x 8O
NB2: Je ne sais pas si le codage est bon (syntaxe), mais il me faut absolument ces 2 conditons...

NB 54611265: A quoi correspond EXACTEMENT, le IN (...) dans:
Code: Tout sélectionner
	$sql_in .= ( ( $sql_in != '' ) ? ', ' : '' ) . intval($id);

	$sql = "DELETE FROM " . PARTIE_JOUEUR_TABLE . " 
		WHERE id_partie IN ($sql_in) ";
??? (outre qu'il supprimes alors tous les champs dont le id_partie est égal à la vairable $id ?
Modifié en dernier par Alcazarfr le 26 Oct 2004 à 11:36, modifié 2 fois.
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Alcazarfr » 25 Oct 2004 à 10:12

Je sais que la durée des UP est de 24 heures, mais j'aimerais juste savoir si le code:

Code: Tout sélectionner
   $sql = "DELETE FROM " . PARTIE_JOUEUR_TABLE . "
      WHERE id_partie = $id
      AND id_joueur = " . $userdata['user_id'];

   if ( !($result = $db->sql_query($sql)) )
   {
         message_die(GENERAL_ERROR, 'MArches pas...', '', __LINE__, __FILE__, $sql);
   }


est correct... :oops:
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Ani' » 25 Oct 2004 à 10:19

Oui ça c'est correct, bien que dans
Code: Tout sélectionner
if ( !($result = $db->sql_query($sql)) )
tu rajoutes des parenthèses inutiles >>
Code: Tout sélectionner
if ( !$result = $db->sql_query($sql) )
suffit... le reste est bon (à priori, sans connaitre tes tables...)

++
----
Avatar de l’utilisateur
Ani'
Dieu des floodeurs
Dieu des floodeurs
 
Messages: 6055
Enregistré le: 01 Juin 2003 à 00:07
Localisation: 127.0.0.1

Messagepar Alcazarfr » 25 Oct 2004 à 10:40

ok....

merci....


Il ne me reste plus qu'a reprovoquer des erreurs.... :cry:
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 25 Oct 2004 à 15:32

Code: Tout sélectionner
SELECT * FROM phpbb_users WHERE user_id = 1 OR user_id = 2 OR user_id = 7 OR user_id = 9 OR user_id = 85;

correspond à
Code: Tout sélectionner
SELECT * FROM phpbb_users WHERE user_id IN(1,2,7,9,85);

en terme de résultat.

Il est conseillé d'utiliser le IN() pour plusieurs valeurs pour des questions d'optimisation des scripts (niveau rapidité de la requète) et aussi des questions lisibilité et de compréhension.
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 25 Oct 2004 à 16:23

ok.

MErci beaucoup pour l'explication.

PS: Tu comfirme que mon code est bon.?
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 25 Oct 2004 à 17:18

Quel code?
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 25 Oct 2004 à 17:26

Celui ci:

Code: Tout sélectionner
   $sql = "DELETE FROM " . PARTIE_JOUEUR_TABLE . "
      WHERE id_partie = $id
      AND id_joueur = " . $userdata['user_id'];

   if ( !($result = $db->sql_query($sql)) )
   {
         message_die(GENERAL_ERROR, 'MArches pas...', '', __LINE__, __FILE__, $sql);
   }





----------------------


Autre pb... (je vais pas crééer un autre sujet, tout de même...)

J'ai un ptit problème dans ce bout de code (vitale):


Code: Tout sélectionner
			$sql = "SELECT solde
				FROM " . PARTIE_JOUEUR_TABLE . "
				WHERE id_partie = $id
					AND id_joueur = " . $userdata['user_id'] . "
					AND numero_joueur = $tour_j";
			if( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Flute de zut...", "", __LINE__, __FILE__, $sql);
			}
			$row = $db->sql_fetchrow($result);

			$solde = $row['solde'];
			if ( $solde == '' )
			{
				message_die(GENERAL_ERROR, "Flute de zut...", "", __LINE__, __FILE__, $sql);
			}


Je dois donc selectionner la valeur solde, pour id_partie = $id, id_joueur = " . $userdata['user_id'] . " et numero_joueur = $tour_j".

La valeur solde est égale à 50000 ( != 0 ...)
et pourtant, cela me renvoie:
Code: Tout sélectionner
Ereur truc mubhe...
SELECT solde FROM phpbb_monopoly_partie_joueur WHERE id_partie = 4 AND id_joueur = 16 AND numero_joueur = 4 


Les valeurs des variables sont bonnes, pourtant, $solde n'a pas la bonne valeur...

Est ce que cela provinedrait du faite que plus haut, j'ai déjà utilisé $solde = $row['solde']; ???

(a savoir ici, pour une boucle)

Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username
	FROM " . USERS_TABLE . " u, " . PARTIE_JOUEUR_TABLE . " mj
	WHERE mj.id_partie = $id
		AND u.user_id = mj.id_joueur
	ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{
		if ( $i < count($row ) )
		{
			$virgule_ou_point = ',';
		}
		else
		{
			$virgule_ou_point = '.';
		}

		$user_id = $row['user_id'];
		$numero_joueur = $row['numero_joueur'];

		if ( $row['numero_joueur'] > 1)
		{
		$template->assign_block_vars('joueurs', array(
			'NOMS_JOUEURS' => $row['username'],
			'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$user_id"),
			'NUMERO_JOUEUR' => $numero_joueur,
			'VIRGULE_OU_POINT' => $virgule_ou_point)
		);
		}
	
		if ( $tour > 0)
		{
		$template->assign_block_vars('partie_commencee.joueurs', array(
			'NOMS_JOUEURS' => $row['username'],
			'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$user_id"),
			'NUMERO_JOUEUR' => $row['numero_joueur'],
			'SOLDES_JOUEURS' => $row['solde'],
			'LIEUX_JOUEURS' => $row['lieu'],
			'VIRGULE_OU_POINT' => $virgule_ou_point)
			);
		}


		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}



quelqun a t'il une idée? c'est assez important...
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 25 Oct 2004 à 17:41

Le problème c'est que tu n'es pas clair du tout :roll:

Tu as quoi? un BUG mysql? Si c'est le acs il serait peut être judicieux de nous le donner el bug en question, sinon qu'est ce que tu souhaiterais avoir ety que tu n'obiens pas?
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 25 Oct 2004 à 17:56

...

Reprenons.

Je souhaites extraire une variable $solde d'un champ solde d'une table PARTIE_JOUEUR_TABLE .

Ce qui me donne:

Code: Tout sélectionner
			$sql = "SELECT solde
				FROM " . PARTIE_JOUEUR_TABLE . "
				WHERE id_partie = $id
					AND id_joueur = " . $userdata['user_id'] . "
					AND numero_joueur = $tour_j";
			if( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Flute de zut...", "", __LINE__, __FILE__, $sql);
			}


Les conditions et le reste est bon. la valuer pour "solde" devrait être 50000.



Ensuite, mon code est:

Code: Tout sélectionner
			$row = $db->sql_fetchrow($result);

			$solde = $row['solde'];


Et là, la valeur $solde est nulle. (je l'ai vérifié plein de fois...)


C'est donc la que je me souviens que j'ai déjà utilisé $row['solde'], plus haut, et dans une boucle (qui marche). Le code de cette boucle est:

Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username
	FROM " . USERS_TABLE . " u, " . PARTIE_JOUEUR_TABLE . " mj
	WHERE mj.id_partie = $id
		AND u.user_id = mj.id_joueur
	ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{

		$user_id = $row['user_id'];
		$numero_joueur = $row['numero_joueur'];

		$template->assign_block_vars('partie_commencee.joueurs', array(
			'NOMS_JOUEURS' => $row['username'],
			'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$user_id"),
			'NUMERO_JOUEUR' => $row['numero_joueur'],
			'SOLDES_JOUEURS' => $row['solde'],
			'LIEUX_JOUEURS' => $row['lieu'],
			'VIRGULE_OU_POINT' => $virgule_ou_point)
			);



		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}


Et donc ma question: Pourquoi la valeur de $solde n'est pas la bonne, et y a t'il une interférance entre les variables?


PS: Plus clair, je peux pas...
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 25 Oct 2004 à 18:41

Code: Tout sélectionner
$row = $db->sql_fetchrow($result); 

Encore faut il que ton $result existe :mrgreen:

regarde bien
Code: Tout sélectionner
         $sql = "SELECT solde
            FROM " . PARTIE_JOUEUR_TABLE . "
            WHERE id_partie = $id
               AND id_joueur = " . $userdata['user_id'] . "
               AND numero_joueur = $tour_j";
         if( !$db->sql_query($sql) )
         {
            message_die(GENERAL_ERROR, "Flute de zut...", "", __LINE__, __FILE__, $sql);
         } 

tu a sjustement oublié ce $result ;)
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 25 Oct 2004 à 19:01

lol.

C'était un test!!!!!!
J'avais fait exprès de faire cette erreur pour voir si l'équipe des mods était à niveau :wink:


...


Plus serieusement, j'hesite à lancer mon PC par la fenêtre, ou à me lancer par la fenêtre. :roll:

En tout cas, tu m'as enlevé une énorme épine du pied sur ce coup. Merci.
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22


Retourner vers Développements privés

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité