Aller au contenu

DELETE inefficace


furious Gontran

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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 . "'";

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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é ?

Lien vers le commentaire
Partager sur d’autres sites

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é par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

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" ?

Lien vers le commentaire
Partager sur d’autres sites

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 :huh:

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é par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

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 $machin
echo"<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 :lol: )

- 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.

Lien vers le commentaire
Partager sur d’autres sites

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 :D

Lien vers le commentaire
Partager sur d’autres sites

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é par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

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 :D

<{POST_SNAPBACK}>

600 ? Ce sont de petits programmes.. :D

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...