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 :

Lire une ligne sur la bdd [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Par défaut Lire une ligne sur la bdd
    Bonjour, me revoilà !

    Même si je suis heureux d’être la, je préférerais être du coter de ceux qui aide, que de ceux qui demande

    Bonc, donc mon problème est le suivant :

    J'ai effectuer un submit avec la valeur d'un id , cette idée contient par exemple la valeur 3 , et doit permettre de recherche une ligne dans la bdd , et par la suite d'afficher toutes les informations de celle ci .

    Mais , sa ne marche pas.

    Voici l'erreur :

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in F:\SI6\PROJET\tls-auto\www\admin\liremail.php on line 16
    Et voici le fameux code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    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
    <html>
    <body>
    <?php 
    include("includes/connexionBdd.php");	
     
       $idd = ($_GET['id']); 
    	//$id = intval(mysql_real_escape_string(($_POST['id'])));
       $data=mysql_query ("SELECT * FROM 'messages' WHERE id=".$idd);
     
     
    				//Récupération des résultats
     
    			while ($data = mysql_fetch_assoc($data)){
     
    			if (mysql_num_rows($data) == 0) {
       echo "Aucune ligne trouvée, rien à afficher.";
     
    }		
           echo "Test de la valeur transmises:".$idd; 
     
    	echo"
            	<fieldset>
                    <div class='widget'>
                        <div class='title'><img src='images/icons/dark/alert.png' alt='' class='titleIcon' /><h6>Lecture du message</h6></div>
    					<div class='formRow'>
                            <label>Expediteur</label>
    
                            
                           ".$data['mail']."
                                    
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Date:</label>
    
                            <div class='formRight searchDrop'>
                            <label>".$data['jjmmaa']."</label>
                            </div>             
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Nom:</label>
    
                            <div class='formRight searchDrop'>
                            <label>".$data['nom']."</label>
                            </div>             
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Adresse:</label>
    
                            <div class='formRight searchDrop'>
                            <label>".$data['adresse']."</label>
                            </div>             
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Numéro de telephone:</label>
    
                            <div class='formRight searchDrop'>
                            <label>".$data['telephone']."</label>
                            </div>             
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Objet du message:</label>
    
                            <div class='formRight searchDrop'>
                            <label>".$data['sujet']."</label>
                            </div>             
                            <div class='clear'></div>
                        </div>
    						<div class='formRow'>
                            <label>Message:</label>
    
                            <div class='formRight searchDrop'>
                            ".$data['message']."
                            </div>             
                            <div class='clear'></div>
                        </div>
    					 </div>  
    					</fieldset>
    				
    					<div class='body textC'>
                   <table align='center'>
    					   <th width='600px' ><form method='post' action='envoiemail.php'>
           <input type='hidden' name='id'  value='".$data['id']."'>
           <input type='submit'   alt='repondre' name='repondre' title='repondre' value='Répondre' class='button blueB'>
           </form></th>
    	   <th>&nbsp;&nbsp;&nbsp;</th>
                  <th > <form method='post' action='supression.php'>
           <input type='hidden' name='id'  value='".$data['id']."'>
           <input type='submit'   alt='supprimer' name='supprimer' title='Supprimer'  value='Supprimer' class='redB'>
           </form></th>
    	   }
    	   </table>
    	   </div>";}?>
    </body> 
    </html>
    J'ai beaucoup de mal avec ces erreurs....

    Je vous remercie d'avance de votre futur aide.

    Bonne fin de soirée ou bonne journée

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    C'est quoi ces quotes autour de 'message' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $data=mysql_query ("SELECT * FROM messages WHERE id=".$idd);
    Même type de message que tout à l'heure. Cette fois-ci mysql_fetch_assoc attend une ressource (le résultat d'une requête) et il a un boolean à traiter. En effet mysql_query retourne false (un boolean) en cas d'erreur.
    Tu devrais faire afficher les erreurs pendant la phase de développement. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query= "SELECT * FROM messages WHERE id=".$idd;
    $data = mysql_query ($query) or die(mysql_error());
    Et puis là tu as une grosse faille de sécurité (injection sql). En effet toutes les variables doivent être protégées par mysql_real_escape_string sauf éventuellement quand on peut typer une variable en entier et donc ici tu pourrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query= "SELECT * FROM messages WHERE id=".intval($idd);
    et si la variable n'est pas un entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query= "SELECT * FROM messages WHERE toto='".mysql_real_escape_string($var)."'";
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query= "SELECT * FROM messages WHERE toto=".mysql_real_escape_string($var);
    ce dernier code contient une faille de sécurité (injection sql) majeure.

    Faudrait bosser un peu plus mysql sur des tutos et tester des exemples avant de faire du développement sinon tu vas faire un site qui tiendra pas longtemps avant de se faire pirater

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

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

    Effectivement, comme le signal ABCIWEB tu commets pas mal d'erreurs.

    La 1ère erreur c'est que tu ne consulterais pas la doc (en ligne) de Php, c'est pourtant le reflexe que devrait avoir tous débutants (les codeurs avertis et expert le font je t'assure).

    Lorsque tu exploite une fonction, il te faut regarder la doc pour au moins savoir si celle-ci attend des paramètres, leur type, etc ...
    De même de savoir s'il y a une valeur de retour, si c'est le cas son type de donnée.
    Puis qu'est-ce qu'il se passe en cas d'erreur.

    Lorsque tu fais par exemple : $data = mysql_query() tu interprètes mal la valeur de retour.
    $data suppoese que cette fonction retournerait des données, or ce n'est réellement le cas car c'est juste une ressource qui est retournée (une sorte de lien).


    Puis ceci est une erreur de logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($data = mysql_fetch_assoc($data)) {
     
    	if (mysql_num_rows($data) == 0) {
    		// etc ...
    	}
     
    }
    Ici tu parcourt les données avant de savoir si la requête a réellement récupérée des données.
    En somme tu le vérifie après avec mysql_num_rows(). Pas logique.

    Faudrait procéder de manière inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (mysql_num_rows($data) == 0) {
     
    	while ($data = mysql_fetch_assoc($data)) {
    		// etc ...
    	}
     
    }
    Puis dans ces lignes de codes ci-dessus il y a encore une erreur, c'est que tu exploite $data abusivement.
    En faite tu "écrase" la valeur de $data qui au départ était la ressource de la requête pour lui mettre un booleen.
    Donc dans la bataille tu as perdu la ressource qui est nécessaire.

    Faudrait corriger pour faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $messages_rs = mysql_query("SELECT *
    FROM messages
    WHERE id = ".(int)$idd);
     
    if (mysql_num_rows($messages_rs) == 0) {
     
    	while ($mesages = mysql_fetch_assoc($messages_rs)) {
    		echo $mesages['mail'];
    	}
     
    }

    Dernier point, c'est qu'il faut éviter de faire des boucles systématiquement (abusivement).
    Il faut anticiper les résultats (en somme éviter de faire du copier/coller de code bêtement).
    Si la requête SQL que l'on fait ne retourne pas plusieurs ligne, il n'y a absolument pas lieu de faire une boucle.

    Dons si dans le cas présent la valeur de $_GET['id'] correspond à 1 et unique message (correspond à un identifiant unique), il n'y a absolument pas lieu de faire une boucle.
    Dans tel cas (et en toute logique), soit la valeur de $_GET['id'] va correspondre à 1 message ou alors aucun (valeur erronée).
    Donc ici on peu anticiper la chose en : soit 0 résultat soit 1 seul.
    Ce qui donnera comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $messages_rs = mysql_query("SELECT *
    FROM messages
    WHERE id = ".(int)$idd);
     
    if (mysql_num_rows($messages_rs) == 0) {
     
    	$mesage = mysql_fetch_assoc($messages_rs);
    	echo $mesage['mail'];
     
    }

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Par défaut
    Merci beaucoup ! Sa a marché !

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

Discussions similaires

  1. Shell : Lire une ligne sur N
    Par CSIE_Angel#5 dans le forum Linux
    Réponses: 3
    Dernier message: 02/10/2008, 13h47
  2. Lire une ligne sur 2 avec une boucle
    Par Jusomi31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2008, 14h18
  3. [Rave 5.0-Delphi 7] Griser une ligne sur deux
    Par Frank dans le forum Rave
    Réponses: 5
    Dernier message: 09/08/2006, 09h03
  4. coloriser une ligne sur deux
    Par the0livier dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2005, 10h54
  5. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08

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