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 :

problème de modification dans base de données [MySQL]


Sujet :

PHP & Base de données

  1. #21
    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
    Par défaut
    En faite, je n'ai pas le temps d'éplucher chaque lignes de code pour voir lequel serait ou pas.
    Puis de toute manière, dans un coup comme ça, ça demande d'avoir tout sous le coude, y compris la Bdd.

    Le plus simple, du moins à défaut d'autre moyens, tu pourrais simplifier le code, comme mettre de coté tout le code (une copie), puis te contenter dans 1er temps de faire 1 seul formulaire (1colonne), celui qui semble le plus sûr.
    Tant que celui-ci ne fonctionnera pas comme prévu ça ne servira à rien de rajouter les autres.

    Puis il te manque des astuces pour débugger.
    Le truc à connaitres (à mon avis) par coeur, c'est :
    var_dump() -> ça affiche n'importe quel truc (variable,tabeau,objet, etc ...) de manière très détaillé
    print_r() -> comme ci-dessus mais moins détaillé. 9a peu suffire, ça dépend se qu'on souhaite voir
    echo -> no comment
    exit() -> ça permet de placer un point d'arrêt. Ca arrête net le script là où il se trouve. Très pratique par moment.


    Donc un header() est très déroutant par moment, on ne sait pas vraiment ce qu'il se passe du coup, faire ceci (provisoirement) peut être utile :
    // Mise à jour avant
    mysql_query($req) or die('Erreur : '.mysql_error());
    print_r($_POST);
    echo $req;
    exit(); // Point d'arrêt.
    header('Location: modifprodpp.php');
    Ici, comme on arrête (volontairement et provisoirement) le script, et bien juste avant on affiche la requête, ça permet de vérifier si elles correspondent bien à celles attendues, entre autre le couple champ/valeur, de même se que $_POST contient.


    Vois tu, tu peux rajouter ainsi des données (provisoirement) afin de constater IN VISU certaine données, comme les $_GET, $_POST, etc ...
    Donc quand on a un doute sur une données (une variable par exp.), on la piste dès le début jusqu'à la fin pour vérifier ce quelle vaut.
    C'est quasi tout le temps le manque d'info sur la valeur d'une ou plusieurs variable qui fait qu'on bloc.


    Du coup, question : Avec ces astuces, est ce que tu entre dans la condition qui permet de mettre à jour la Bdd ?
    Qu'affichent les divers infos, sont elles cohérentes ?
    Est qu'il y a un message d'erreur ?

  2. #22
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Bon, tout d'abord, merci encore pour toute ton aide et les informations très intéressantes que tu viens de me fournir.

    Ensuite, en ajoutant le code que tu m'as donné voilà ce que j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Array ( [valeur] => 1 [champ] => qtestock [noprod] =>
    Notice: Undefined index: noprod in F:\\EasyPHP 3.0\\www\\gestion stock\\modifprod.php on line 106
    ) UPDATE informatique SET qtestock = '1' WHERE noprod = '
    Notice: Undefined index: noprod in F:\\EasyPHP 3.0\\www\\gestion stock\\modifprod.php on line 106
    PS : Je répondrai demain matin aux alentours de 9h.

  3. #23
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Petit up.

  4. #24
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    ça y est je peux passer ce topic en résolu
    J'ai trouvé mon erreur cela venait du select.
    Il me reste encore une erreur qui fait que j'ai tout le temps le message comme quoi je n'ai aps entré de numéro de produit et ce même si j'en ai entré un...
    Merci à tous et en particulier à RunCodePhp !!

  5. #25
    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
    Par défaut
    Il me reste encore une erreur qui fait que j'ai tout le temps le message comme quoi je n'ai aps entré de numéro de produit et ce même si j'en ai entré un...
    Ce message c'est toi qui l'affiche, suite à une condition ( if (condition) { Ok ... } else { erreur !!! } ) ou est ce une erreur venant de Php ?

    Mais peu importe, le principe de débuggage est toujours le même, chercher où est l'erreur.
    Le 1er truc à vérifier, c'est si la condition est réellement bonne (comme vérifier s'il y aurait erreur sur le nom).
    Donc faire un simple print_r($_GET['parametre']) ou print_r($_POST['parametre']) juste avant la condition permettant de le vérifier, de savoir qu'est ce qu'on reçoit.

    En tout cas, et selon se que tu dis, le paramètre n'est pas transmis.
    Faudrait revoir le formulaire.
    Si tu ne vois pas où se situe l'erreur, faut poster le code.

  6. #26
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ce message c'est toi qui l'affiche, suite à une condition ( if (condition) { Ok ... } else { erreur !!! } ) ou est ce une erreur venant de Php ?

    Mais peu importe, le principe de débuggage est toujours le même, chercher où est l'erreur.
    Le 1er truc à vérifier, c'est si la condition est réellement bonne (comme vérifier s'il y aurait erreur sur le nom).
    Donc faire un simple print_r($_GET['parametre']) ou print_r($_POST['parametre']) juste avant la condition permettant de le vérifier, de savoir qu'est ce qu'on reçoit.

    En tout cas, et selon se que tu dis, le paramètre n'est pas transmis.
    Faudrait revoir le formulaire.
    Si tu ne vois pas où se situe l'erreur, faut poster le code.
    Non mais je comprends pourquoi cela ne marche pas car c'est à base de $_POST donc c'est normal qu'au rechargement de la page cela ne fonctionne plus sauf que je n'ai pas d'idée pour faire en sorte qu'on arrive dans la bonne boucle.
    Et oui ce message apparait suite à une condition, ce n'est pas une erreur php
    Voilà le code.
    Pour le formulaire, il n'a pas changé

    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
     
     
    <?php
    session_start()
    ?>
    <?php
    // connexion à la base
    include ('connect.php');
    include('includecss.php');
    if (@$_SESSION['auth']=='didier') // pour eviter erreurs si personne essaie de se loguer sans entrer de mot de passe
    {
     
    ?>
    <html>
    <head>
    <title>Modification d'un produit</title>
    </head>
     
    <body>
    <div id="titreindex"> 
     
    <h3>Modification de produits</h3>
     
    </div>
     
    <div id="menumep">
     
    <?php
     
    include('includemenu.php');
     
     
    ?>
     
     
    </div> 
     
     
     
     
     
     
     
    <div id="tablo">
     
     
    <h2>MODIFICATION D'UN PRODUIT </h2>
    <br>
    <form action="modifprod.php" method="post" name="ajout">
       <p>
     
           <label for="numprod">Quel est la référence du produit à modifier ?</label><br>
           <input type="text" name="noprod" id="prod_num" tabindex="10" ><br> 
     
       </p>
     
    <p>
       <input type="submit" value="Valider">
    <input type="reset" value="Réinitialiser">
    </p>
    </form>
     
     
     
     
     
    <?php
     
     
     
    include('includetableau.php');
     
     
     
     
     
     
     
     
    }
     
     
    else
     
     
    header('Location:accesinvalide.php');
     
     
    ?>
     
     
     
     
    <div id="retour">
    <?php
    echo "Il y a ".$nb." produit(s)";
    ?>
    <form ACTION="menu.php">
    <INPUT name="Bouton3" type="submit" VALUE="Retour">
    </div>
     
     
     
     
     
     
     
     
     
     
     
     
    </body>
     
    </html>
    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     
     
    <?php
    session_start();
     
     
     
    include('connect.php');
    include('includecss.php');
     
    if (@$_SESSION['auth']=='didier') // pour eviter erreurs si personne essaie de se loguer sans entrer de mot de passe
    {
     
     
    // si noprod existe et qu'il n'est pas vide alors
    if (isset($_POST['noprod']) && !empty($_POST['noprod'] ))
    {
        $noprod = $_POST['noprod'];
     
        // Mise à jour du produit
    	if (isset($_POST['valeur'], $_POST['champ']) && !empty($_POST['valeur']) && !empty($_POST['champ'])) 
    	{
     
            $champ = $_POST['champ'];
            $valeur = $_POST['valeur'];
            $req = "UPDATE informatique SET ".$champ." = '".$valeur."' WHERE noprod = '".$noprod."' ";
    		mysql_query($req) or die('Erreur : '.mysql_error());
    		header('Location: modifprodpp.php');
     
     
     
     
        }
     
        // Récupération des infos du produit
        $query = "SELECT noprod, proddesig, prodprix, qtestock, datemodif, liaison from informatique WHERE noprod = '".$noprod."' ";
        $rs_prod = mysql_query($query) or die('Erreur : '.mysql_error());		
        $produit = mysql_fetch_array($rs_prod);
     
     
     
     
     
     
    ?>
     
    <html>
    <head>
    <title>Modification d'un produit</title>
    </head>
     
    <body>
    <div id="titreindex"> 
     
    <h3>Modification de produits</h3>
     
    </div>
     
     
     
     
    <div id="menumep">
     
    <?php
     
    include('includemenu.php');
     
     
     
     
    ?>
     
     
    </div> 
     
    <div id="tablo">
     
     
    <h2>MODIFICATION D'UN PRODUIT </h2>
    <br>
     
     
    <div id="modifform">
    <table>
    <tr>
    	<td>
        <!-- colonne designation -->
        <form name="form_nom" action="modifprod.php" method="post">
            <input type="text" name="valeur" value="<?php echo $produit['proddesig']; ?>" />
            <input type="hidden" name="champ" value="proddesig" />
            <input type="hidden" name="noprod" value="<?php echo $produit['noprod']; ?>" />
            <input type="submit" value="Modifier désignation" />
        </form>
        </td>
        <td>
        <!-- colonne prix -->
        <form name="form_nom" action="modifprod.php" method="post">
            <input type="text" name="valeur" value="<?php echo $produit['prodprix']; ?>" />
            <input type="hidden" name="champ" value="prodprix" />
            <input type="hidden" name="noprod" value="<?php echo $produit['noprod']; ?>" />
            <input type="submit" value="Modifier prix" />
        </form>
        </td>
        <td>
        <!-- colonne qtestock -->
        <form name="form_nom" action="modifprod.php" method="post">
            <input type="text" name="valeur" value="<?php echo $produit['qtestock']; ?>" />
            <input type="hidden" name="champ" value="qtestock" />
            <input type="hidden" name="noprod" value="<?php echo $produit['noprod']; ?>" />
            <input type="submit" value="Modifier quantité stock" />
        </form>
        </td>
    	<td>
        <!-- colonne date -->
        <form name="form_nom" action="modifprod.php" method="post">
            <input type="text" name="valeur" value="<?php echo $produit['datemodif']; ?>" />
            <input type="hidden" name="champ" value="datemodif" />
            <input type="hidden" name="noprod" value="<?php echo $produit['noprod']; ?>" />
            <input type="submit" value="Modifier date" />
        </form>
        </td>
    	<td>
        <!-- colonne liaison -->
        <form name="form_nom" action="modifprod.php" method="post">
            <input type="text" name="valeur" value="<?php echo $produit['liaison']; ?>" />
            <input type="hidden" name="champ" value="liaison" />
            <input type="hidden" name="noprod" value="<?php echo $produit['noprod']; ?>" />
            <input type="submit" value="Modifier liaison" />
        </form>
        </td>
    </tr>
    </table>
     </div>
     <br>
    <?php
     
    }
    else
    {
     
     
        echo' Erreur. Pas de N° de produit';
     
     
    }
     
     
     
     
     
     
     
    include('includetableau.php');
     
     
     
     
     
     
     
     
    }
    else
     
     
     
     
    header('Location: accesinvalide.php');
     
     
    ?>
     
     
     
     
    <div id="retour">
    <?php
     
    echo "Il y a ".$nb." produit(s)";
     
    ?>
    <form ACTION="menu.php">
    <INPUT name="Bouton3" type="submit" VALUE="Retour">
    </div>
    </div>
     
     
    </body>
     
    </html>
    De plus, lorsque j'entre un numéro de produit erroné dans la page du formulaire j'ai tout de même accès à cette page avec des champs vides.
    Quelles conditions puis-je mettre pour empêcher l'affichage ?

  7. #27
    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
    Par défaut
    Normalement tu ne devrais pas arriver sur cette page "modif" comme ça, (sauf en tapant directement le nom de la page).

    Normalement, on arrive sur cette page grâce à l'étape précédente, la page qui contient le formulaire pour saisir le N° de produit.
    Du coup, un noprod sera présent.

    Est que ce fonctionnement dit "normal" est correcte ?
    Ou alors, comment ce fait il que tu arrive sur cette page de modification (autre que celui évoqué en 1er) ?


    A coté de ça, je t'ai donner un code qui te montre comment structurer un minimum correctement une page, avec quelques explications, les raisons.
    Puis du code avec un principe d'une mise à jour par champ.
    Comment débugger un minimum.
    Et bien il me semble que tu as obtenu plus que l'essentiel pour pouvoir adpater tout ça non ?
    Donc attention à ne pas te tromper de problème.
    Si c'est un manque de connaissance pure pour ne serait ce rajouter une condition en Php, alors faut paufiner tes connaissance en Php.

    En tout cas, je ne vais pas pouvoir tout faire, car ce n'est pas à moi à le faire, vois tu.
    Je fourni juste un petit coup d'main, tout juste débloquer une situation, si je peux.
    Après, faut rouler sa bosse, si on peu dire.

  8. #28
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Non mais c'est le cas, c'est en tapant le numéro du produit et qu'on valide le formulaire qu'on arrive à l'autre page, sur ça, pas d eproblème.
    C'est juste qu'après on change un des champs puis on valide ce qui fait que la page se recharge pour faire la maj du produit mais avec ce rechargement de page la variable $_POST ne devrait plus être si ?
    Bref, à part ça tout fonctionne que ce soit la maj du produit ou le reste mis à part le fait qu'après la maj la page s'affiche mais le message comme quoi je n'ai pas entré d eproduit aussi car, selon moi, on a un rechargement au moment ou je valide mon changement pour mettre à jour mon produit et à ce moment la varibale $_post n'existe plus c'est pour cela qu'on tombe dans la condition où elle n'existe plus.
    Je me demandais juste quelle condition mettre à la place mais ce n'est pas la syntaxe qui me pose problème c'est juste que je n'ai pas 'lidée'.

    VOilà merci pour toute l'aide que tu m'as apporté

  9. #29
    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
    Par défaut
    Je vois.

    C'est bien la redirection (le header) qui provoque ce problème.

    Pour résoudre ça, il faudrait que du coté du formulaire (page précédente) du N° de produit à saisir, que se serait un formulaire avec la méthode GET (et non Post).
    Grâce à cela, tu pourra rajouter dans le header le noprod en paramètre (donc transmis en GET) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Location: modifprodpp.php?noprod='.$noprod);
    Par contre, dans le formulaire de modification, conserver la méthode POST.
    Donc ça fait 2 manières différentes d'arriver sur cette page en transmettant le N°de produit, mais c'est pas plus mal.


    Il faudra légèrement modifier la page : (je simplifie)
    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
     
    // connexion
    // session
     
    // Mise à jour du produit
    // Le noprod rajouté en POST
    if (isset($_POST['noprod'], $_POST['valeur'], $_POST['champ']) && !empty($_POST['noprod']) && !empty($_POST['valeur']) && !empty($_POST['champ'])) {	
        $noprod = $_POST['noprod'];
        $champ = $_POST['champ'];
        $valeur = $_POST['valeur'];
        ... etc MAJ etc ...
     
        // On transmet en GET le N° de produit
        header('Location: modifprodpp.php?noprod='.$noprod);
    }
     
    // si noprod existe et qu'il n'est pas vide alors
    // Ici on reçois le N° de produit en GET
    if (isset($_GET['noprod']) && !empty($_GET['noprod'] )) {
        $noprod = $_GET['noprod'];
        ... etc ...
    }
    else {
        // Erreur
    }
    A savoir que tu pourrais aussi fusionner la page précédente (formulaire de siaisie N°de produit) dans celle ci.
    Ce qui qui réduit le nombre de page et rend les choses au plus court (une étape de moins).
    C'est théoriquement mieux.
    Faudra encore modifier un peu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Mapping] Problème méthode recheche dans base de données
    Par Braksius dans le forum Hibernate
    Réponses: 1
    Dernier message: 12/07/2012, 18h24
  2. Réponses: 3
    Dernier message: 04/08/2010, 14h05
  3. Réponses: 0
    Dernier message: 20/07/2010, 20h35
  4. [CKEditor] problème insertion texte dans base de données
    Par exeee dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 22/10/2007, 11h12
  5. Problème d'insertion dans base de donnée
    Par Maestro57 dans le forum Langage
    Réponses: 4
    Dernier message: 11/06/2007, 10h04

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