IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insertion suppression de données


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut Insertion suppression de données
    Bonjour à tous,

    j'ai créé une mini appli qui permet d'afficher des blagues de façon aléatoire et où l'utilisateur peut écrire ses propres blagues. Si des blagues sont créées pas un utilisateur, elles sont soumises à validation et elles sont validées ou supprimées.

    Pour cela j'ai fait 2 tables, l'une qui contient les blagues validées et qui permet l'affichage aléatoire, l'autre qui stocke les blagues à valider ou supprimer.

    J'ai deux soucis le 1er c'est le insert qui ne fonctionne pas correctement car il n'insère pas le texte de la blague, et l'autre c'est que la suppression ne fonctionne plus il affiche Duplicate entry '9' for key 1.

    Voici le code utile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql_valid =  "INSERT INTO blagues values ('".$_POST['id_blague']."','".$_POST['blague']."')";
    	$result	= mysql_query($sql_valid) or die ('Impossible de valider '.mysql_error()); 
     
    	$sql_suppr = "DELETE FROM validation WHERE id_blague='".$_POST['id_blague']."'";
    	$resultat = mysql_query($sql_suppr) or die ('Impossible d\'exécuter la requête '.mysql_error());
     
    // contenu de la table "validation"
    $contenu ="\t<td>"."<form method = 'post' action = ''><input name = 'for' type = 'button' value  ='Supprimer' onclick=\"if(confirm('Etes-vous sûr de vouloir supprimer l\'enregistrement?')) submit(); \"><input name = 'id_blague' type = 'hidden' value = '".$data["id_blague"]."'></form><form method = 'post' action = 'formulaire_blagues.php'><input name = 'valid' type = 'button' value = 'Valider' onclick =\"if(confirm('Etes-vous sûr de vouloir valider l\'enregistrement?')) submit();\"><input name = 'id_blague' type = 'hidden' value = '".$data["id_blague"]."'><input name = 'blague' type = 'hidden' value = '".$data["blague"]."'></form>"."</td>\n"."\t<td>".$data["id_blague"]."</td>\n"."\t<td>".$data["blague"]."</td>\n"."\t</tr>\n";
     
     
    print $contenu;

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Bonjour,

    Désolé de casser la baraque mais juste une petite chose.
    Ne crois tu pas qu'il serait plus judicieux d'avoir une variable booléenne te permettant de savoir si la blague a ou non été validée?

    Par défaut, si c'est toi qui l'a poste, tu met validé = true, si c'est l'utilisateur qui la post, tu mets à false.
    Tu fais un listing de celle qui sont à false, tu vérifies si elles sont sympa ou non, tu deletes avec l'ID si ca ne te plait pas, sinon tu passes à true.

    Tu n'as plus qu'une seule table ainsi.
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    Oui ce serait carrément plus simple mais c'est pour une PTI à présenter à la fin de l'année donc faut faire un peu plus complet j'ai peur que ce soit trop light si je n'utilise qu'une table

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    'id_blague' n'est-il pas une clé primaire de type INT AUTO_INCREMENT ?
    Si c'est le cas tu n'intègre pas cette valeur dans ton INSERT car c'est le moteur SQL qui se charge de mettre la bonne valeur tout seul.

    Si la colonne qui contient la blague s'appelle 'TexteBlague' ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_valid =  "INSERT INTO blagues(TexteBlagues) values ('".$_POST['blague']."')";
    Par contre, pour supprimer la bonne ligne de la table 'validation' tu dois effectivement importer 'id_blague' dans ton formulaire et l'utiliser comme tu as fait dans ton DELETE. Mais aies bien conscience que 'blagues.id_blague' et 'validation.id_blague' sont deux id différents. C'est peut-être aussi pour ça que tu as une erreur duplicate entry.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    J'ai bien conscience de la nuance entre les deux et je te remercie pour ta réponse.

    Cependant un bug bizarre subsiste : si je désire supprimer une blague dans la table validation, elle est effectivement supprimée mais elle est insérée automatiquement dans la table blague!! et le texte de la blague ne s'affiche toujours pas (dans la table blague).

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    On pourrait penser qu'il vaut mieux avoir deux tables en effet...
    Mais c'est une erreur de modélisation ce que tu fais.
    Je ne sais pas lequel sera le plus pénalisant...

    Mais tu dupliques une même table...
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    Je ne sais pas quelle solution serait la plus pénalisante donc dans le doute je préfère faire une PTI un peu plus "complète"

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Lenalyon Voir le message
    Cependant un bug bizarre subsiste : si je désire supprimer une blague dans la table validation, elle est effectivement supprimée mais elle est insérée automatiquement dans la table blague!! et le texte de la blague ne s'affiche toujours pas (dans la table blague).
    Ben d'après ton code, tu enchaînes les deux requêtes SQL sans tester une condition sur l'action réalisée. Ca vient peut-être de là ?
    Et pour que la blague s'affiche il faut relancer la requête qui affiche les blagues sur ton site.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    la blague ne s'affiche pas dans la table, il met un numéro auto et dans la colonne 'blague' c'est vide alors qu'il devrait y avoir du texte en toute logique. Même en rafraîchissant le site et la base.

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essaie la requête avec du texte en dur pour vérifier qu'elle fonctionne.
    C'est peut-être un problème de syntaxe php dans la chaîne de caractères envoyée à SQL.
    Place un echo $sql_valid après l'instruction qui crée la chaîne SQL puis un exit pour arrêter le programme.
    Ca t'affichera exactement le texte de la requête générée par ton programme et tu pourras ainsi vérifier la syntaxe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    Citation Envoyé par Lenalyon Voir le message
    Je ne sais pas quelle solution serait la plus pénalisante donc dans le doute je préfère faire une PTI un peu plus "complète"

    ce n'est pas plus complète que de faire des erreurs de modélisation la tu auras de la redondance de données qui est l'opposé du but d'une bdd

    donc comme MimiCracra44 je pense qu'une seule table serait la bienvenue ( pour ta note aussi )

  12. #12
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    Effectivement le programme ne voit pas le texte à insérer values est vide ..

Discussions similaires

  1. [MySQL] Suppression des données et une nouvelle insertion
    Par abdelkarim_1987 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 09/10/2013, 17h15
  2. [DBExpress] Formulaire d'insertion (Base de donnée)
    Par Nadd dans le forum C++Builder
    Réponses: 14
    Dernier message: 12/07/2007, 10h22
  3. [C#] Limites de C# quand a la suppression de données
    Par Anonymous dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/01/2005, 23h18
  4. Rafraichir dbgrid apres insertion d'une donnée ds une table
    Par gizmorambo dans le forum Bases de données
    Réponses: 7
    Dernier message: 11/01/2005, 16h03
  5. Suppression de données
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2004, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo