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 :

Récupérer des infos d'une table et en ajouter d'en une autre


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 Récupérer des infos d'une table et en ajouter d'en une autre
    Bonjour,

    Dans le cadre d'une simplification d'un process, j'ai besoin de récupérer des infos d'une base SQL dans une table
    et ensuite d'en ajouter ces éléments récupérés + d'autres fixes dans une autre table.

    A la base, j'ai un formulaire qui doit simplement scanner un barcode, en appuyant sur un bouton valider, cela doit rechercher :
    1. une quantité correspondante au barcode
    2. la référence liée au barcode
    Ensuite :
    1. prendre la quantité + la référence correspondante
    2. insérer ces 2 éléments dans une autre table + des éléments fixes comme l'heure et quelques données fixes.
    Le tout en un seul clic.

    Mon formulaire 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
    <div class="container center">
    <form action="insertandselect.php" method="POST">
        <div class="row">
          <div class="col-25">
            <label for="codebar"><b>Code Barre</b></label>
          </div>
          <div class="col-75">
            <input type="text" name="name" placeholder="Scannez le code barre" autofocus>
    		<input type="hidden" id="quantite" name="quantite">
          </div>
        </div>
        <div class="row">
    	<center>
          <input type="submit" name="submit">
        </center>
    	</div>
      </form>
    Mon code qui ne fonctionne pas :
    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
    <?php
     
    $link = @mysql_connect("localhost", "root", "") or die(mysql_error());
    $codebar = isset($_POST['codebar']) ? $_POST['codebar'] : NULL;
     
    // Check connection
     
      @mysql_query("USE labelprod",$link);
      $query = "SELECT quantity FROM table1 WHERE Barcod = '%$codebar%'";
      $result = @mysql_query($query);
     
      while ($data = @mysql_fetch_object($result)){
          $codebar = $data->Barcod;
     
          @mysql_query("USE labelprod",$link);
          $sql = "INSERT INTO table2 SET
              conso_Barcod = '$codebar',
    	 conso_user = 'donneefixe1',
              quantity = '$quantite'";
     
           if (!@mysql_query($sql)) {
           echo '<p>Erreur ajout dans la base: ' . @mysql_error() . '</p>';
          }
     
      }
     
    // Close connection
    mysql_close($link);
    ?>
    Pouvez vous m'aider svp ?
    Je suis pas un expert, je bidouille en php Mysql et en général je m'en sort... pas cette fois lol
    J'ai fouillé bien évidemment sur Google et ici sans réellement trouver ce que je cherche.
    A noter, que je n'ai pas d'erreurs retournées, j'ai une page blanche qui s'affiche après validation du formulaire.

    Cordialement,
    Merci

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Quelque chose m'échappe peut être, mais là, je ne vois pas l'intérêt de ton formulaire ni même de PHP.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into table2
    select distinct barcod,now(),"donnee_fixe",quantity
    from table 1
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    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 pour la piste.
    Pour le formulaire, c'est simple, il faut penser «utilisateur».

    La personne a un lecteur de code barres dans les mains, elle choisit son action qui est de scanner une étiquette (un clic sur un bouton, ça déclenche l'ouverture d'une page web).
    Il faut bien qu'un «endroit» (le formulaire) via un champ
    Qui soit défini pour que 1. Je récupère l'info et 2. La personne puisse cliquer pour faire son action.
    C'est le clic après scan qui doit effectuer les requêtes de selection et d'ajout en base.

    A moins que je me complique trop la tâche?..

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into table2
    select distinct barcod,now(),"donnee_fixe",quantity
    from table1
    where barcod="123456"

    Je ne sais pas... Est-ce que tu peux travailler ce genre de requête dans ton phpmyadmin pour voir celle qui marche ?
    Ou bien nous donner la structure de table 1 et table 2...
    Le mieux est de partir d'une requête SQL qui fonctionne, et d'introduire tes variables PHP ensuite... et de passer à PDO par la même occasion...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Généralement les douchettes et autres scanner peuvent être paramétrés afin d'insérer automatiquement des caractères lors de la lecture d'un code à barre.
    Il est donc possible d'ajouter par exemple un ENTER et de ce fait de faire sans bouton (même s'il faut le mettre car on ne sait jamais).

    L'exemple ci-dessous appelle la fonction sauvegarde dès qu'on appuie sur la touche Entrée ou qu'on clique sur le bouton. En remplaçant 13 par 109 le caractère "d'envoi" devient le signe moins.

    Le fichier test9445b.php permet d'enregistrer le code à barre et d'afficher en retour la valeur de la dernière entrée.

    Code php : 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
    <!DOCTYPE html>
    <html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
        res = document.getElementById('bc').value;
           $.get('test9445b.php?bc='+res, function(data2) {
      $('#log').html(data2);   
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    Input :
    <input type="text" id="bc" value="" size="30"/>
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>


    test9445b.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php 
    //---- ajout du code de connexion à la BDD et enregistrement des données.
     
    //---- Retour pour affichage de la dernière entrée.
    print $_GET['bc'];
    ?>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    JQuery permet de se passer d'un formulaire html.

    Code php : 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
     
    <!DOCTYPE html>
    <html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
        res = document.getElementById('bc').value;
            $.get('test9445b.php?bc='+res, function(data2) {
      var liste = data2.split('|');
      //console.log(liste);
      if (liste[0] == '0')
      {
        $('#log').html(liste[1]);
      } else
      {
        $('#log').html(liste[1] + ' - ' + liste[2] + ' - Qté=' + liste[3]);
      }
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      //console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    Input :
    <input type="text" id="bc" value="" size="30"/>
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>

    test9445b.php on peut aussi imaginer un message en retour qui indique que le code à barre a déjà été traité.
    Code php : 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
     
     
    <?php 
    //---- Simulation de la recherche dans une table
    function recherche($cb)
    {
     $table  = array();
     //----- données de la table
     $table[] = array('cb'=>'1234','lib'=>'toto','qte'=>10);
     $table[] = array('cb'=>'12345','lib'=>'titi','qte'=>20);
     $table[] = array('cb'=>'123456','lib'=>'tata','qte'=>30);
     $table[] = array('cb'=>'1234567','lib'=>'tutu','qte'=>40);
     $table[] = array('cb'=>'12345678','lib'=>'tete','qte'=>50);
     foreach($table as $article)
     {
      if ($article['cb'] == $cb)
      {
       return $article;
      }
     }
     return false;
    }
    //---- ajout du code de connexion à la BDD et enregistrement des données
    $article = recherche($_GET['bc']);
    if ($article !== false)
    {
     //---- code pour insérer les données dans la table
     
     //---- Retour pour affichage des données
     print '1|'.implode('|',$article); 
    }
    else
    {
     //---- Retour pour affichage de l'erreur
     print '0|'.$_GET['bc']." est inconnu"; 
    }
     
    ?>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si on rajoute du son l'utilisateur devient plus productif puisqu'il peut flasher sans forcément regarder l'écran. C'est le son qui l'alerte pour dire si ok ou ko.
    Les fichiers .wav sont dans le répertoire du script.

    Code php : 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
    <!DOCTYPE html><html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
        res = document.getElementById('bc').value;
            $.get('test9445b.php?bc='+res, function(data2) {
      var liste = data2.split('|');
      //console.log(liste);
      if (liste[0] == '0')
      {
        $('#log').html(liste[1]);
        //son('soundKO');
        document.getElementById('soundKO').play();
      } else
      {
        $('#log').html(liste[1] + ' - ' + liste[2] + ' - Qté=' + liste[3]);
        //son('soundOK');
        document.getElementById('soundOK').play();
      }
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      //console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    function son(id)
    {
     document.getElementById(id).play();
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    <audio id="soundOK">
      <source src="Windows Ding.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    <audio id="soundKO">
      <source src="Windows Background.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    Input :
    <input type="text" id="bc" value="" size="30"/>
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  8. #8
    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
    Citation Envoyé par badaze Voir le message
    Si on rajoute du son l'utilisateur devient plus productif puisqu'il peut flasher sans forcément regarder l'écran. C'est le son qui l'alerte pour dire si ok ou ko.
    Les fichiers .wav sont dans le répertoire du script.

    Code php : 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
    <!DOCTYPE html><html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
        res = document.getElementById('bc').value;
            $.get('test9445b.php?bc='+res, function(data2) {
      var liste = data2.split('|');
      //console.log(liste);
      if (liste[0] == '0')
      {
        $('#log').html(liste[1]);
        //son('soundKO');
        document.getElementById('soundKO').play();
      } else
      {
        $('#log').html(liste[1] + ' - ' + liste[2] + ' - Qté=' + liste[3]);
        //son('soundOK');
        document.getElementById('soundOK').play();
      }
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      //console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    function son(id)
    {
     document.getElementById(id).play();
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    <audio id="soundOK">
      <source src="Windows Ding.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    <audio id="soundKO">
      <source src="Windows Background.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    Input :
    <input type="text" id="bc" value="" size="30"/>
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>
    Merci à toi Badaze
    Je vais tester tout cela et voir ce que ça donne.
    Pour le enter automatique, oui c'est faisable, pour mes tests j'attendais de voir d'abord si je pouvais bien faire mes requêtes.

    Pour répondre à Dendrite
    La structure de mes tables est la suivante (je mets une étoile * aux datas dont j'ai besoin) :
    Table 1 (données à récupérer)
    - Barcode *
    - Quantité *
    - Description

    Table 2 (données à ajouter en base selon sélection de table 1):
    - Barcode *
    - Quantité *
    - Quantité modifiée (dans le futur l'utilisateur pour décrémenter une quantité, un peu comme un inventaire)
    - Localisation *
    - Type *
    - Date Heure *

    Quand l'utilisateur scanne le code barre (pour résumer) :
    1.
    - Je prends le code barre, je recherche en base la quantité correspondante.
    - Je garde ces datas en "mémoire"
    2.
    - J'inscris le codebarre recherché de la table1 dans la table2
    - J'inscris la quantité recherchée de la table1 dans la table2
    - J'inscris l'heure et la date du scannage (j'ai mis la colonne de ma table en autoincrement datetime)
    - J'inscris le type (valeur fixe du genre "scan")
    - J'inscris la localisation (valeur fixe de type "entrepot" ou "stock")

    Si je reprends le code mysql seul, ça devrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into table2
    select distinct barcode,now(),quantity,"scan","entrepot"
    from table1
    where barcod="123456"
    Là ou je pêche c'est comment bien ajout le code php de l'ajout en base :
    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
    <?php 
    //---- Simulation de la recherche dans une table
    function recherche($cb)
    {
     $table  = array();
     //----- données de la table
     $table[] = array('cb'=>'1234','lib'=>'toto','qte'=>10);
     $table[] = array('cb'=>'12345','lib'=>'titi','qte'=>20);
     $table[] = array('cb'=>'123456','lib'=>'tata','qte'=>30);
     $table[] = array('cb'=>'1234567','lib'=>'tutu','qte'=>40);
     $table[] = array('cb'=>'12345678','lib'=>'tete','qte'=>50);
     foreach($table as $article)
     {
      if ($article['cb'] == $cb)
      {
       return $article;
      }
     }
     return false;
    }
    //---- ajout du code de connexion à la BDD et enregistrement des données
    $article = recherche($_GET['bc']);
    if ($article !== false)
    {
     //---- code pour insérer les données dans la table (que je peux mettre en PDO ou mysqli, je tourne en local sur XAMPP)
     
    $sql= @mysql_connect("localhost", "root", "") or die(mysql_error());
    @mysql_query("USE basededonnees",$sql);
          $sql = "insert into table2
    select distinct barcode,now(),quantity,"scan","entrepot"
    from table1
    where barcod="123456";
    
    //---- ou directement comme ça
    $sql= @mysql_connect("localhost", "root", "", "basededonnees") or die(mysql_error());
    @mysql_query($sql);
          $sql = "insert into table2
    select distinct barcode,now(),quantity,"scan","entrepot"
    from table1
    where barcod="123456";
     
     //---- Retour pour affichage des données
     print '1|'.implode('|',$article); 
    }
    else
    {
     //---- Retour pour affichage de l'erreur
     print '0|'.$_GET['bc']." est inconnu"; 
    }
     
    ?>

  9. #9
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Le plus souvent un inventaire se fait à l’aveugle et les données inventoriées sont dans une structure à part qui ne contient que les données de l’inventaire et aucune référence à ce qui peut être en stock ou pas.
    En effet, tu peux avoir un code qui n’est plus dans le stock informatique mais présent dans le stock physique.

    Les écarts ( en + ou en - ) se font par requête SQL entre le stock informatique et ce qui a été inventorié.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Voici un exemple fonctionnant. Utiliser firefox de préférence.

    Les fichiers .wav ne sont pas compris. Tu peux les prendre de ton répertoire Windows/Media si tu utilises Windows et les copier dans le répertoire du script.

    Code php : 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
     
    <!DOCTYPE html>
    <html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
         bc  = document.getElementById('bc').value;
         res = Math.random();
            $.get('test9445b.php?bc='+bc+'&r'+res, function(data2) {
      var liste = data2.split('|');
      if (liste[0] == '0')
      {
        $('#log').html(liste[1]);
        document.getElementById('soundKO').play();
      } else
      {
        $('#log').html(liste[1] + ' - ' + liste[2] + ' - Qté=' + liste[3]);
        document.getElementById('soundOK').play();
      }
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      //console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    function son(id)
    {
     document.getElementById(id).play();
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    <audio id="soundOK">
      <source src="Windows Ding.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    <audio id="soundKO">
      <source src="Windows Background.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    Input :
    <input type="text" id="bc" value="" size="30" required="true" />
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>

    test9445b.php il faut changer les données de connexion à la BDD
    Code php : 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
     
     
    <?php 
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    //---- Recherche si l'article existe dans la base
    function recherche($cb)
    {
     GLOBAL $bdd;
     $query    = "select code, description from articles2 where code = :code";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute();
     if ($prepared->rowCount() == 1)
     {
      $result = $prepared->fetch();
      return [true,$result['description']];
     
     }
     else 
     {
      return [false,'code inconnu'];
     }
    }
    //---- Recherche si l'article existe dans la base
    $article = recherche($_GET['bc']);
    if ($article[0] !== false)
    {
     //---- code pour insérer les données dans la table
     $query    = "insert into inventaire (code, quantite, dateheure) values(:code, 1, Now())";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute(); 
     
     //---- Ramène la quantité totale
     $query    =  "select sum(quantite) as somme from inventaire where code = :code";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute(); 
     $result   = $prepared->fetch();
     
     //---- Retour pour affichage des données
     print '1|'.$_GET['bc'].'|'.$article[1].'|'.$result['somme'];  
    }
    else
    {
     //---- Retour pour affichage de l'erreur
     print '0|'.$_GET['bc']." est inconnu"; 
    }
     
    ?>

    Les fichiers pour créer les tables et tester.
    Fichiers attachés Fichiers attachés
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  11. #11
    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
    Citation Envoyé par badaze Voir le message
    Voici un exemple fonctionnant. Utiliser firefox de préférence.

    Les fichiers .wav ne sont pas compris. Tu peux les prendre de ton répertoire Windows/Media si tu utilises Windows et les copier dans le répertoire du script.

    Code php : 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
     
    <!DOCTYPE html>
    <html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script language="JavaScript" type="text/javascript">
    <!--
    var stopChar = 13;
    function sauvegarde() {
      $(function() {
         bc  = document.getElementById('bc').value;
         res = Math.random();
            $.get('test9445b.php?bc='+bc+'&r'+res, function(data2) {
      var liste = data2.split('|');
      if (liste[0] == '0')
      {
        $('#log').html(liste[1]);
        document.getElementById('soundKO').play();
      } else
      {
        $('#log').html(liste[1] + ' - ' + liste[2] + ' - Qté=' + liste[3]);
        document.getElementById('soundOK').play();
      }
        });
        document.getElementById('bc').value = '';
        donneFocus();
      });
    }
    function donneFocus()
    {
     document.getElementById('bc').focus();
    }
    function onLoad()
    {
     document.getElementById('bc').value = '';
     donneFocus();
     
     document.getElementById('bc').onkeydown = function (e){
      //console.log(e.which);
      if (e.which === stopChar) {
       e.preventDefault();
       sauvegarde();
      }
     }
    }
    function son(id)
    {
     document.getElementById(id).play();
    }
    //-->
    </script>
     
    </head>
    <body  onload="onLoad()">
    <audio id="soundOK">
      <source src="Windows Ding.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    <audio id="soundKO">
      <source src="Windows Background.wav" type="audio/wav">
      Votre navigateur ne prend pas en charge l'élément <code>audio</code>.
    </audio>
    Input :
    <input type="text" id="bc" value="" size="30" required="true" />
    <input type="button" id="bok" value="Ok" onclick="sauvegarde()"/><br/>
    Dernière entrée :
    <div id="log"></div>
    </body>
    </html>

    test9445b.php il faut changer les données de connexion à la BDD
    Code php : 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
     
     
    <?php 
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    //---- Recherche si l'article existe dans la base
    function recherche($cb)
    {
     GLOBAL $bdd;
     $query    = "select code, description from articles2 where code = :code";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute();
     if ($prepared->rowCount() == 1)
     {
      $result = $prepared->fetch();
      return [true,$result['description']];
     
     }
     else 
     {
      return [false,'code inconnu'];
     }
    }
    //---- Recherche si l'article existe dans la base
    $article = recherche($_GET['bc']);
    if ($article[0] !== false)
    {
     //---- code pour insérer les données dans la table
     $query    = "insert into inventaire (code, quantite, dateheure) values(:code, 1, Now())";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute(); 
     
     //---- Ramène la quantité totale
     $query    =  "select sum(quantite) as somme from inventaire where code = :code";
     $prepared = $bdd->prepare($query);
     $prepared->bindParam(':code', $_GET['bc']);
     $prepared->execute(); 
     $result   = $prepared->fetch();
     
     //---- Retour pour affichage des données
     print '1|'.$_GET['bc'].'|'.$article[1].'|'.$result['somme'];  
    }
    else
    {
     //---- Retour pour affichage de l'erreur
     print '0|'.$_GET['bc']." est inconnu"; 
    }
     
    ?>

    Les fichiers pour créer les tables et tester.
    Je viens de tester ton script tel quel, j'ai une erreur "undefined" quand je cherche un code.
    Dernière entrée :
    undefined - undefined - Qté=undefined
    Je vais checker mais je me demande si c'est pas le port de ma BD qui est 3307 au lieu de 3306.

    Je ne vois pas trop d'où cela peut venir.
    Me concernant, la fonction quantité, j'ai un peu de mal à saisir ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     //---- code pour insérer les données dans la table
     $query    = "insert into inventaire (code, quantite, dateheure) values(:code, 1, Now())";
    Le 1 correspond à quoi ?

    et ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     //---- Ramène la quantité totale
     $query    =  "select sum(quantite) as somme from inventaire where code = :code";
    Images attachées Images attachées  

  12. #12
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Merci de tes lumières Badaze, le sujet m'intéresse bien !

    @Flybelgium :

    Quand tu scannes un produit : tu scannes un truc à la fois... donc 1 en dur.
    Je répète ce que te disait Badaze :

    http://www.novastock.fr/inventaire/i...ification.html

    Faire un inventaire exhaustif une fois par an par exemple, c'est comparer le stock réel et le stock théorique.
    Pour cela, il te faut stocker dans une table inventaire_2018 par exemple, tout ce qui est scanné par les employés, sans préjugé. S'ils scannent une cuisse de canard et que l'on n'en vend pas, autant le savoir ! S'ils ne scannent pas de boîtes de thon alors qu'on en a 15 en stock théorique, autant le savoir !
    Donc dans un premier temps, au moment du scan, on n'alimente QUE inventaire_2018, surtout ne rien comparer avec les autres tables.

    inventaire_2018 (id, code_bar, quantity, scan_date)

    Les requêtes ne viennent qu'à la fin, quand tout l'inventaire est terminé, pour dire "Tiens ! tiens ! D'où sortent ces cuisses de canards ??? Ou bien, qu'est-il arrivé aux 15 boîtes de thon ? vol, perte ?"

    edit : je vais m'amuser à faire ces requêtes SQL d'ailleurs. Si l'on ne voulait QUE les différences de code_bar dans un sens ou dans l'autre, ça serait facile. Mais si on veut les quantités différentes sur chaque code_bar... ça se complique pas vrai ? J'aime !
    Table du stock théorique :
    stock (id, code_bar, quantity )
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #13
    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
    Citation Envoyé par Dendrite Voir le message
    Bonjour.
    Merci de tes lumières Badaze, le sujet m'intéresse bien !

    @Flybelgium :

    Quand tu scannes un produit : tu scannes un truc à la fois... donc 1 en dur.
    Je répète ce que te disait Badaze :

    http://www.novastock.fr/inventaire/i...ification.html

    Faire un inventaire exhaustif une fois par an par exemple, c'est comparer le stock réel et le stock théorique.
    Pour cela, il te faut stocker dans une table inventaire_2018 par exemple, tout ce qui est scanné par les employés, sans préjugé. S'ils scannent une cuisse de canard et que l'on n'en vend pas, autant le savoir ! S'ils ne scannent pas de boîtes de thon alors qu'on en a 15 en stock théorique, autant le savoir !
    Donc dans un premier temps, au moment du scan, on n'alimente QUE inventaire_2018, surtout ne rien comparer avec les autres tables.

    inventaire_2018 (id, code_bar, quantity, scan_date)

    Les requêtes ne viennent qu'à la fin, quand tout l'inventaire est terminé, pour dire "Tiens ! tiens ! D'où sortent ces cuisses de canards ??? Ou bien, qu'est-il arrivé aux 15 boîtes de thon ? vol, perte ?"

    edit : je vais m'amuser à faire ces requêtes SQL d'ailleurs. Si l'on ne voulait QUE les différences de code_bar dans un sens ou dans l'autre, ça serait facile. Mais si on veut les quantités différentes sur chaque code_bar... ça se complique pas vrai ? J'aime !
    Table du stock théorique :
    stock (id, code_bar, quantity )
    Merci Dendrite
    Je crois qu'on se complique la vie, ici dans mon cas, ce n'est absolument pas un inventaire.

    En fait, pour être clair, j'ai dans mon exemple, une personne qui doit effectuer l'action suivante :

    - Prendre un carton qui contient quelque chose qui se situe toujours au même endroit.
    - Le scanner et éventuellement appuyer sur valider (sauf si je mets auto enter dans mon scan).
    - Fin
    ->> tout le boulot se fait en arrière plan via mes requêtes.

    Ce carton en question est déjà encodé dans ma Table1 avec toutes les infos dont j'ai besoin dont le barcode et la quantité + d'autres infos.
    Je dois donc simplement faire un formulaire avec un champ pour récupérer le code barre (colonne Barcode) de Table1,
    scanner la BDD pour qu'il me trouve la ligne correspondante avec l'élément Quantité (Colonne Qty).
    Avec ces éléments que je sélectionne, j'injecte cela dans une autre table2 avec ces variables + des données fixes qui sont toujours les mêmes.

    Voilà le code que je compte effectuer sauf que j'ai des erreurs de syntaxe et je n'arrive pas à récupérer mes variables grrrrr :
    INDEX.PHP (formulaire) qui m'affiche aussi les 10 dernières lignes de ma table
    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
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Tests 3</title>
        </head>
        <style>
        form
        {
            text-align:center;
        }
        </style>
        <body>
     
        <form action="post.php" method="post">
            <p>
            <label for="barcode">Code Barre</label> : <input type="text" name="barcode" id="barcode" /><br />
     
            <input type="submit" value="Envoyer" />
    	</p>
        </form>
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost:3307;dbname=bddtest;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // Récupération des 10 derniers messages
    $reponse = $bdd->query('SELECT * FROM Table1 ORDER BY ID DESC LIMIT 0, 10');
     
    // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
    while ($donnees = $reponse->fetch())
    {
    	echo '<p><strong>' . htmlspecialchars($donnees['barcode']) . '</strong> : ' . htmlspecialchars($donnees['quantite']) . '</p>';
    }
     
    $reponse->closeCursor();
     
    ?>
        </body>
    </html>
    Ensuite mon fichier POST.PHP qui est censé faire toutes les requêtes (je précise que ma requete SQL fonctionne très bien dans PhpMyadmin) :

    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
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost:3307;dbname=bddtest;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    
    // Insertion dans la base
    $req = $bdd->prepare('insert into table2 (barcode, Qty, datetime, process, user)
    SELECT distinct barcod, Qty, now(), "C", "robert"
    from table1
    where barcode = '.$barcode.' '); /// ici ça coince
    
    $req->execute(array($_POST['barcode']));
    
    // Redirection du visiteur
    header('Location: test3.php');
    ?>

  14. #14
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon alors, avant de revenir à ton code, je veux savoir la fin, le but final...
    Pourquoi l'employé scanne-t-il ton produit du coup, si ça n'est pas pour un inventaire ?
    Pour dire quoi à la base ? que le produit sort, que le produit entre, que le produit quoi ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  15. #15
    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
    Citation Envoyé par Dendrite Voir le message
    Bon alors, avant de revenir à ton code, je veux savoir la fin, le but final...
    Pourquoi l'employé scanne-t-il ton produit du coup, si ça n'est pas pour un inventaire ?
    Pour dire quoi à la base ? que le produit sort, que le produit entre, que le produit quoi ?
    C'est simple, dans un premier temps ici, l'employé scanne le produit pour simplement qu'on sache qu'il a scanné :
    - Quoi (barcode, quantité)
    - Quand
    - Depuis l'endroit défini (il n'y qu'un scan affecté à cet endroit)
    - Type de scannage (ici en l'occurrence la colonne process qui est un type de process interne comme "je fais ce travail qui s'appelle "scan").
    Le but premier est que moi je puisse avoir les infos, mais surtout que l'utilisateur n'aie rien à rentrer car je sais à l'avance ce qu'il va faire.
    J'aurai pour cela deux "environnements" : 1 = scannage 2 = consommation (une page formulaire par environnement)

    EX: Barcode = 010101010101 / Quantité existante = 150
    Je scanne -> ça reprends de la table1 > les variables Barcode = 010101010101 / Quantité existante = 150 / date/heure + données fixes endroit + user
    qui doivent s'insérer dans la table2 dans les colonnes correspondantes.
    EX: Barcode = 010101010101 / Quantité existante = 150 / 16/07/2017-10h00 / entrepot / robert
    L'unique but est simple, savoir quel carton existant il a pris, à quelle heure, de oû, quand et qui (je dois juste avoir une inscription en BDD).

    Ensuite, le but final est que dans la boite, il y a par exemple 150 quantités (des fruits, des pralines par exemple) qu'il doit consommer (vendre, donner, manger, peu importe quoi il consomme quelque chose).
    Mon second script que je dois encore faire est que quand il a fini de consommer (peut être 2 semaines plus tard), il vienne rentrer la quantité restante en faisant :
    - Scan du barcode
    - Entrer la quantité restante
    - Valider
    >> le futur script va alors faire un peu la même chose que le premier > récupérer le barcode, la quantité de départ, la quantité finale (variable à récup), les éléments fixes, la date/heure et décrémenter la table2 avec dans chaque colonne la quantité de départ (qui sera déjà inscrite vu qu'il aura scanné) et la quantité de fin.

    Merci

  16. #16
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    @flybelgium
    Il faut mettre tes propres identifiants pour la base de données. Si tu laisses les miens c’est normal que ça renvoie undefined.

    Le 1 correspond à la quantité.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  17. #17
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Bonjour.
    Merci de tes lumières Badaze, le sujet m'intéresse bien !

    @Flybelgium :

    Quand tu scannes un produit : tu scannes un truc à la fois... donc 1 en dur.
    Je répète ce que te disait Badaze :

    http://www.novastock.fr/inventaire/i...ification.html
    J’ai quand même bien simplifié. Normalement lors du déclenchement d’un inventaire on fait une photographie du stock et on bloque le stock informatique afin que personne ne puisse le modifier.

    De même généralement on peut être amenés à faire plusieurs comptages. Par exemple dans le second comptage on recompte les emplacements sur lesquels il y a une différence entre le stock théorique et le stock au premier comptage. Si le second comptage est conforme au premier c’est acté sinon on fait un troisième, etc... Dans la pratique on ne va pas au delà de 3 comptage et déjà à 3 ceux qui ont compté se font enguirlander.

    Une fois que tout est bien compté on reprend la photographie du stock on lui applique les différences et on remplace le stock informatique.

    Maintenant il y a de moins en moins d’inventaires fiscaux (annuels) car cela peut bloquer un dépôt pendant 1 semaine s’il est très grand et/ou gère beaucoup de références sans compter le fait que ça coûte cher (location de matériels, personnel supplémentaire, etc...). Les entreprises préfèrent maintenant les inventaires dits tournants qui se font tout au long de l’année et qui ne nécessitent donc pas l’arrêt de l’activité. Le principe étant que chaque article et chaque emplacement doit être compté au moins une fois. L’astuce étant pour les gestionnaires de stocks d’inventorier en premier les références qui ont le moins de stock à l’instant t et les emplacements vides !

    Une dernière chose. On n’utilise jamais directement la donnée qui correspond à un code à barre. En effet, dans 99,9999% des cas un code EAN (la donnée qui est sur les codes à barre des produits qu’on achète) ne correspond pas à un code article présent dans la base de données. Pourquoi ? Parce qu’il y a plusieurs niveaux. Par exemple, une bouteille de vin aura un code EAN. Le carton de 6 en aura un autre et la palette de je ne sais combien de carton aura le sien. Donc au final si je saisis l’EAN d’un carton, il faut que cela compte pour 6 bouteilles.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  18. #18
    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
    Citation Envoyé par badaze Voir le message
    J’ai quand même bien simplifié. Normalement lors du déclenchement d’un inventaire on fait une photographie du stock et on bloque le stock informatique afin que personne ne puisse le modifier.

    De même généralement on peut être amenés à faire plusieurs comptages. Par exemple dans le second comptage on recompte les emplacements sur lesquels il y a une différence entre le stock théorique et le stock au premier comptage. Si le second comptage est conforme au premier c’est acté sinon on fait un troisième, etc... Dans la pratique on ne va pas au delà de 3 comptage et déjà à 3 ceux qui ont compté se font enguirlander.

    Une fois que tout est bien compté on reprend la photographie du stock on lui applique les différences et on remplace le stock informatique.

    Maintenant il y a de moins en moins d’inventaires fiscaux (annuels) car cela peut bloquer un dépôt pendant 1 semaine s’il est très grand et/ou gère beaucoup de références sans compter le fait que ça coûte cher (location de matériels, personnel supplémentaire, etc...). Les entreprises préfèrent maintenant les inventaires dits tournants qui se font tout au long de l’année et qui ne nécessitent donc pas l’arrêt de l’activité. Le principe étant que chaque article et chaque emplacement doit être compté au moins une fois. L’astuce étant pour les gestionnaires de stocks d’inventorier en premier les références qui ont le moins de stock à l’instant t et les emplacements vides !

    Une dernière chose. On n’utilise jamais directement la donnée qui correspond à un code à barre. En effet, dans 99,9999% des cas un code EAN (la donnée qui est sur les codes à barre des produits qu’on achète) ne correspond pas à un code article présent dans la base de données. Pourquoi ? Parce qu’il y a plusieurs niveaux. Par exemple, une bouteille de vin aura un code EAN. Le carton de 6 en aura un autre et la palette de je ne sais combien de carton aura le sien. Donc au final si je saisis l’EAN d’un carton, il faut que cela compte pour 6 bouteilles.
    Je connais bien les inventaires pour avoir bossé pour des grands comptes
    Dans mon cas ici pour les EAN, j'en ai uniquement sur les cartons, donc pas besoin du reste. C'est des codes à barre internes qui indique les références initiales (quand il a été fabriqué, où, le type, etc...).

    Pour l'erreur undefined, j'ai bien mes codes à moi, ce sont les miens ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost:3307;dbname=bddtest;charset=utf8', 'root', '');
    En gros j'ai copié collé ton code et adapté avec mes datas.
    J'ai modifié uniquement la connexion SQL et les données de table.
    Les variables "bc" , j'ai laissé dans le formulaire.

    Quand j'analyse, je pense que le soucis doit se situer dans php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute(array($_POST['barcode']));
    Je ne "comprends" pas le array, qui, si je suis logique, est censé récupérer la variable "barcode" scannée dans le formulaire.

    Je vais utiliser ton code initial pour l'adapter avec mon étape suivante :
    1. Scan Code Barre
    >> il affiche en dessous les données actuelles sur une ligne
    2. La quantité finale qu'il reste (la personne rentre manuellement dans le champ la quantité).
    3. Bouton valider qui reprends les données actuelles de la table1 (uniquement de l’acquisition de data + l'ajout de la quantité saisie et infos de table1 dans table2
    Dans ma table2, j'ai deux colonnes "Qty d'avant" et "Qty d'après".
    J'arrive à le faire en mysql pur mais avec le mix php, jquery, etc... c'est plus compliqué pour moi. Je suis très autodidacte et j'aime comprendre

    Dans tous les cas, déjà MERCI à vous !

  19. #19
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faudrait que tu postes le code que tu utilises parce que j’utilise $_GET et non pas $_POST
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  20. #20
    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
    Citation Envoyé par badaze Voir le message
    Il faudrait que tu postes le code que tu utilises parce que j’utilise $_GET et non pas $_POST
    En fait, j'ai utilisé un autre code et j'ai fait un amalgame... Je mets les sources en dessous pour ceux et celles intéressés.

    Autre question, je dois maintenant récupérer les infos de ma table via un formulaire :
    1. Le code barre (via un scan).
    2. La quantité (qui résulte du scanning).
    >> l'afficher sur la page
    3. Afficher un champ "Nouvelle quantité" qui permets d'indiquer la quantité
    4. Un bouton valider pour inscrire les datas en base (en l’occurrence ici, uniquement la nouvelle quantité qui s'inscrit dans un row spécifique + des données fixes).

    Afin d'éviter des chargements de pages, je pensai justement à Jquery pour afficher dynamiquement les datas sous le champ codebarre
    mais aussi récupérer les infos de nouvelle quantité et données fixes.

    J'avais dans l'idée de :
    1. Rechercher la quantité via le code barre
    2. Masquer le bouton de recherche une fois le résultat affiché
    3. Afficher un nouveau bouton (modifier la quantité) en dessous de nouvelle quantité pour valider le tout.
    Est-ce faisable en une seule page ?

    Actuellement, je fais cela en 3 étapes et je trouve ça vraiment naze.
    1. Formulaire de recherche
    2. Affichage des données dans une nouvelle page avec un bouton modifier
    3. Il affiche les données où j'ai un champ "Nouvelle quantité + les infos récupérées en "disabled"
    4. J'arrive pas à récupérer les infos de ce formulaire et les insérer en base.

    Formulaire :
    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
    <div class="container center">
    <form action="result.php" method="POST">
        <div class="row">
          <div class="col-25">
            <label for="codebar"><b>Code Barre</b></label>
          </div>
          <div class="col-75">
            <input type="text" name="name" placeholder="Scannez le code barre" autofocus>
    		<input type="hidden" id="quantite" name="quantite">
          </div>
        </div>
        <div class="row">
    	<center>
          <input type="submit" name="submit">
        </center>
    	</div>
      </form>
    Résultats du formulaire
    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
    <?php
    $conn = @mysql_connect("localhost", "root", "");
    @mysql_select_db("bddtest", $conn);
    //search code
    //error_reporting(0);
    if($_REQUEST['submit']){
    $name = $_POST['name'];
     
    if(empty($name)){
    	$make = '<h4> ! Entrez un code barre pour rechercher !</h4>';
    }else{
    	$make = '<h4>! Pas de résultats trouvé !</h4>';
    	$select = "SELECT * FROM table WHERE barcod LIKE '%$name%'";
    	$result = mysql_query($select);
     
    	if($mak = mysql_num_rows($result) > 0){
    		while($row = mysql_fetch_assoc($result)){
    		echo '<h4> Quantité	: '.$row['conso_Qty'];
    		echo '<br> Barcode: '.$row['conso_Barcod'];
    	    echo '<td><a href="edit.php?id=' . $row['id'] . '">modifier la quantité</a></td>';
    		echo '</h4>';
    	}
    }else{
    echo'<h2> Résultats de recherche</h2>';
     
    print ($make);
    }
    mysql_free_result($result);
    mysql_close($conn);
    }
    }
     
    ?>
    Fichier editer.php (qui vient d'un script que j'ai trouvé sur le net)
    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
    <?php
    function renderForm($id, $codebarre, $quantite, $quantite2, $error)
    {
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>Editer</title>
    </head>
    <body>
    <?php
    // if there are any errors, display them
    if ($error != '')
    {
    echo '<div style="padding:4px; border:1px solid red; color:red;">'.$error.'</div>';
    }
    ?>
    <center>
    <form action="" method="post">
    <div>
    <p><strong>ID:</strong> <?php echo $id; ?></p>
    <strong>Code Barre:</strong><input type="text" name="codebarre" value="<?php echo $codebarre; ?>"disabled><br/>
    <strong>Quantité actuelle: </strong> <input type="text" name="quantite" value="<?php echo $quantite; ?>"disabled><br/>
    <strong>Quantité: *</strong> <input type="text" name="quantite2" value="<?php echo $quantite; ?>"/><br/>
    <input type="submit" name="submit" value="VALIDER" class="btn btn-primary">
    </div>
    </form>
    </center>
    <script type="text/javascript">
    $("input:text:visible:first").focus();
    </script>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
      <!-- <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> -->
      <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
      <!--[if lte IE 6]>
      <script type="text/javascript" src="js/bootstrap-ie.js"></script>
      <![endif]-->
      <script type="text/javascript">
      </script>
    </body>
    </html>
    <?php
    }
    // connect to the database
    include('connect-db.php');
    // check if the form has been submitted. If it has, process the form and save it to the database
    if (isset($_POST['submit']))
    {
    // confirm that the 'id' value is a valid integer before getting the form data
    // if (is_numeric($_POST['id']))
    {
     
    // get form data, making sure it is valid
    $id = $_POST['id'];
    $codebarre = mysql_real_escape_string(htmlspecialchars($_POST['codebarre']));
    $quantite = mysql_real_escape_string(htmlspecialchars($_POST['quantite']));
    $quantite2 = mysql_real_escape_string(htmlspecialchars($_POST['quantite2']));
     
    // check that firstname/lastname fields are both filled in
    if ($codebarre == '' || $quantite == '')
    {
     
    // generate error message
    $error = 'ERROR: Please fill in all required fields!';
     
    //error, display form
    renderForm($id, $codebarre, $quantite, $quantite2, $error);
    }
     
    else
     
    {
     
    // save the data to the database
    mysql_query("UPDATE table SET conso_UpdateQty='$quantite2', conso_process='R'")
     
    or die(mysql_error());
     
    // once saved, redirect back to the view page
    header("Location: consoquantite.php");
     
    }
     
    }
     
    // if the 'id' isn't valid, display an error
    echo 'Error!';
    }
     
    else
    // if the form hasn't been submitted, get the data from the db and display the form
     
    {
     
    // get the 'id' value from the URL (if it exists), making sure that it is valid (checing that it is numeric/larger than 0)
    if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0)
    {
     
    // query db
    $id = $_GET['id'];
    $result = mysql_query("SELECT * FROM table WHERE id=$id")
    or die(mysql_error());
    $row = mysql_fetch_array($result);
     
    // check that the 'id' matches up with a row in the databse
     
    if($row)
    {
     
    // get data from db
    $codebarre = $row['conso_Barcod'];
    $quantite = $row['conso_Qty'];
    $quantite2 = $row['conso_Qty'];
     
    // show form
    renderForm($id, $codebarre, $quantite, $quantite2, '');
    }
     
    else
    // if no match, display result
    {
    echo "No results!";
     
    }
     
    }
     
    else
     
    // if the 'id' in the URL isn't valid, or if there is no 'id' value, display an error
     
    {
     
    echo 'Error!';
     
    }
     
    }
     
    ?>

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/10/2011, 13h48
  2. [MySQL] Insérer des données dans une table, mais ce n'est pas une table USER
    Par amerex dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/08/2008, 00h01
  3. Accéder à une table dont le nom est dans une table
    Par claralavraie dans le forum Oracle
    Réponses: 7
    Dernier message: 26/12/2006, 15h51
  4. UPDATER le champ d'une table 1 avec le champ d'une table 2
    Par alain.dissoir dans le forum Oracle
    Réponses: 2
    Dernier message: 08/06/2005, 13h07

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