PHP suppression
Résolu
Rominus
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Rominus Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Rominus Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je me casse la tête depuis pas mal de temps.
je suis en train de faire une petite application avec 3 tables, et maintenant j'essaie de supprimer les enregistrements correspondant à ma recherche.
voici mes trois tables examens, motscles et avoir
la tables avoir permet de faire le lien entre la table examens et motscles, le problème est que dans je supprime un examen je veux aussi supprimer les mots-clés correspondant.
j'arrive très bien a supprimer l'examen et le lien dans avoir mais pas a supprimer les mots clés comment faire
je vous remerci de vos réponse d'avance
je vous met le MLD
examens (numexamens, nomexmens, lienexamens)
motscles (nummc, nommc)
avoir (numexamens#, nummv#)
Je me casse la tête depuis pas mal de temps.
je suis en train de faire une petite application avec 3 tables, et maintenant j'essaie de supprimer les enregistrements correspondant à ma recherche.
voici mes trois tables examens, motscles et avoir
la tables avoir permet de faire le lien entre la table examens et motscles, le problème est que dans je supprime un examen je veux aussi supprimer les mots-clés correspondant.
j'arrive très bien a supprimer l'examen et le lien dans avoir mais pas a supprimer les mots clés comment faire
je vous remerci de vos réponse d'avance
je vous met le MLD
examens (numexamens, nomexmens, lienexamens)
motscles (nummc, nommc)
avoir (numexamens#, nummv#)
A voir également:
- PHP suppression
- Forcer suppression fichier - Guide
- Easy php - Télécharger - Divers Web & Internet
- Suppression compte gmail - Guide
- Suppression page word - Guide
- Suppression pub youtube - Accueil - Streaming
5 réponses
Bonjour.
motscles (nummc, nommc)
avoir (numexamens#, nummv#)
Y a pas une tite faute? Dans avoir, ce n'est pas plutot nummc#?
Fait attention que dans tes tables, tes champs soient bien nommés, ou que tu appelle bien les bons champs dans tes requetes.
Si tu nous donne le code que tu a pour supprimer, on pourra plus t'aider.
Sinon, tel qu'énoncé, je peut te donner un algo rapide:
recupérer l'id de l'exam a supprimer ($id=...)
sélectionner l'ensemble de la table avoir, avec l'id exam=ce que tu vient de récup ("SELECT * FROM AVOIR WHERE numexamen='$id'")
parcours de la liste de la sélection (while ($ligne=mysql_fetch_array($res)...)
récupérer l'identifiant de motsclés courrant ($idMotsCles=$ligne[0];)
le supprimer dans la table ("DELETE FROM motscles WHERE nummc='$idMotsCles'")
finparcours ( } )
supprimer les lignes dans avoir ("DELETE FROM AVOIR WHERE numexamen='$id'")
supprimer l'examen (DELETE FROM EXAMEN....)
motscles (nummc, nommc)
avoir (numexamens#, nummv#)
Y a pas une tite faute? Dans avoir, ce n'est pas plutot nummc#?
Fait attention que dans tes tables, tes champs soient bien nommés, ou que tu appelle bien les bons champs dans tes requetes.
Si tu nous donne le code que tu a pour supprimer, on pourra plus t'aider.
Sinon, tel qu'énoncé, je peut te donner un algo rapide:
recupérer l'id de l'exam a supprimer ($id=...)
sélectionner l'ensemble de la table avoir, avec l'id exam=ce que tu vient de récup ("SELECT * FROM AVOIR WHERE numexamen='$id'")
parcours de la liste de la sélection (while ($ligne=mysql_fetch_array($res)...)
récupérer l'identifiant de motsclés courrant ($idMotsCles=$ligne[0];)
le supprimer dans la table ("DELETE FROM motscles WHERE nummc='$idMotsCles'")
finparcours ( } )
supprimer les lignes dans avoir ("DELETE FROM AVOIR WHERE numexamen='$id'")
supprimer l'examen (DELETE FROM EXAMEN....)
désolé faute de frappe
j'appelle une requête en faite car je travail sur plusieurs feuille, cette requête me renvoie les numéro des mots-clés
$num = $_POST["numero"] (qui est récupéré sur un formulaire sur une autre page qui est l'id de l'examens
$mc = "SELECT motscles.nummc FROM avoir, motscles WHERE avoir.nummc=motscles.nummc AND numexamens=$num",
$res = myqsl_query($mc);
while ($row = mysql_fetch_row($res)
{
echo "$row[0]";
}
voila le code pour la récupération des id des mots-clés
j'appelle une requête en faite car je travail sur plusieurs feuille, cette requête me renvoie les numéro des mots-clés
$num = $_POST["numero"] (qui est récupéré sur un formulaire sur une autre page qui est l'id de l'examens
$mc = "SELECT motscles.nummc FROM avoir, motscles WHERE avoir.nummc=motscles.nummc AND numexamens=$num",
$res = myqsl_query($mc);
while ($row = mysql_fetch_row($res)
{
echo "$row[0]";
}
voila le code pour la récupération des id des mots-clés
Niarghh, jsuis pas fan du mysql_fetch_row...
Je te la reformule en mysql_fetch_array si sa ne te dérange pas ^^
Et au passage, je corrige les fautes suivantes:
Manque le ; a la fin de la déclaration de ton $mc.
Dans ta requete, pas oublier d'encadrer la variable avec des '
Ajout lors du mysql_query d'un paramètre $link, que tu devra créer auparavant avec un truc du genre
$link=mysql_connect("localhost","user","password") or die (mysql_error());
mysql_select_db("dbname",$link) or die (mysql_error());
En remplacant bien entendu "localhost" par le nom de l'hote qui a la bdd (mais sa devrait pas trop changer), "user" par le nom d'utilisateur pour la connection bdd, "password" par le mot de passe de l'utilisateur à la bdd, et "dbname" par le nom de la base de données.
Ajout des quelques mots or die (mysql_error()) à chaque exécution de requete pour un éventuel débuggage.
Correction au niveau de ta boucle while : il manquait une ).
Et certes, echo "$row"; sa fonctionne mais suis pas aussi sur pour un echo "$row[0]"; donc dans le doute, faire un $valeur=$row[0]; puis un echo "$valeur"; pour être sur.
Une fois corrigé, sa ressemblera presque à sa (j'ai pas tout remis).
Je te la reformule en mysql_fetch_array si sa ne te dérange pas ^^
Et au passage, je corrige les fautes suivantes:
Manque le ; a la fin de la déclaration de ton $mc.
Dans ta requete, pas oublier d'encadrer la variable avec des '
Ajout lors du mysql_query d'un paramètre $link, que tu devra créer auparavant avec un truc du genre
$link=mysql_connect("localhost","user","password") or die (mysql_error());
mysql_select_db("dbname",$link) or die (mysql_error());
En remplacant bien entendu "localhost" par le nom de l'hote qui a la bdd (mais sa devrait pas trop changer), "user" par le nom d'utilisateur pour la connection bdd, "password" par le mot de passe de l'utilisateur à la bdd, et "dbname" par le nom de la base de données.
Ajout des quelques mots or die (mysql_error()) à chaque exécution de requete pour un éventuel débuggage.
Correction au niveau de ta boucle while : il manquait une ).
Et certes, echo "$row"; sa fonctionne mais suis pas aussi sur pour un echo "$row[0]"; donc dans le doute, faire un $valeur=$row[0]; puis un echo "$valeur"; pour être sur.
Une fois corrigé, sa ressemblera presque à sa (j'ai pas tout remis).
$mc = "SELECT motscles.nummc FROM avoir, motscles WHERE avoir.nummc=motscles.nummc AND numexamens='$num'"; $res = myqsl_query($mc,$link) or die (mysql_error()); while ($row = mysql_fetch_array($res)) { $nummc=$row[0]; //contient bien dans ce cas le nummc $reqDelete="DELETE FROM motscles WHERE nummc='$nummc'"; $res=mysql_query($reqDelete,$link) or die (mysql_error()); }
$nummc=$row[0]; //contient bien dans ce cas le nummc
Tant qu'à faire d'utiliser mysql_fetch_array "pour bien récupérer le nummc", autant utiliser le tableau associatif.
Ceci dit, l'utilisation de sous-requête est quand même plus rapide à l'éxécution que de parcourir un tableau et de relancer une requête pour chaque suppression.
Tant qu'à faire d'utiliser mysql_fetch_array "pour bien récupérer le nummc", autant utiliser le tableau associatif.
$nummc = $row['nummc'];
Ceci dit, l'utilisation de sous-requête est quand même plus rapide à l'éxécution que de parcourir un tableau et de relancer une requête pour chaque suppression.
Le tableau associatif à certes un avantage, mais lorsque les colonnes viennent à changer de nom, sa passe plus. Tu me diras, une bdd ne change pas comme sa en claquant des doigts.
Ceci dit, l'utilisation de sous-requête est quand même plus rapide à l'éxécution que de parcourir un tableau et de relancer une requête pour chaque suppression.
C'est vrai, mais j'ai donné une solution qui ME parait logique, après en travaillant en sous-requête sa fonctionne tout autant, mais pas envie de réfléchir ;)
Ou peut être parce que mon projet actuel ne me permet pas de faire de sous requetes, et que du coup sa fait longtemps que j'en ai pas fait.
Ceci dit, l'utilisation de sous-requête est quand même plus rapide à l'éxécution que de parcourir un tableau et de relancer une requête pour chaque suppression.
C'est vrai, mais j'ai donné une solution qui ME parait logique, après en travaillant en sous-requête sa fonctionne tout autant, mais pas envie de réfléchir ;)
Ou peut être parce que mon projet actuel ne me permet pas de faire de sous requetes, et que du coup sa fait longtemps que j'en ai pas fait.
Etant donné le concept de 'mots-clés', il me parrait normal qu'un mot clé puisse être lié à plusieurs examens.
Je me permettrai donc de déconseiller de supprimer systématiquement les mots clés liés à l'examen que l'on veut supprimer.
Il vaudrait mieux supprimer uniquement les mots clés qui ne sont plus liés à aucun examen.
En utilisant les requêtes suivantes :
DELETE FROM examens WHERE numexamens = $id;
DELETE FROM avoir WHERE numexamens = $id;
DELETE FROM motscles WHERE nummc NOT IN (SELECT nummc FROM avoir);
A noter que ce principe convient également lorsque les mots clés ne sont liés qu'à un seul examen. Qui peut le plus, peut le moins.
Je me permettrai donc de déconseiller de supprimer systématiquement les mots clés liés à l'examen que l'on veut supprimer.
Il vaudrait mieux supprimer uniquement les mots clés qui ne sont plus liés à aucun examen.
En utilisant les requêtes suivantes :
DELETE FROM examens WHERE numexamens = $id;
DELETE FROM avoir WHERE numexamens = $id;
DELETE FROM motscles WHERE nummc NOT IN (SELECT nummc FROM avoir);
A noter que ce principe convient également lorsque les mots clés ne sont liés qu'à un seul examen. Qui peut le plus, peut le moins.
En faites je travail sur une application qui va avoir plus de 700 page web a gérer pour retrouver les examens donc je donne un ou plusieurs mots-clés sans m'occuper de gérer les mots-clés je n'ai pas assez de temps pour le faire car tout est a rentrer manuellement donc j'autorise les doublons
@ freto: j'ai un message d'erreur qui me di query was empty avec ta méthode j'essaierai de poster mon code se soir car je travail sur un autre ordi qui n'est pas en réseau
@ freto: j'ai un message d'erreur qui me di query was empty avec ta méthode j'essaierai de poster mon code se soir car je travail sur un autre ordi qui n'est pas en réseau
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question