Requête : tout ce qui ne concerne pas...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête : tout ce qui ne concerne pas...

Re: Requête : tout ce qui ne concerne pas...

par Megadeth » 05 févr. 2010, 01:32

Bonsoir,

Ok, donc imaginons le cas suivant :
Je fais parti d'un club de foot.
Ce club organise des tournois.
Plusieurs équipes de mon club peuvent se rendre à un tournoi.
Un joueur peut faire parti de plusieurs équipes pour le même tournoi pour aider l'équipe B si nécessaire.
Quand je m'inscris en ligne, il faut que le tout reste cohérent.
J'arrive à gérer pas mal de choses. Le souci est que je dois historiser également les inscriptions donc je peux pas déleter à tout va donc j'ai géré ça en 2 tables. L'autre souci c'est qu'il faut faire le distingo en l'équipe A et l'équipe B.
L'autre hic : si je me désinscris à la dernière minute du tournoi, je dois supprimer les lignes relatives au dit tournoi mais pas le reste.
Par défaut, quand je m'inscris, je dois toujours être dans l'équipe A.
Est-ce plus clair comme énoncé ?

Phpïquement,

Mega
;)

Re: Requête : tout ce qui ne concerne pas...

par AB » 20 janv. 2010, 15:35

Si c'est pas le cas, pour qu'on puisse t'aider il faudrait être plus clair.
Avec simplement du code on ne peut pas t'aider car on ne sait pas si le code est adapté à tes besoins ou non.

Donc pour qu'on puisse te donner des conseils pertinents pour ton algo, il ne faut pas nous écrire des choses "En gros" mais très en détails.
D'ailleurs souvent, ce simple exercice d'écrire (et pas simplement d'y penser) en détails le principe de fonctionnement permet de résoudre beaucoup de pb.

Re: Requête : tout ce qui ne concerne pas...

par Megadeth » 20 janv. 2010, 15:17

C'est moi qui avait mis résolu ? Car c'est pas le cas :roll:

Re: Requête : tout ce qui ne concerne pas...

par Megadeth » 12 janv. 2010, 02:30

Oui AB, tu as raison, c'est tellement tordu que je finis par m'embrouiller...

En gros je dois faire un delta entre des choses cochées et d'autres non cochées. Si l'enregistrement existe, il doit garder ces mêmes valeurs, je ne dois pas l'ajouter puisque déjà présent, mais que dans un cas de figure bref le truc bien chiant ^^.

Pour garder les infos, j'ai créé un tableau temporaire mais le problème c'est que je me base forcément sur des données existantes en base avant suppression et quand je réinjecte mes données, une ligne qui était bonne jadis ne l'est plus forcément sauf qu'elle apparaît. Je sais pas si je suis clair. Je ne vois pas comment faire mon algo #-o

J'pense pourtant plus être très loin. Bizarre, j'ai déjà entendu ça. C'est p'tet parce ce que j'chui persuadé que c'est la bonne à chaque fois :lol:

Mega
;)

Re: Requête : tout ce qui ne concerne pas...

par AB » 10 janv. 2010, 22:17

Merci pour ce nouvel apport. Ce bout de code semble fonctionner en effet.

Par contre, j'ai l'impression que mon problème n'a pas de solution grrrrr #-o

Impossible de savoir pourquoi :
}else{
				while($rows4 = mysql_fetch_array($r4)){
					
					$ligne_affectee = $rows4["id"]; //renvoie quelque chose ex : 3
	
					$not_in = array();

					foreach ($ligne_affectee as $valeur){
               			        array_push($not_in,$valeur);
          				}

					$q6 = "DELETE from ma_table WHERE id_personne = '".$_SESSION["id"]."' AND id_ligne NOT IN ('".implode("','",$not_in)."')"; 
					
Ca reste vide entre les () du NOT IN :cry:

Mega
Faut pas mettre l'initialisation de ton tableau dans la boucle sinon tu le réinitialise (donc tu l'efface) à chaque passage dans la boucle.
Et puis pourquoi ce foreach ?

Re: Requête : tout ce qui ne concerne pas...

par Megadeth » 10 janv. 2010, 21:36

Merci pour ce nouvel apport. Ce bout de code semble fonctionner en effet.

Par contre, j'ai l'impression que mon problème n'a pas de solution grrrrr #-o

Impossible de savoir pourquoi :
}else{
				while($rows4 = mysql_fetch_array($r4)){
					
					$ligne_affectee = $rows4["id"]; //renvoie quelque chose ex : 3
	
					$not_in = array();

					foreach ($ligne_affectee as $valeur){
               			        array_push($not_in,$valeur);
          				}

					$q6 = "DELETE from ma_table WHERE id_personne = '".$_SESSION["id"]."' AND id_ligne NOT IN ('".implode("','",$not_in)."')"; 
					
Ca reste vide entre les () du NOT IN :cry:

Mega

Re: Requête : tout ce qui ne concerne pas...

par Berzemus » 10 janv. 2010, 13:10

Dans ce genre de cas de figure, le plus propre est d'utiliser un implode:
$not_in = array();
foreach ($ligne as $valeur)
          { 
               array_push($not_in,$valeur);
          }

$requete = "DELETE from matable WHERE id_personne = '".$_SESSION["id"]."' AND id_ligne NOT IN ('".implode("','",$not_in)."')"; 
Juste en passant :mrgreen:

Re: Requête : tout ce qui ne concerne pas...

par Megadeth » 10 janv. 2010, 00:43

PERFECT, même si c'est pas encore ça (mais c'est pas lié à ça), ça marche mieux :)

MERCI A VOUS 2 !!!

Mega
;)

Re: Requête : tout ce qui ne concerne pas...

par Yosh » 07 janv. 2010, 12:32

c'est pas faux ^^

Re: Requête : tout ce qui ne concerne pas...

par Sodams » 07 janv. 2010, 10:34

Ce n'est pas la virgule de trop qui pose problème vu qu'il ajoute un '0').

Le soucis est le suivant, il créer une variable $requete, puis il veux la complèter, mais au lieu de faire $requete .=, il fais echo.
$requete = "DELETE from matable WHERE id_personne = '".$_SESSION["id"]."' AND id_ligne NOT IN ("; 
     foreach ($ligne as $index => $valeur)
          { 
               $requete.= "'".$valeur."',"; // AND NOT echo "'".$valeur."',"; 
          } 
     $requete. = "'0');"; //pour boucler la boucle

Re: Requête : tout ce qui ne concerne pas...

par Yosh » 07 janv. 2010, 10:31

Hello,

Tu a un problème d'algo.

Lorsque tu fait
foreach ($ligne as $index => $valeur) {
    echo "'".$valeur."',";
}
     
Il y a forcément une virgule de trop à la fin.

Ce que je te conseille de faire, c'est d'une part de vérifier qu'il y a bien des lignes pour ne pas te retrouver avec une syntaxe du type
AND id_ligne NOT IN ()
Ensuite, il te faut supprimer la dernière virgule s'il ya des lignes.

Donc pour résumé, je ferais;
if(count($ligne)) {
		$str_id_ligne = "";
		foreach ($ligne as $index => $valeur) {
			$str_id_ligne .= ($str_id_ligne=="")?$valeur:",".$valeur;
		}
                //un petit echo pour voir ta chaine
		echo $str_id_ligne;
	}
Donc ça, c'est simplement la construction de la chaine, je te laisse l'adapter à ton code et surtout à la création dynamique de te requête.

Requête : tout ce qui ne concerne pas...

par Megadeth » 07 janv. 2010, 00:44

Bonsoir et meilleurs voeux à toutes et à tous !!!

J'avais ouvert ce topic fin novembre puis suite au hackage du forum avais mis mon souci en stand by en attendant des jours plus radieux pour tous ;)

Voilà je sais que ce que je cherche à faire est intimement lié au sql mais j'appelle des fonctions PHP donc...

Je cherche désespérément à identifier des enregistrements qui ne sont pas concernés par une requête, tout ce qui ne rentre pas dans un cas de figure.

Mon code est le suivant :
$requete = "DELETE from matable WHERE id_personne = '".$_SESSION["id"]."' AND id_ligne NOT IN ("; 
     foreach ($ligne as $index => $valeur)
          { 
               echo "'".$valeur."',"; 
          } 
     echo "'0');"; //pour boucler la boucle
C'est un traitement tellement tordu que je ne sais pas si c'est ma syntaxe qui ne va pas ou l'algo.

Merci à vous et encore bonne année !

PHPïquement,

Mega
;)