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 :

Php PDO récupérer un INSERT directement dans un form


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Php PDO récupérer un INSERT directement dans un form
    Bonjour,

    Je cherche un moyen de réaliser plusieurs requêtes SQL en une seule fois (avec deux tables différentes).

    Contexte actuel :
    1. Un utilisateur scanne un barcode et valide
    2. La requête va rechercher si le code barre existe déjà ou pas en base
    3. Si le code barre n'existe pas, le script insère le code barre + d'autres infos d'une table1 vers la table2
    > jusque la tout va bien

    Le script qui fait ça en PDO :
    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
    <?php
    //Connections
    try {
        $handler = new PDO('mysql:host=localhost:3307;dbname=basededonnees','root', 'password');
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e){
        exit($e->getMessage());
    }
     
    $codebar = isset($_POST['barcode']) ? $_POST['barcode'] : NULL;
     
     
    //Verification 
     
    if(!isset($error)){
    //no error
    $sthandler = $handler->prepare("SELECT * FROM table2 WHERE quantite = 0 AND barcode=:barcode");
    $sthandler->bindParam(':barcode', $codebar);
    $sthandler->execute();
     
    if($sthandler->rowCount() > 0){
        echo "<center><span style=background:#FFFFFF><font color=red><b>!! Code déjà scanné !!</b></font></span><br />";
    	header("Refresh: 3; URL=index.php");
    } else {
        //insert into database
        $sql = 'insert into table2 (barcode_table2, quantity_table1, date, datafix1, datafix2)
    SELECT distinct barcode_table1, quantity_table1, now(), "donnéefixe1", "donnéefixe2"
    from table1
    where barcode_table1 = :barcode';
        $query = $handler->prepare($sql);
        $query->execute(array(':barcode' => $codebar));
    	echo "<center><FONT SIZE=4 FACE=Arial><b>OK<font color='red'>enregistrement en base...</font></font></center>";
    	header("Refresh: 2; URL=index.php");
    	    }
    }else{
        echo "erreur d'insertion, réessayez ".$error;
        exit();
    }
    ?>
    4. l'utilisateur doit ensuite aller sur une page, rescanner le même barre code que précédemment (car maintenant il existe en base table2)
    5. un formulaire s'affiche avec les infos qu'il peut modifier (une quantité dans mon cas)
    6. l'utilisateur modifie ou non la quantité selon et ensuite le script fait un update en base table2
    > jusque ici aussi tout va bien je dois juste adapter de mysql vers PDO (je suis oqp de tout migrer mes scripts en PDO).
    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
    <html>
    <?php
    @mysql_connect('localhost', 'root', 'password') or die(mysql_error());
    @mysql_select_db("base") or die(mysql_error());
     
    $barcode = $_GET['barcode'];
    $query = @mysql_query("SELECT * FROM table2 WHERE barcod_table2 = '$barcode'") or die(mysql_error());
     
    if(mysql_num_rows($query)>=1){
        while($row = mysql_fetch_array($query)) {
    		$barcode = $row['barcod_table2'];
            $quantity = $row['quantity_table2'];
            $newquantity = $row['newquantity_table2'];
            $id = $row['id'];
        }
    ?>
    <body>
    	<center>
    	<font color="black">RETOUR</b><br />
    <b> CONSO L1 </b></font><br />
    <form action="update.php" method="post">
    <input type="hidden" name="ID" value="<?=$id;?>">
    <p>
    <label for="barcode"><b><font color="Black">Code Barre</font></b></label>
        <input type="text" name="barcode" value="<?=$barcode?>" readonly><br /></p>
    	 <p><label for="quantity"><b><font color="black">Quantité de départ</font></b></label>
    <input type="text" name="quantity" value="<?=$quantity?>" readonly><br /></p>
         <p> <label for="newquantity"><b><font color="black">Quantité restante</font></b></label>
    <input type="text" name="newquantity" value="<?=$newquantity?>" required><br /></p>
    </center>
        <div class="row">
    	<center>
          <p><button type="submit">VALIDER</button></p>
        </center>
    	</div>
    </form>
    </div>
     
    <?php
    }else{
    	echo "<p><center>($barcode)</center><p>";
            echo '<center><FONT SIZE=4 FACE=Arial><font color="red">Code barre inconnu. </font><br /><p><a href="javascript:history.back()">RETOUR</a></p></center>';
    }
    ?>
    </body>
    </html>
    Ce que je souhaiterai :
    1. l'utilisateur scanne le code barre
    2. mon script ajoute le code barre de la table 1 + les infos de table 1 (quantité etc...) vers la table 2 (c'est mon premier script PDO)
    3. le script m'affiche AUSSITÔT un formulaire modifiable avec les datas fraichement insérées dans la table 2
    4. je modifie sur le formulaire et je fais un update de ma base via un bouton valider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query="UPDATE table2 SET table2_quantite = '$newquantity' , process ='R' WHERE table2_barcod ='$barcode'";
    Est-ce faisable ?
    La où je bloque c'est comment insérer les datas mais directement ensuite afficher ces datas dans un formulaire modifiable.

    Merci bcp

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu dois simplement faire une redirection vers ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: pageduformulaire.php?barcode=' . $barcode);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- d'abord, je voudrais te féliciter pour ton code PHP : très propre, (presque) bien indenté, clair.
    Bravo.

    CONSEIL : Mets le script de connexion à la BD dans un fichier externe (puis de l'inclure : include ou require).
    Ca t'évitera de ré-écrire partout tes paramètres de connexion (censés être "confidentiels" !).

    2- Je n'en dirais pas autant du HTML !!
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        echo "<center><span style=background:#FFFFFF><font color=red><b>!! Code déjà scanné !!</b></font></span><br />";
        echo "<center><FONT SIZE=4 FACE=Arial><b>OK<font color='red'>enregistrement en base...</font></font></center>";
    Balises obsolètes, majuscules mal placées, manque d'apostrophes autour des attributs,... Beurk...

    J'espère que tu as aussi prévu de le "rénover" !

    3- Pour ta problématique : je suppose que tu as bien un index auto-incrémenté dans tes table SQL ?

    Donc, après un INSERT, on peut récupérer l'id de la nouvelle ligne grâce à : $pdo->lastInsertId().

    4-
    ...4. l'utilisateur doit ensuite aller sur une page, rescanner le même barre code que précédemment...
    NON : PAS/PLUS besoin !
    Après l'INSERT, et le lastInsertId, il suffit de rediriger automatiquement (header:location) vers la page du formulaire, avec l'id en paramètre :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: pageduformulaire.php?id=' . $id);
    N.B. ça marche aussi avec "barcode" (comme l'indique sabotage), pour peu qu'il soit effectivement unique, mais c'est toujours mieux d'utiliser l'id auto-incrémenté, car il est FORCEMENT unique.

    Et, dans le fichier pageduformulaire.php, tu récupères cet id pour faire une requête, et ré-afficher les données dans ton formulaire.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Merci Jreaux et Sabotage

    Des fois c'est tout simple qu'on y pense pas.

    Concernant l'HTML que tu trouves pas terrible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "<center><span style=background:#FFFFFF><font color=red><b>!! Code déjà scanné !!</b></font></span><br />";
        echo "<center><FONT SIZE=4 FACE=Arial><b>OK<font color='red'>enregistrement en base...</font></font></center>";
    Je n'ai pas encore trouvé comment bien faire un echo avec du html dedans correctement.
    D'un autre côté, il faut savoir aussi, que je dois afficher des choses simples / basiques et que la plupart doivent tourner avec IE6 ! jusqu'à Chrome ou IE11 / Edge.
    En effet, j'ai quelques vieux scanners type motorola qui tournent avec du Windows CE 7 et Windows Mobile 6.5

    Pour le script (la partie recherche en base), je dois adapter mon mysql en PDO, je galère un peu. PDO est assez différent.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2007, 00h11
  2. Réponses: 8
    Dernier message: 30/11/2006, 19h32
  3. Réponses: 4
    Dernier message: 01/10/2006, 16h37
  4. Réponses: 16
    Dernier message: 19/07/2006, 01h16
  5. Insertion directe dans une table
    Par zzinfo dans le forum SQL
    Réponses: 2
    Dernier message: 28/02/2006, 16h17

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