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 :

difficulté de lecture de la base données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut difficulté de lecture de la base données
    Bonjour à tous!

    je suis nouveau en php mysql et j'utilise la version mysqli, car mysql n'est pas supporté dans mon wampserver.

    J'ai toujours un problème dans les clauses where, je rencontre souvent des erreurs de type parse error.

    Voici un exemple de difficulté, j'utilise ce code pour pouvoir afficher la fiche individuelle d'un matériel en entrant comme choix la catégorie, le type et un serial number.
    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
     
    <?php
    include 'connect.php';
    ?>
    <?php
            if(isset($_POST['cat']) && isset ($_POST['type']) && isset($_POST['sn']))
            {
            $cat=$_POST['cat'];
            $type=$_POST['type'];
            $sn=$_POST['sn'];
            echo $cate; /*  ( designation=" ' . mysqli_real_escape_string($db,$cate) . '" ) AND (type=" ' . mysqli_real_escape_string($db,$tip) . '" ) AND*/
    $select = 'SELECT partnumber,type,designation,nsn,serialnumber,position,dispo,datedemise,description  FROM materiel WHERE designation=" ' . mysqli_real_escape_string($db,$cat) . '" AND type=" ' . mysqli_real_escape_string($db,$tip) . '" AND serialnumber="'.mysqli_real_escape_string($db,$sn).'"    ';
     
    $result = $db->query($select)or die ('An error has been detected  ['. $db->error . ']');
     
     
     
    $data = mysqli_fetch_assoc($result);
    if($data) {
     
    echo"<p><label >Cate&eacute;gorie/D&eacute;signation:</label> ".$data['designation']." ";
     
      echo " </p>
        <br /><p>
         <label >Type:</label> ".$data['type']."";
        echo "</p>
       <br /><p>
         <label>Part Number:     </label> ".$data['partnumber']."";
         echo "           <label ><u>NSN:</u></label>".$data['nsn']."";
        echo "</p>
       <br /><p>
         <label >Num&eacute;ro de s&eacute;rie:</label> ".$data['serialnumber']."";
         echo "</p>
       <br/><p>
         <label >Date de mise en service:</label> ".$data['datedemise']."";
        if ($data['dispo']==0) $disp="indisponible";echo" </p>
       <br/><p>
         <label >Etat:</label> ".$disp."           ";
         echo"</tab><label >Position:</label> ".$data['position']."";
     echo" </p>
       <br/><p>
          
         <label >Caract&eacute;ristiques techniques:</label> ".$data['description']."";
    echo"</p>";
    }
    else die ('There was an erreur  ['. $db->error . ']');
    }
    else echo 'oups!!!'
    ?>
    Je trouve toujours les erreurs reliées à la requête $sql à cause de la syntaxe

    Merci d'avance! Je galère vraiment avec ce machin!

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    Sans vouloir vous froisser, c'est vous qui en faîtes un "machin" !

    Simplifiez votre chaine en procédant par étapes :
    - Faites d'abord les "mysqli_real_escape_string()" de vos variables !
    - Faites ensuite votre select qui devrait ressembler à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = " SELECT * FROM materiel WHERE designation='$cat' AND type='$tip' AND serialnumber='$sn' " ;
    Par ailleurs, l'instruction suivante est irréfléchie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['cat']) && isset ($_POST['type']) && isset($_POST['sn']))
    Quand on fait un submit $_POST est 'alimenté'. Vos variables sont peut-être vides, mais existent toutes bel et bien ! (sauf peut-être le submit lui-même chez IE)
    Tester l'existence d'une seule devrait suffire ! En revanche vous devez vérifier qu'elles ne sont pas vides ! (ce n'est pas la même chose)...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Essai
    Citation Envoyé par iakou Voir le message
    Bonjour.

    Sans vouloir vous froisser, c'est vous qui en faîtes un "machin" !

    Simplifiez votre ordre en procédant par étapes :
    - Faites d'abord les "mysqli_real_escape_string()" de vos variables !
    - Faites ensuite votre select qui devrait ressembler à cela :
    $select = " SELECT * FROM materiel WHERE designation='$cat' AND type='$tip' AND serialnumber='$sn' " ;
    j ' ai essayé le code suivant vos conseil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_POST['cate']) && isset ($_POST['tip']) && isset($_POST['snu']))
    		{ 
    		$cate=". mysqli_real_escape_string(,$db,$_POST['cate']."; // line 69
    		$tip= " . mysqli_real_escape_string($db,$_POST['tip']).";
    		$snu=". mysqli_real_escape_string($db,$_POST['snu']).";
     
    $select = "SELECT * FROM materiel WHERE designation='$cate' AND type='$tip' AND serialnumber='$snu'  ";
    mais ça m a renvoyé l 'erreur suivant
    ( ! ) Parse error: syntax error, unexpected 'cate' (T_STRING) in C:\wamp\www\testmp\fiche_indiv.php on line 69

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Citation Envoyé par iakou Voir le message
    Par ailleurs, l'instruction suivante est irréfléchie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['cat']) && isset ($_POST['type']) && isset($_POST['sn']))
    Quand on fait un submit $_POST est 'alimenté'. Vos variables sont peut-être vides, mais existent toutes bel et bien ! (sauf peut-être le submit lui-même chez IE)
    Tester l'existence d'une seule devrait suffire ! En revanche vous devez vérifier qu'elles ne sont pas vides ! (ce n'est pas la même chose)...
    Sûrement pas !!!
    Il n'y a absolument aucune certitude quant à l'existence des variables du tableau $_POST, absolument aucune.
    Toutes les données transmises par un client sont bidouillables, TOUTES.

    Avant d'utiliser une valeur d'un des tableaux globaux : $_GET $_POST $_COOKIE... sauf à la rigueur $_SESSION, il faut obligatoirement s'assurer de l'existence de chaque clé dans le tableau. Et en plus il faut s'assurer que le type de la variable récupéré correspond au type attendu par le script.

    EDIT : isset() est factorisable ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['cat'], $_POST['tip'], $_POST['sn'])

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( isset($_POST['cate']) )
         {
         $cate = mysqli_real_escape_string($db, $_POST['cat']) ;
         $tip = mysqli_real_escape_string($db, $_POST['type']) ;
         $snu= mysqli_real_escape_string($db, $_POST['sn']) ; 
         $select = "SELECT * FROM materiel WHERE designation='$cate' AND type='$tip' AND serialnumber='$snu'  "
    Apparemment vous n'avez pas eu le courage de regarder dans la doc ce que faisait mysqli_real_escape_string...

    ATTENTION : Vous avez modifié des choses: 'cat' est devenu 'cate', quant à 'sn' il est maintenant 'snu'... vous avez aussi change "type" dans le formulaire ????...
    C'est inutile de faire cela. je vous conseille de garder toujours les mêmes noms sinon vous aller vous mélanger les pinceaux.
    Par exemple, il ne peut y avoir de confusion entre $cat et $_POST['cat']... ce sont 2 variable différentes...

    PS : Avez-vous lu ce que je vous ai dit à propos de ISSET ?...

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Toutes les données transmises par un client sont bidouillables
    Les "bidouiller" je le conçois (Tamper Data) mais les supprimer ???
    Possible ou pas ?
    Vous êtes au moins d'accord que quand on fait un submit (sans bidouiller) toutes les variables existent, même si elles sont vides ? Non ?...

    De toute manière ISSET c'est juste pour voir si on a bien eu le submit ! Il n'y a pas péril en la demeure !
    Et si on flinguait les variables POST, on pourrait plus les "bidouiller" ( ça n'a aucun sens votre histoire... )
    En revanche vérifier que les variables ne soient pas vides, est plus intéressant !

    Voici un excellent article sur le sujet : http://www.expreg.com/expreg_article...rt=isset_empty

    PS : et qd on a un FORMULAIRE avec 50 zones de saisie on fait 50 Isset...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut essai
    Citation Envoyé par iakou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( isset($_POST['cate']) )
         {
         $cate = mysqli_real_escape_string($db, $_POST['cat']) ;
         $tip = mysqli_real_escape_string($db, $_POST['type']) ;
         $snu= mysqli_real_escape_string($db, $_POST['sn']) ; 
         $select = "SELECT * FROM materiel WHERE designation='$cate' AND type='$tip' AND serialnumber='$snu'  "
    Apparemment vous n'avez pas eu le courage de regarder dans la doc ce que faisait mysqli_real_escape_string...

    ATTENTION : Vous avez modifié des choses: 'cat' est devenu 'cate', quant à 'sn' il est maintenant 'snu'... vous avez aussi change "type" dans le formulaire ????...
    C'est inutile de faire cela. je vous conseille de garder toujours les mêmes noms sinon vous aller vous mélanger les pinceaux.
    Par exemple, il ne peut y avoir de confusion entre $cat et $_POST['cat']... ce sont 2 variable différentes...

    PS : Avez-vous lu ce que je vous ai dit à propos de ISSET ?...
    je l'ai lu et j'ai lu aussi le doc sur mysqli-real_escape_strning
    j'ai essayé le code suivant
    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
     <?php 
    		if(!empty($_POST['cate']) && !empty ($_POST['tip']) && !empty($_POST['snu']))
    		{
    		if(isset($_POST['cate']) && isset ($_POST['tip']) && isset($_POST['snu']))
    		{ 
    		$cate=$db->real_escape_string($_POST['cate']);
    		$tip= $db->real_escape_string($_POST['tip']);
    		$snu=$db->real_escape_string($_POST['snu']);
     
    $select = "SELECT * FROM materiel WHERE `designation`='$cate' AND `type`='$tip' AND `serialnumber`='$snu'  ";
     
    $result = $db->query($select)or die ('An error has been detected  ['. $db->error . ']');
     
     
     
    $data = mysqli_fetch_assoc($result);
    if($data) {
     
    echo"<p><label >Cate&eacute;gorie/D&eacute;signation:</label> ".$data['designation']." ";
     
      echo " </p>
        <br /><p>
         <label >Type:</label> ".$data['type']."";
        echo "</p>
       <br /><p>
         <label>Part Number:     </label> ".$data['partnumber']."";
         echo "           <label ><u>NSN:</u></label>".$data['nsn']."";
        echo "</p>
       <br /><p>
         <label >Num&eacute;ro de s&eacute;rie:</label> ".$data['serialnumber']."";
         echo "</p>
       <br/><p>
         <label >Date de mise en service:</label> ".$data['datedemise']."";
        if ($data['dispo']==0) $disp="indisponible";echo" </p>
       <br/><p>
         <label >Etat:</label> ".$disp."           ";
         echo"</tab><label >Position:</label> ".$data['position']."";
     echo" </p>
       <br/><p>
         
         <label >Caract&eacute;ristiques techniques:</label> ".$data['description'].""; 
    echo"</p>";
    }
    else die ('There was an erreur  ['. $db->error . ']');
    }
    else echo 'oups!!!';
    }
    else echo 'vide!!!';
     
    ?>
    il a affiché la page mais y a encore des erreurs
    Nom : erreur.JPG
Affichages : 125
Taille : 118,2 Ko

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Vous devez tester le retour de mysqli_fetch_array
    ou faire une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( $data !== NULL )

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut merci
    merci bcp c resolu avant de faire ça
    j ai procédé comme je vs ai dit avant et j ai remplacé * par les attributs designation, type etc;
    si vous pouvez m'aider encore avec ce sujet
    http://www.developpez.net/forums/d14...s/#post7901146

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Cela ne venait pas de là !...
    SELECT * signifie toutes les colonnes, il y avait donc forcément les vôtres ! ...

    Vous avez dû corriger "aut-chose" !... L'astérique ne gêne pas, au contraire il évite les fautes d'orthographe !

    PS : Non seulement j'aide, et on voudrait me faire passer des vessies pour des lanternes !... Hummm....

    LESS IS MORE !...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA : lecture d'une base de données SQL *.gdb
    Par _Nimy_ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2008, 11h16
  2. Lecture dans la base de donnée et thread
    Par abbd dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/01/2008, 09h56
  3. [MySQL] pb de lecture de la base de donnée
    Par johnny.dslsnuages dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/07/2006, 23h15
  4. [C#]Lecture d'une base de donnée
    Par crawling5 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/04/2006, 17h53
  5. [VB]Lecture dans une base de donnée posant problème
    Par polo-j dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/03/2006, 00h16

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