Le premier enregistrement de ma table n'est pas traité par les requêtes???

Eléphant du PHP | 58 Messages

14 juin 2008, 08:43

Salut à tous,

Mon problème est simple... je n'arrive jamais à supprimer avec ce code le premier enregistrement de ma table..???? s'il y en a plusieurs alors ils sont traités mais jamais le premier....

On dirait que mon fetch array débute avec un index à 1 au lieu de 0.... pourtant en posant la requête directement sous Mysql (SELECT PSEUDO FROM membresconnectes), l'enregistrement s'affiche.

Mystère? une petite idée?
					//requete de depassement de temps de session( 3 minutes) avec suppression de ceux dont la session à expirée
					$dureede30min=time() - (60);
					echo $dureede30min;
					$rq="SELECT PSEUDO FROM membresconnectes WHERE TIMESTAMP<'$dureede30min'";
					$resultat=mysql_query($rq) or die(mysql_error());
					$donnees = mysql_fetch_array($resultat);
					//SUPPRESSION de la SESSION avec deconnection de ce membres
					while ($donnees = mysql_fetch_array($resultat))
					{
						echo "suppression du membres pour session expirée";
						$nom=$donnees['PSEUDO'];
						mysql_query("DELETE FROM membresconnectes WHERE PSEUDO='$nom'");
						
						}
					}

La TABLE sous MySQL à tout hasard

Code : Tout sélectionner

-- Structure de la table `membresconnectes` -- CREATE TABLE `membresconnectes` ( `ID` mediumint(9) NOT NULL auto_increment, `IP` text NOT NULL, `PSEUDO` text NOT NULL, `TIMESTAMP` int(6) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; -- -- Contenu de la table `membresconnectes` -- INSERT INTO `membresconnectes` (`ID`, `IP`, `PSEUDO`, `TIMESTAMP`) VALUES (12, '123', 'SpEcCy', 1213425017);

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2008, 09:36

C'est normal cher speccy, tu as une ligne de trop qui fait un mysql_fetch_array($resultat) avant la boucle while.

Il faut virer cette ligne car elle lit le premier enregistrement pour des prunes. Ton while est suffisant car il fait la lecture mysql_fetch_array()

Correction:
//requete de depassement de temps de session( 3 minutes) avec suppression de ceux dont la session à expirée
                    $dureede30min=time() - (60);
                    echo $dureede30min;
                    $rq="SELECT PSEUDO FROM membresconnectes WHERE TIMESTAMP<'$dureede30min'";
                    $resultat=mysql_query($rq) or die(mysql_error());
                    //
                    //SUPPRESSION de la SESSION avec deconnection de ce membres
                    while ($donnees = mysql_fetch_array($resultat))
                    {
                        echo "suppression du membres pour session expirée";
                        $nom=$donnees['PSEUDO'];
                        mysql_query("DELETE FROM membresconnectes WHERE PSEUDO='$nom'");
                        
                        }
                    }
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 juin 2008, 10:21

Maintenant que ça c'est réglé tu pourrais peut-être trouver le moyen de ne faire qu'une requête DELETE pour supprimer d'un coup tous les pseudos concernés, parceque requête SQL dans une boucle, généralement c'est pas top.

Genre essayer d'arriver à ça :

Code : Tout sélectionner

DELETE FROM membresconnectes WHERE pseudo IN ('pseudo1', 'pseudo2', 'pseudo3');

Eléphant du PHP | 58 Messages

14 juin 2008, 10:33

Ahhhh! bahhh oui!!! pffff! merci...

A force de faire du copier /coller d'amateur... j'avais pas vu cette énormité... mais j'en apprend tous les jours grâce à vous....

Sinon bonne idée que celle de la simplification de la requête ; Il n'y a pas une requête qui me permet de supprimer directement?? j'ai déjà vu des trucs du style :
$rq="DELETE * FROM membresconnectes (SELECT PSEUDO FROM membresconnectes WHERE TIMESTAMP<'$dureede30min')";

Vous connaissez la bonne syntaxe?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2008, 10:48

Si Si:
$rq="DELETE FROM membresconnectes WHERE PSEUDO IN (SELECT PSEUDO FROM membresconnectes WHERE TIMESTAMP<'$dureede30min')"; 
Mais remarque que cela peut être simplifié par :
$rq="DELETE FROM membresconnectes WHERE TIMESTAMP<'$dureede30min'"; 
Du coup, on comprend pas pourquoi tu fais un select pour enchainer par un rafale de delete. Puisque tu ne traite rien dans la boucle while. Remplacer tout le bazar par un simple Delete.
Modifié en dernier par sadeq le 14 juin 2008, 10:52, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 juin 2008, 10:50

Ou encore :

Code : Tout sélectionner

"DELETE FROM membresconnectes WHERE TIMESTAMP<'$dureede30min';
Pourquoi faire un SELECT pour supprimer juste derrière sans rien faire d'autre entre temps ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2008, 10:54

Bonjour Ouckileou. Désolé pour le doublon.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

14 juin 2008, 10:57

Oh ben pas de problème, c'est moi qui suis derrière en plus. Et comme ça, ça martèle le message ! :P

Eléphant du PHP | 58 Messages

14 juin 2008, 12:07

Ah ben merci! mais ne vous inquiétez pas ! dans ma boucle WHILE je fais des tas de choses dont la suppression de l'enregistrement mais pour simplifier j'ai enlevé.... :?

Ben c'est tout bête la requête.... arf! faut que je m'y fasse à chercher des choses simples.... mais au bout de 2000 ou 3000 lignes de codes, je commence à fatiguer....

Pffff! ça devient un long projet mon bidule et un programmeur HTML/SQL/PHP/FLASH débutant comme moi y laisse quelques cheveux parfois... mais c'est plutot en cours de finalisation....

Vous pourrez bientôt jouer à un Quizz original et éthique .....je l'espère! :wink:

Merci à vous.