furious Gontran Posté 17 Décembre 2004 Posté 17 Décembre 2004 bonjour, Voici mon code: $connexion=connexion(NOM,PASSE,BASE,SERVEUR); if ($_GET['Action']==Supprim) { $Table=$_GET['Table']; $Nom=$_GET['Nom']; $Requete="DELETE FROM $Table WHERE Nom='$Nom'"; echo $Requete; $resultat=ExecRequete($Requete, $connexion); echo "<H3 Align=center>EFFACEMENT ACCOMPLI<H3><BR><BR>" ."<p Align=center>".$Nom."<br> as bien ete effacé.<BR>(Paix a son âme etc)</p>" ."<p><a href='DecoupResult?Table=$Table&position=0&Action=Con'>RETOUR</a></p>"; } L'utilisateur se connectant possede tous les privileges et un grant a oui. Pourtant ce que j'essaye d'effacer reste present dans la base sans pour autan que j'ais un message d'erreur... Mon if est bien validé puisque le echo $Requete fonctionne, celui ci m'affiche: DELETE FROM livre WHERE Nom='2909990621' 2909990621 etant le nom de la ligne a effacer... Et la, apres un tour sur nexen et autres tutos, je vois pas trop ce qui manque.
Dan Posté 17 Décembre 2004 Posté 17 Décembre 2004 Salut Furious Gontran, La variable $Nom n'est pas remplacée dans la chaîne, vu qu'elle se trouve entre des simples quotes Mets ceci à la place de ta ligne $Requete: $Requete="DELETE FROM " .$Table. " WHERE Nom='" . $Nom . "'";
Dan Posté 17 Décembre 2004 Posté 17 Décembre 2004 Es-tu bien certain de ta fonction ExecRequete() ??? Tu peux tester avec un mysql_query($Requete)...
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 ma fonction execRequete est correcte, puisqu'elle me sers aussi a effectuer toutes mes requetes et l'ajout de données marche... function ExecRequete ($requete, $connexion) { $resultat = mysql_query ($requete, $connexion); if ($resultat) return $resultat; else { echo "<B>Erreur dans l'execution de la requete $requete.</B><BR>"; echo "<b>Message MySQL:</b>" .mysql_error($connexion); exit; } } Comme tu peux le voir elle est assez basique. mais je viens de lire ca sur nexen: Dans les tables de type MyISAM , les enregistrements effacés sont maintenus dans une liste liée et les requêtes INSERT suivantes réutilisent les vieux emplacements. Pour recouvrir l'espace inutilisé ou réduire la taille des fichiers, utilisez la commande OPTIMIZE TABLE ou l'utilitaire myisamchk pour réorganiser les tables. OPTIMIZE TABLE est plus simple, mais myisamchk est plus rapide. Une fois la ligne effacée un lien ramene a la page de consultation de la table. Faut il que j'optimise avant de reafficher la table ?
Dan Posté 17 Décembre 2004 Posté 17 Décembre 2004 Faut il que j'optimise avant de reafficher la table ? Ben non... le DELETE doit virer l'enregistrement. Heureusement qu'on ne doit pas faire un "OPTIMIZE" de manière systématique. As-tu une idée du temps que cela prendrait sur une base comme celle du Hub C'est seulement pour récupérer l'espace libéré... rien d'autre. As-tu mis le code que je t'ai donné ?
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 (modifié) Ben, non, ca ne marche toujours pas.... Diantre... d'ailleurs meme en rajoutant un mysql_query($requete); a la place de ma fonction, ca ne marche pas La reponse du mysql query est 1 revoici le code: if ($_GET['Action']==Supprim) { $connexion=connexion(NOM,PASSE,BASE,SERVEUR); $Table=$_GET['Table']; $Nom=$_GET['Nom']; $requete="DELETE FROM $Table WHERE Nom='".$Nom."'"; echo $requete."<br>"; $result=mysql_query($requete) or die ("Requête invalide"); echo $result; /*$resultat=ExecRequete($requete, $connexion);*/ echo "<H3 Align=center>EFFACEMENT ACCOMPLI<H3><BR><BR>" ."<p Align=center>".$Nom."<br> as bien ete effacé.<BR>(Paix a son âme etc)</p>" ."<p><a href='DecoupResult?Table=$Table&position=0&Action=Con'>RETOUR</a></p>"; } Cela peut il venir d'un probleme de configuration de mon serveur de test Dreamweaver/wamp ??? Parceque la niveau code tout devrait fonctionner... Modifié 17 Décembre 2004 par furious Gontran
Anonymus Posté 17 Décembre 2004 Posté 17 Décembre 2004 Juste avant ta requète, tu mets : echo"<br>Nom :".$nom; Tu dois avoir quelque chose ainsi, sinon ta requète ne peut marcher. Ou plus exactement, elle marche, mais.. pas comme tu veux. Qu'affiches ton "echo Requete" ?
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 Nom :2909990621 DELETE FROM livre WHERE Nom='2909990621' 1 Alors voici les echo avec le Nom, la requete et $result
Anonymus Posté 17 Décembre 2004 Posté 17 Décembre 2004 Tu as une table livre ? Elle contient un champ Nom ? Tu as un enregistrement qui correspond à ce numéro ?
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 (modifié) oui oui J'ais bien une table livre un champ Nom. La casse est bonne. J'ais bien un nom 2909990621. Truc reellement etrange par contre c'est que j'arrive a effacer toutes les autres entrée. J'ais pensé que ca venait du fait que le nom soit un numero mais j'ais effacé sans probleme une ligne dont le nom etait 3 et je n'ais aucun probleme pour effacer les autres lignes... Je suis perplexe... sinon j'ais effacé les entrées qui posait probleme en passant pas phpmyadmin... Mais si quelqu'un pouvait me dire pourkoi j'ais eu ce probleme specialement sur ces entrées ca m'aiderait a savoir si c'est mon ordi ou mon dreamweaver qui buggue... Ou alors je pourrais comprendre parceque là... Modifié 17 Décembre 2004 par furious Gontran
Anonymus Posté 17 Décembre 2004 Posté 17 Décembre 2004 J'ais bien un nom 2909990621. n'y a t-il pas un espace avant ou après le numéro, dans le nom contenu dans ta table ?
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 ah oui !! tu as raison, il y'avait un espace apres.... C'est dur a voir comme erreur de notation... Y'a t'il une bidouille pour verifier que l'utilisateur ne fasse pas ce genre d'erreur ?
Anonymus Posté 17 Décembre 2004 Posté 17 Décembre 2004 quand tu récupères la valeur, par exemple $Nom, tu fais : $Nom = trim($_POST['Nom']);
furious Gontran Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 Merci beaucoup, J'ais compris et je sais resoudre l'erreur... J'adore le hub... J'pourrais avoir une banniere pour la mettre sur mon site ??
Anonymus Posté 19 Décembre 2004 Posté 19 Décembre 2004 Bonjour, 2 choses : 1/ L'utilisateur se connectant possede tous les privileges et un grant a oui. Il n'a pas besoin du grant. Enleves le, c'est une faille de sécurité. Tu donnes plein de pouvoirs à la personne mal intentionnée qui pourra se connecter à sa place. 2/ Tu as su corriger l'erreur, mais tu devrais apprendre te corriger. Ce que nous avons utiliser, Dan et moi, n'est que du bon sens. A savoir : - verifier si la requète 'marche' sous ton phpmyadmin, - verifier si la requète qui est passée est bien celle que tu penses être, - verifier les données. Pour cela, la meilleure méthode est de tout afficher, à savoir : Pour une requète : SELECT nom FROM table ton code est en général comme ceci : if($machin){$query = "SELECT $nom FROM $table";$result = mysql_query($query);}else{//autre chose} Il faut que tu mettes des 'pointeurs', des 'espions'. Ca donne : // est ce que $machin est bien $machinecho"<p>machin :-".$machin."-";if($machin){echo"<br>BOUCLE IF";echo"<br>NOM:-".$nom."-";echo"<br>TABLE:-".$table."-";$query = "SELECT '".$nom."' FROM '".$table."'";echo"<br>QUERY :-".$query."-";// RECUPERATION DE QUERY, ESSAI DANS PHPMYADMIN$result = mysql_query($query);echo "<br>RESULT:".$result."-";// DOIT DONNER UN Resultat, sous la forme "ressource #1" ou autre.}else{echo"<br>BOUCLE ELSE";//autre chose} Essaies systématiquement avec des pointeurs, des espions, qui te diront ce qu'il en est véritablement de tes variables, de tes boucles. Il faut que tu saches exactement où tu passes, dans quelles boucles, il faut que tu saches ce que tu renvoies comme valeur à tes variables. Les erreurs courantes, pour les variables sont : - les espaces en début et fin de chaine, - les apostrophes dans la chaine (essaies avec un $nom tel que O'Hara...) - On croit qu'on est dans la boucle 'if' alors que l'on n'y passes pas.. (dans ce cas, c'est difficile de faire marcher la requète ) - Isoles tes variables sql entre guillements simples ' ' et tes variables php entre guillemets doubles " ". Le $nom dans ta requète sql doit devenir : '".$nom."' autrement dit : guillemet simple guillemet double point variable point guillemet double guillemet simple. Et si toutefois tu n'y arrives pas, tu peux venir sur le Hub demander conseil (Bon.. même si tu fais pas tout ca, tu peux tout de même venir, mais c'est pour toi, pour te faire gagner du temps...) Voilà, bon courage pour la suite Nico.
Sarc Posté 19 Décembre 2004 Posté 19 Décembre 2004 Bah faut pas être faignant pour mettre autant de pointeurs, d'espions dans le programme... quand mes programmes font 600 lignes et que chaque ligne peut tout chambouler, j'avoue que je préfère ne pas avoir a les utiliser
furious Gontran Posté 20 Décembre 2004 Auteur Posté 20 Décembre 2004 (modifié) Merci pour les conseils, J'essaye generalement tout ca avant de venir ici... Le probleme quand on est autodidacte c'est que parfois on fais des erreurs de bases sans meme s'en rendre compte (du style l'espace en fin de nom)... Mais j'essaye de pas trop vous embeter, non plus. La, ces temps ci j'essaye de poser des questions sur des sujets plus generaux. Modifié 20 Décembre 2004 par furious Gontran
Anonymus Posté 20 Décembre 2004 Posté 20 Décembre 2004 Bah faut pas être faignant pour mettre autant de pointeurs, d'espions dans le programme... quand mes programmes font 600 lignes et que chaque ligne peut tout chambouler, j'avoue que je préfère ne pas avoir a les utiliser <{POST_SNAPBACK}> 600 ? Ce sont de petits programmes.. Ceci dit, cette méthode s'applique à toute personne. Il est rare de voir un développeur taper 600 lignes sans erreurs, par contre ces pointeurs sont recommandés dans tous manuels sérieux. Je ne dis pas d'en mettre toutes les 2 lignes, je préconise de les mettre lorsque ca ne marche pas. ps : Ceci dit, Gontran, tu ne nous embetes pas du tout, rassures toi Nico.
furious Gontran Posté 21 Décembre 2004 Auteur Posté 21 Décembre 2004 Ca tombe plutot bien, j'ais encore une question bete a poser ... (dans php/mysql)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant