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

Langage PHP Discussion :

probleme avec Insert et delete


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 25
    Points
    25
    Par défaut probleme avec Insert et delete
    Bonjour les amis,

    - Je dois faire un tableau affichant toutes les données sur un client pour le select c'est ok. Les problèmes commence pour le insert avec un bouton, lorsque je clique sur le bouton afin d'ajouter un nouvel élément il ne se passe rien je dois appuyer sur f5 pour que celui-ci s'affiche et voila ce que ça me donner :

    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'sssss' for key 'PRIMARY'' in C:\wamp\www\.......... on line 61
    ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'sssss' for key 'PRIMARY' in C:\wamp\www\.......on line 61


    - second souci, je ne vois pas comment faire un delete d'une ligne toujours à l'aide d'un bouton. je ne vois pas comment utiliser delete avec where pour ce cas. le tableau se présente un peu comme celui de phpyadmin.

    Merci d'avance de m'aider les amis!
    ps : je suis un super débutant!

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Post le code pour qu'on voit comment tout cela se déroule.
    Il y a 1000 façons de faire une insertion, on va pas pouvoir deviner comment tu as effectué cela.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 25
    Points
    25
    Par défaut code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    try
    {	//connect
    		$pdo_options [PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    		$bdd = new PDO ('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    		$reponse= $bdd->query('select * from client');
    	echo '<table name=tableau border=1 face ="tahoma" bordercolor=black align="center" bgcolor=#8B8C8B width="800"><th>code client</th><th>nom  client</th><th>adresse client</th><th>Actions</th>';
     
     
    	while($donnees=$reponse->fetch())
    	{
    		echo'<tr>'; 
    	echo'<td align=center  bgcolor=#5E677B>'.$donnees['code client'].'</td>';
    	echo'<td align=center bgcolor=#5E677B>'.$donnees['nom client'].'</td>';
    	echo'<td align=center bgcolor=#5E677B>'.$donnees['adr client'].'</td>';
    	echo'<td align=center bgcolor=#5E677B><input type="submit" name="c" value="Modif" style="width: 50px"><br><input type="submit" name="e" value="Suppr" style="width: 50px""></td>';
    	echo'</tr>';
    	echo'</div>';
    	}
    		echo '</table>';
    	}
    	catch (Exception e)
    		{
    		die ('erreur :' .e->getMessage());
    		}
     
     
    <caption>Informations du client</caption><br>
    <tr><td>Code client </td><td><input type="text" name="a"></td>
    <tr><td>nom du client</td><td><input type="text" name="b"> </td>
    <tr><td>Adresse du client</td><td><input type="text" name="c"> </td>
    </table>
    </form>
     
    <?php
     
    if (isset($_POST['b']))
    {
    $req = $bdd->prepare('insert into bibliotheque(codeclient,nomduclient,adrclient) VALUES ( :codeclient,:nomduclient,:adrclient)');
    $req-> execute(array(
    'code client'=>$_POST['a'],
    'nom du client'=>$_POST['b'],
    'adr client'=>$_POST['c'],
    ));
     
     
    }
     
     
    ?>

    ps:jai changé un peu le text

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Ton insert se trouve après le select. Donc quand le traitement s'effectue le serveur te renvoie une page dont les données datent d'avant l'insertion.
    Déplaces ton code d'insertion avant ta requête select et tu auras les valeurs sans avoir à rafraichir la page.
    De plus comme tu gères les clés primaires manuellement il faut éviter les problèmes de rafraichissement, donc il serait conseillé de rediriger l'utilisateur après l'insertion afin qu'il ne puisse rafraichir le traitement. Regardes du côté de la fonction header().

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Le déroulement du code (Php et Html) n'est pas en phase avec le déroulent dont se passe réellement les choses.

    Se rajoute d'autres facteur comme justement une ré-actualisation de la page faite involontairement ou pas de la part de l'utilisateur, chose qu'il faut normalement tenir compte.

    Rien que ça seulement demande de concevoir (et donc coder) autrement.


    Un exemple sera peut être plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
    // PARTIE TRAITEMENTS
     
    // Connexion PDO/MySQL
    try {
        //connect
        $pdo_options [PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch(PDOException $e) {
        die('erreur :' .$e->getMessage());
    }
     
    // Modification/Insertion/Supprimer
    // SI validé
    if (isset($_POST['action']) && ($_POST['action'] == 'Ajouter' || $_POST['action'] == 'Modifier' || $_POST['action'] == 'Supprimer')) {
     
        $action = $_POST['action'];
     
        switch ($action) {
            case 'Ajouter' :
                try {
                    $stmt = $bdd->prepare('INSERT INTO bibliotheque(codeclient, nomduclient, adrclient)
                        VALUES (:codeclient, :nomduclient, :adrclient)');
                    $stmt->bindValue('codeclient', $_POST['codeclient']);
                    $stmt->bindValue('nomduclient', $_POST['nomduclient']);
                    $stmt->bindValue('adrclient', $_POST['adrclient']);
                    $stmt->execute();
                    $affecte = $stmt->rowCount();
                }
                catch(PDOException $e) {
                    exit('ERREUR : ' .$e->getMessage());
                }
     
                if ($affecte > 0) {
                    // Redirection / ré-actualisation
                    header('Location: gererclient.php');
                    exit();
                }
            break;
            case 'Modifier' :
                // Code pour modifier
     
                if ($affecte > 0) {
                    // Redirection / ré-actualisation
                    header('Location: gererclient.php');
                    exit();
                }
            break;
            case 'Supprimer' :
                // Code pour supprimer
     
                if ($affecte > 0) {
                    // Redirection / ré-actualisation
                    header('Location: gererclient.php');
                    exit();
                }
            break;
        }
    }
     
    // Récupération de tous les clients
    $clients = array();
    try {
        $stmt_clients = $bdd->query('SELECT codeclient, nomduclient, adrclient
            FROM client');
        $clients = $stmt_clients->fetchAll(PDO::FETCH_ASSOC);
    }
    catch(PDOException $e) {
        $erreur = 'erreur :' .$e->getMessage();
    }
     
    // PARTIE INTERFACE / HTML
    ?>
    <html>
    <head>
        <title>GERER CLIENT</title>
    </head>
    <body>
    <div>
     
    <?php
    if (!empty($erreur)) {
        echo '<p>'.$erreur.'</p>';
    }
     
     
    foreach ($clients as $client) {
    ?>
     
    <form action="gererclient.php" method="post">
        <fieldset>
            <legend>Modifier/Supprimer Client</legend>
            <label for="codeclient">Code client</label><input type="text" id="codeclient" name="codeclient" value="<?php echo $client['codeclient']; ?>" />
            <br /><label for="nomduclient">nom du client</label><input type="text" id="nomduclient" name="nomduclient"value="<?php echo $client['nomduclient']; ?>" />
            <br /><label for="adrclient">Adresse du client</label><input type="text" id="adrclient" name="adrclient"value="<?php echo $client['adrclient']; ?>" />
            <input type="submit" name="action" value="Modifier" style="width: 50px" />
            <br /><input type="submit" name="action" value="Supprimer" style="width: 50px" />
        </fieldset>
    </form>
     
    <?php
    }
    ?>
     
    <form action="gererclient.php" method="post">
        <fieldset>
            <legend>Nouveau Client</legend>
            <label for="codeclient">Code client</label><input type="text" id="codeclient" name="codeclient" />
            <br /><label for="nomduclient">nom du client</label><input type="text" id="nomduclient" name="nomduclient" />
            <br /><label for="adrclient">Adresse du client</label><input type="text" id="adrclient" name="adrclient" />
            <br /><input type="submit" name="action" value="Ajouter" style="width: 50px" />
        </fieldset>
    </form>
     
    </div>
    </body>
    </html>
    ( /!\ code effectué ici sans aucun test )

    En somme, un maximum de choses se font au tout début (et non au milieu du code HTML voire pire, à la fin.

    Il faut déjà comprendre que, lorsqu'on valide un formulaire (tout comme cliquer sur un lien), cela va lancer une toute nouvelle requête HTTP, ce qui aura pour effet de repartir à 0, c'est à dire exécuter le code de la page en question de la 1ère ligne à la dernière.
    Tout ça en respectant le déroulement qu'on aura fait/prévu.

    Donc lorsqu'on valide le formulaire pour faire l'insertion, en suivant ton code à l'origine, cela va :
    1/ En 1er récupérer tous les clients dans la base.
    (or, l'insertion n'aura pas été effectué à ce moment car cela est prévu à la fin)
    2/ Après avoir afficher tous les clients, cela va insérer le nouveau client (sans l'afficher).

    En ré-actualisant la page, car tu constate que le nouveau n'est pas affiché (explication ci-dessus).
    Et bien quelque part tu rajoutes une erreur de plus.
    C'est à dire cette action va à nouveau tout refaire comme expliqué plus haut, donc tenter d'insérer à nouveau le (nouveau) client.


    Le code que j'ai mis plus "gomme" ces 2 erreurs.
    La fonction header() effectue une redirection (une ré-actualisation forcée, si on peu dire) de la page après chaque action (insertion/modif/supp), cela élimine ce problème de risque de double insertion.


    Mise à part ça, une chose m'interpelle.
    Je remarque qu'il y a un champ "codeclient", mais quel type de donnée est-ce ?
    Théoriquement cela devrait être d'un type INT (un nombre entier) et auto_increment (une valeur que MySQL accorde automatiquement pour garantir son unicité).
    Ce qui sous-entend que lors de la création d'un nouveau client, on ne devrait pas renseigner cette donnée.
    Normal, elle sera connue uniquement après l'insertion dans la Bdd.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci les amis, j'ai écouté vos conseils et cava mieu

    j'ai d'autres questions donc je vais continuer sur ce post. J'aimerais ouvrir une fenetre popup avec un lien en php mais celle-ci s'ouvre toujours en full screen

    echo'<a href="auto.php?code='. $donnees['quantite'].'&nom='.$donnees['achat'].'&adr='.$donnees['adresse'].'"><input type ="button" name = "go" value = "ok"></a></td>';

    j'aimerais rajouter ceci 'width=300,height=250,scrollbars=0' mais je ne vois pas comment faire.

    par avance, merci

  7. #7
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    merci transgohan mais j'utilise le methode get dans mon mail ci-dessus donc je sais pas si avec js c'est possible

  9. #9
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    Citation Envoyé par le beauceron Voir le message
    merci transgohan mais j'utilise le methode get dans mon mail ci-dessus donc je sais pas si avec js c'est possible
    tu concaténes une chaîne en php mais au finale ce n'est qu'une url donc en js c'est également possible de faire la même chose.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  10. #10
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Il faut surtout comprendre que HTML, JS, CSS ce ne sont que des textes sans aucune utilité au niveau serveur ! Ils ne sont interprétés que dans ton navigateur.
    Donc pour PHP ce n'est que concaténer ce que tu veux avec n'importe quoi d'autre. Tu en fait ce que tu souhaites.
    PHP est fait pour générer du texte, donc du HTML et du JS.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $code = 'Javascript';
    echo '<script type="text/javascript">';
    echo 'alert("Je suis un code ' . $code . ' !");';
    echo '</script>';

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

Discussions similaires

  1. Probleme avec INSERT INTO et select
    Par jmjmjm dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/01/2007, 22h51
  2. [My SQL]probleme avec insert select
    Par jmjmjm dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/01/2007, 11h24
  3. probleme avec insert into
    Par bscorpion dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/07/2005, 13h00
  4. Problem avec insertion de l'heure
    Par moniphal dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 29/04/2005, 11h27
  5. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36

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