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

Langage PHP Discussion :

Récupération automatique de données et insertion dans un formulaire.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut Récupération automatique de données et insertion dans un formulaire.
    Bonjour,

    J'ai trouvé sur le site, les informations pour récupérer les données dans une BdD pour les insérer dans un formulaire. Merci à la communauté
    Jusque là pas de souci. Mais je souhaiterai savoir si il est possible d'insérer ces données séparément dans des "input" ?
    Dans un "select", cela fonctionne mais ça ne convient pas. Alors je les encadre...

    Voici le script de la page test :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtmll/DTD/xhtml-transitional.dtd">
    <html xmlns="http://www.w3.org.199/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <script type='text/javascript'>
     
                function getXhr() {
                    var xhr = null;
                    if (window.XMLHttpRequest) // Firefox et autres
                        xhr = new XMLHttpRequest();
                    else if (window.ActiveXObject) { // Internet Explorer 
                        try {
                            xhr = new ActiveXObject("Msxml2.XMLHTTP");
                        } catch (e) {
                            xhr = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                    }
                    else { // XMLHttpRequest non supporté par le navigateur 
                        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                        xhr = false;
                    }
                    return xhr;
                }
     
                /**
                 * Appel sur "onchange"
                 */
                function go() {
                    var xhr = getXhr();
                    // On défini ce qu'on va faire quand on aura la réponse
                    xhr.onreadystatechange = function() {
                        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            leselect = xhr.responseText;
                            // On se sert de innerHTML pour rajouter les options a la liste
                            document.getElementById('NOM').innerHTML = leselect;
     
                        }
                    }
     
                    // Ici on va voir comment faire du post
                    xhr.open("POST", "ajaxagent.php", true);
                    // ne pas oublier ça pour le post
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                    // ne pas oublier de poster les arguments
                    // ici, l'id de l'agent
                    sel = document.getElementById('EMAIL');
                    ID_AGENT = sel.options[sel.selectedIndex].value;
                    xhr.send("ID_AGENT=" + ID_AGENT);
                }
            </script>
     
        </head>
        <body>
            <form>
     
     
                    <label>Email</label>
                    <select name='EMAIL' id='EMAIL' onchange='go()'>
                        <option value='-1'>*************</option>
                        <?php
    // Parametres mysql
                            define('DB_SERVER', 'localhost'); // serveur mysql
                            define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
                            define('DB_SERVER_PASSWORD', ''); // mot de passe
                            define('DB_DATABASE', 'materiels'); // nom de la base
    // Connexion au serveur mysql
                            $connect = mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE) or die('Impossible de se connecter : ' . mysqli_error());
                            $requete = "SELECT * FROM agents ORDER BY NOM;";
                            $res = mysqli_query($connect,$requete);
                        while ($row = mysqli_fetch_assoc($res)) {
                            echo "<option value='" . $row["ID_AGENT"] . "'>" . $row["EMAIL"] . "</option>";
                        }
                        ?>
                    </select><br/><br/>
                   <fieldset style="width: 600px; height: 20px">
                    <div id='NOM' style='display:inline'>
     
                    </div>  
                 </fieldset>
            </form>
        </body>
    </html>
    Voici le script de la page complémentaire:

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtmll/DTD/xhtml-transitional.dtd">
    <html xmlns="http://www.w3.org.199/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     
    <?php
    	echo "";
    	if(isset($_POST["ID_AGENT"])){
    define('DB_SERVER', 'localhost'); // serveur mysql
                            define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
                            define('DB_SERVER_PASSWORD', ''); // mot de passe
                            define('DB_DATABASE', 'materiels'); // nom de la base
    // Connexion au serveur mysql
                            $connect = mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE) or die('Impossible de se connecter : ' . mysqli_error());                        
                            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE FROM agents WHERE ID_AGENT=".$_POST["ID_AGENT"]." ";
                            $res = mysqli_query($connect,$requete);
    		while($row = mysqli_fetch_assoc($res)){
    			echo "<option value='".$row["ID_AGENT"]."'>Nom : ".$row["NOM"]." &nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp; "
                                    . "Prénom : ".$row["PRENOM"]." &nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp; Service : ".$row["SERVICE"]."</option>";
    		}
    	}
    	echo "";
    ?>
    </html>
    Merci par avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Si j'ai bien compris tu cherches à mettre tes données dans des champs plutôt que dans un menu déroulant?

    Sur mon site je fais un truc dans le même genre:
    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
    <form action="index.php?controler=Admin&action=UpdateSuccess" method ="post">
    		<fieldset id="team">
    			<legend>L'équipe (<?php echo count($team);?>)</legend>
                     		<table style="border:1px solid black;">
    					<tr>
    					<?php
    					foreach ($team as $member){
    						echo "<td>" . $member['username'] ."</td><td><input id=". $member['username'] ." name=". $member['username'] ." size=\"5\" value=". $member['success'] ."></td>";
     
    						echo "</tr>";
    					}
    					?>
    				</table>
    			<input type="submit" id="coco" name="coco" value="Mise à jour" />
    		</fieldset>
    	</form>
    Je parcours mon tableau de résultats avec le foreach et j'insère les données dans des input (ça me sert pour faire des mises à jour)...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Merci de ta réponse Oxyseb,

    Mais j'ai testé et pour mon cas cela ne donne rien...

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pourrait-on voir le code que tu as testé ?

    EDIT : @jreaux : Prem's !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par Jean-Michel G Voir le message
    ...cela ne donne rien...
    C'est sûr que ça va bien nous aider !


    [EDIT] Hello, Celira !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonsoir,

    Bon j'ai persévéré et trouvé.

    Il faut dire que je posait une simple question "possible ou pas" avec mon code d'origine !

    Heu...Jérôme et Celira, drôle de façon de répondre par la positive à ma question !!!

    Je me suis dis si ils sont d'humeur taquine c'est qu'il y a surement un moyen...(un peu agacé...)

    Alors pour vous répondre voilà le code...qui fonctionne.

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtmll/DTD/xhtml-transitional.dtd">
    <html xmlns="http://www.w3.org.199/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     
    <?php
    	echo "";
    	if(isset($_POST["ID_AGENT"])){
    define('DB_SERVER', 'localhost'); // serveur mysql
                            define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
                            define('DB_SERVER_PASSWORD', ''); // mot de passe
                            define('DB_DATABASE', 'materiels'); // nom de la base
    // Connexion au serveur mysql
                            $connect = mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE) or die('Impossible de se connecter : ' . mysqli_error());                        
                            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE FROM agents WHERE ID_AGENT=".$_POST["ID_AGENT"]." ";
                            $res = mysqli_query($connect,$requete);
    		while($row = mysqli_fetch_assoc($res)){
    			echo "<option value='".$row["ID_AGENT"]."'>Nom : <input value='".$row["NOM"]."'></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
                                    . "Prénom : <input value='".$row["PRENOM"]."'></input> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service : <input value='".$row["SERVICE"]."'></input></option>";
    		}
    	}
    	echo "";
    ?>
    </html>
    Bon, ce n'est certe pas aussi propre que si vous l'aviez écrit et j'avoue que les "espaces" cela n'est pas très jolie.
    Mais pour ce que je vais en faire, je ne suis pas trop exigent.

    NB
    Mais j'ai testé et pour mon cas cela ne donne rien...
    En fait je ne mettais pas le "input" au bon endroit.

    Aller, Jérôme, Celira, sans rancune, merci d'avoir pris le temps de répondre.

    Encore merci Oxyseb, ton bout de code m'a bien aidé.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour Jean-Michel ,

    1/ La réponse était évidemment oui, c'est possible.

    (N.B. Si tu voulais juste "possible ou pas", pourquoi diable mettre autant de code ? )

    2/ Ecrire "ca ne donne rien" sans montrer ton propre code (la partie concernée, modifiée !) n'a aucun intérêt dans la résolution du problème.

    3/ Si tu veux pouvoir récupérer les valeurs des input, il faut leur donner un name"..." (comme oxyseb te l'a montré dans son 1er message !)

    4/ Quant aux "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", le CSS existe pour éviter ça (margin, padding,...) !
    Ajouter quelques balises HTML de mise en page comme <p>, <label...> ne ferait pas de mal non plus.

    5/
    Citation Envoyé par Jean-Michel G Voir le message
    Bon j'ai persévéré et trouvé.
    C'est tout à ton honneur... et la meilleure méthode pour progresser !

    Lire aussi les tutoriels et cours de formation pour apprendre la programmation PHP : http://php.developpez.com/cours/
    Dernière modification par Invité ; 30/04/2015 à 09h55.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonjour Jérôme,

    Voilà après quelques modifications.

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtmll/DTD/xhtml-transitional.dtd">
    <html xmlns="http://www.w3.org.199/xhtml">
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
     
        <?php
        echo "";
        if (isset($_POST["ID_AGENT"])) {
            define('DB_SERVER', 'localhost'); // serveur mysql
            define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
            define('DB_SERVER_PASSWORD', ''); // mot de passe
            define('DB_DATABASE', 'materiels'); // nom de la base
    // Connexion au serveur mysql
            $connect = mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE) or die('Impossible de se connecter : ' . mysqli_error());
            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE FROM agents WHERE ID_AGENT=" . $_POST["ID_AGENT"] . ";";
            $res = mysqli_query($connect, $requete);
            while ($row = mysqli_fetch_assoc($res)) {
                ?>
                <?php echo "<option value='" . $row["ID_AGENT"] . "'>" ?><label>Nom :</label><input value="<?php echo $row["NOM"]; ?>"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <label>Prénom : </label><input value="<?php echo $row["PRENOM"]; ?>"/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <label>Service : </label><input value="<?php echo $row["SERVICE"]; ?>"/></option>
            <?php
        }
    }
    echo "";
    ?>
    </html>
    Comme c'est un fichier test, je n'ai pas créé de css.
    Par contre le formulaire final a un css...

    Merci encore de pour l'aide.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    test ou pas, il faut que tu prennes de bonnes habitudes !

    1/ Déclaration du DOCTYPE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!DOCTYPE HTML>
    <html lang="fr">
    <head>
    	<meta charset="utf-8" />
    2/ + tout en UTF-8 :


    3/ echo ""; ne sert à rien !

    4/ Connexion à la base de données : inutile de le réécrire à chaque fois !
    => à mettre dans un fichier séparé connect_bdd.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
            define('DB_SERVER', 'localhost'); // serveur mysql
            define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
            define('DB_SERVER_PASSWORD', ''); // mot de passe
            define('DB_DATABASE', 'materiels'); // nom de la base
    // Connexion au serveur mysql
            $connect = mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE) or die('Impossible de se connecter : ' . mysqli_error());
    et dans le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include('connect_bdd.php'); ?>
    5/ On a DEJA parlé de requête préparée, pour éviter les injections SQL !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE FROM agents WHERE ID_AGENT=" . $_POST["ID_AGENT"] . ";";
            $res = mysqli_query($connect, $requete);
    6/ on peut "sortir le HTML du PHP
    + bonne indentation du code = plus facile à lire et à déboguer

    7/ label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	<label for="id_du_machin">.....</label>
    	<input id="id_du_machin" ..... />
    8/ Comment veux-tu pouvoir récupérer les données si tu ne donnes pas de name="..." aux <input ...> ???
    Il faut aussi déclarer le type="...".

    Ca donne :
    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
    <?php
            while ($row = mysqli_fetch_assoc($res)) {
    ?>
    	<input type="hidden" name="ID_AGENT" value="<?php echo $row["ID_AGENT"]; ?>"/>
    	<p>
    		<label for="idNOM">Nom :</label>
    		<input id="idNOM" name="NOM" type="text" value="<?php echo $row["NOM"]; ?>"/>
    	</p>
    	<p>
                <label for="idPRENOM">Prénom : </label>
    		<input id="idPRENOM" name="PRENOM" type="text" value="<?php echo $row["PRENOM"]; ?>"/>
    	</p>
    	<p>
    		<label for="idSERVICE">Service : </label>
    		<input id="idSERVICE" name="SERVICE" value="<?php echo $row["SERVICE"]; ?>"/>
    	<p>
    <?php
    		}
    ?>
    9/ Un formulaire se met entre balises <form ...>......... </form> !

    10/ Enfin : tu fais trop d'erreurs grossières de syntaxe HTML et manque de compréhension de ce que tu écris.
    (par ex. : que faisaient ces balises <option> dans ton code ??)

    Il existe un tas de TUTOS... (HTML, Formulaire,....)
    Si tu ne fais pas le moindre effort pour APPRENDRE PAR TOI-MEME, ça ne va pas le faire....
    Dernière modification par Invité ; 02/05/2015 à 08h01.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonjour Jérôme,

    Je prend bien note de tout cela.

    Le bout de code que j'ai mis, en fait je l'ai ajouté à mon formulaire... Et il fonctionne ! Les valeurs souhaitées remontent bien automatiquement dans des "input" par l'appel de l'adresse email...

    J'apprends par moi-même vu que les infos pour la fonction que je voulais je l'ai trouvé ICI

    Le "option", autant pour moi, c'est vrai que je l'ai laissé par inattention, vu que ça fonctionnait avec...

    Quand au codage merci pour le lien ,celui-la je ne l'avais pas encore consulté...
    Bien que le codage c'est un beau paquet de pointes... J'ai bien suivi toute la procédure de ton lien et j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $connect_bdd = include('connect_bdd.php');
                            if (mysqli_connect_errno($connect_bdd)) {
                                echo "Failed to connect to MySQL: " . mysqli_connect_error();
                            }
     
                            // Caractères en utf8
                            mysqli_set_charset($connect_bdd, 'utf8');
    Mais erreur en retour...
    Warning: mysqli_set_charset() expects parameter 1 to be mysqli, integer given
    le net ne donne pas grand chose... Une idée ?

    Bon je continu en suivant tes conseils.

    Merci.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonsoir,

    Bon j'ai avancé, maintenant, il y a une particularité dans mon 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <!DOCTYPE HTML>
    <html lang="fr">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        </head>
        <?php
        include('connect_bdd.php');
        $ID_AGENT = $_POST['ID_AGENT'];
        if (isset($ID_AGENT)) {
     
            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE,SIM,NUMERO,COMPTE,MARQUE,MODELE,VALEUR,ID_EQUIPEMENT
                    FROM user,ligne_mobile,telephone_mobile,user_mobile_equipt 
                    WHERE ID_AGENT=" . $ID_AGENT . " AND user.ID_AGENT=ligne_mobile.ID_LIGNE AND user.ID_AGENT=telephone_mobile.ID_MOBILE AND user.ID_AGENT=user_mobile_equipt.ID_USER_MOBILE;";
            $res = mysqli_query($connect, $requete);
            while ($row = mysqli_fetch_assoc($res)) {
                ?>
                <p id="NOM">
                    <label for="idNOM">Nom :</label>
                    <input id="idNOM" name="NOM" type="text" value="<?php echo $row["NOM"]; ?>"/>
                    <label for="idPRENOM">Prénom :</label>
                    <input id="idPRENOM" name="PRENOM" type="text" value="<?php echo $row["PRENOM"]; ?>"/>
                    <label for="idSERVICE">Service :</label>
                    <input id="idSERVICE" name="SERVICE" type="text" value="<?php echo $row["SERVICE"]; ?>"/><br>
                    <label for="idSIM">SIM :</label>
                    <input id="idSIM" name="SIM" type="text" value="<?php echo $row["SIM"]; ?>"/>
                    <label for="idNUMERO">Numéro :</label>
                    <input id="idNUMERO" name="NUMERO" type="text" value="<?php echo $row["NUMERO"]; ?>"/>
                    <label for="idCOMPTE">Compte :</label>
                    <input id="idCOMPTE" name="COMPTE" type="text" value="<?php echo $row["COMPTE"]; ?>"/><br>
                    <label for="idMARQUE">Marque :</label>
                    <input id="idMARQUE" name="MARQUE" type="text" value="<?php echo $row["MARQUE"]; ?>"/>
                    <label for="idMODELE">Modèle :</label>
                    <input id="idMODELE" name="MODELE" type="text" value="<?php echo $row["MODELE"]; ?>"/>
                    <label for="idVALEUR">Valeur :</label>
                    <input id="idVALEUR" name="VALEUR" type="text" value="<?php echo $row["VALEUR"]; ?>"/><br>
                    <label for="idID_EQUIPEMENT">Équipements :</label>
                    <input id="idID_EQUIPEMENT" name="ID_EQUIPEMENT" type="text" value="<?php echo $row["ID_EQUIPEMENT"]; ?>"/>
                </p>
                <?php
            }
        }
        ?>
    </html>
    Tout fonctionne jusqu'aux deux dernières lignes. Je m'explique : Si un seul équipement dans la base pas de soucis. Si plusieurs équipements, forcément la boucle renvoi autant de fois TOUT les résultats.
    Alors que bien évidemment, l'idéal est que les équipements concerné apparaissent dans le même input ou sur la même ligne. J'ai pas mal surfé, mais je ne trouve pas, auriez-vous un lien pour me mettre sur la voie, svp ?
    Que j'en apprenne plus.
    Dois-je faire deux boucles séparées ?

    Merci par avance de vos réponses.

    Cordialement

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonsoir,

    Maintenant, bien que mon problème ci-dessus ne soit pas résolu, j'ai un autre souci...

    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
     
     
    <!DOCTYPE HTML>
    <html lang="fr">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        </head>
        <?php
        include('connect_bdd.php');
        $ID_AGENT = $_POST['ID_AGENT'];
        if (isset($ID_AGENT)) {
     
            $requete = "SELECT ID_AGENT,NOM,PRENOM,SERVICE,SIM,NUMERO,COMPTE,MARQUE,MODELE,VALEUR,ID_EQUIPEMENT,SN
                    FROM user,ligne_mobile,telephone_mobile,user_mobile_equipt,user_mobile
                    WHERE user.ID_AGENT=user.ID_AGENT AND user.ID_AGENT=ligne_mobile.ID_LIGNE AND user.ID_AGENT=telephone_mobile.ID_MOBILE
                    AND user.ID_AGENT=user_mobile_equipt.ID_USER_MOBILE AND user.ID_AGENT=user_mobile.ID_AGENT";
            $res = mysqli_query($connect, $requete);
            while ($row = mysqli_fetch_assoc($res));
        }
                    var_dump($res);
            {
            {
                ?>
                <p id="NOM">
                    <label for="idNOM">Nom :</label>
                    <input id="idNOM" name="NOM" type="text" value="<?php echo $row["NOM"]; ?>"/>
                    <label for="idPRENOM">Prénom :</label>
                    <input id="idPRENOM" name="PRENOM" type="text" value="<?php echo $row["PRENOM"]; ?>"/>
                    <label for="idSERVICE">Service :</label>
                    <input id="idSERVICE" name="SERVICE" type="text" value="<?php echo $row["SERVICE"]; ?>"/><br>
                    <label for="idSIM">SIM :</label>
                    <input id="idSIM" name="SIM" type="text" value="<?php echo $row["SIM"]; ?>"/>
                    <label for="idNUMERO">Numéro :</label>
                    <input id="idNUMERO" name="NUMERO" type="text" value="<?php echo $row["NUMERO"]; ?>"/>
                    <label for="idCOMPTE">Compte :</label>
                    <input id="idCOMPTE" name="COMPTE" type="text" value="<?php echo $row["COMPTE"]; ?>"/><br>
                    <label for="idMARQUE">Marque :</label>
                    <input id="idMARQUE" name="MARQUE" type="text" value="<?php echo $row["MARQUE"]; ?>"/>
                    <label for="idMODELE">Modèle :</label>
                    <input id="idMODELE" name="MODELE" type="text" value="<?php echo $row["MODELE"]; ?>"/>
                    <label for="idVALEUR">Valeur :</label>
                    <input id="idVALEUR" name="VALEUR" type="text" value="<?php echo $row["VALEUR"]; ?>"/><br>
                    <label for="idID_EQUIPEMENT">Équipements :</label>
                    <input id="idID_EQUIPEMENT" name="ID_EQUIPEMENT" type="text" value="<?php echo $row["ID_EQUIPEMENT"]; ?>"/>
                    <label for="idSN">SN :</label>
                    <input id="idSN" name="SN" type="text" value="<?php echo $row["SN"]; ?>"/>
                    <label for="idIMEI">IMEI :</label>
                    <input id="idIMEI" name="IMEI" type="text" value="<?php echo $row["IMEI"]; ?>"/><br>
                    <label for="idDATEREMISE">Date de remise :</label>
                    <input id="idDATEREMISE" name="DATEREMISE" type="text" value="<?php echo $row["DATEREMISE"]; ?>"/>
                    <label for="idETAT_REMISE">État de remise :</label>
                    <input id="idETAT_REMISE" name="ETAT_REMISE" type="text" value="<?php echo $row["ETAT_REMISE"]; ?>"/>
                </p>
                <?php
            }
        }
        ?>
    </html>
    Il y a une erreur :
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given
    Je ne comprend pas, vu qu'il y a bien des données à récupérer, pas de problème d'apostrophe, là je sèche...

    Merci par avance de votre aide.

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Il suffit de savoir lire pour régler ça...
    Tu as une erreur à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = mysqli_fetch_assoc($res)
    cette erreur te dit que le paramètre passé n'est pas une ressource comme attendu mais un booléen.
    Ce qui signifie que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = mysqli_query($connect, $requete);
    a renvoyé un booléen et non une ressource.

    Il ne reste plus qu'à consulter la doc pour mysqli_query() (http://php.net/manual/fr/mysqli.query.php) pour savoir dans quels cas une requête de type SELECT renvoie un booléen.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonsoir Bovino,

    Merci pour ta réponse.
    J'avais effectivement bien compris le sens de l'erreur, mais je ne comprenais pas pourquoi ma requête remontait un "false" alors que des ressources sont présentent dans la base.
    Sur ton conseil je suis allé voir mysqli_query() et j'ai rebondi vers SQL, car c'est de ma requête SELECT que viens le souci.
    J'ai corrigé ce problème, maintenant j'en ai un autre (les données ne remontent plus) bon je continu de chercher.
    J'espère trouver par moi-même, je reviendrai avec le script si je ne réussi pas.

    Merci encore.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il faut revoir la construction de la requête :

    Notamment :

    Voici à quoi ça devrait ressembler :
    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
            $requete = "SELECT 
                    user.ID_AGENT, user.NOM, user.PRENOM, 
                    SERVICE, SIM, NUMERO, COMPTE, MARQUE, MODELE, VALEUR, 
                    ID_EQUIPEMENT, SN
                    FROM user
    			INNER JOIN user_mobile
    				ON user.ID_AGENT=user_mobile.ID_AGENT
    			INNER JOIN ligne_mobile
    				ON user.ID_AGENT=ligne_mobile.ID_LIGNE
    			INNER JOIN telephone_mobile
    				ON user.ID_AGENT=telephone_mobile.ID_MOBILE
    			LEFT OUTER JOIN user_mobile_equipt
     				ON user.ID_AGENT=user_mobile_equipt.ID_USER_MOBILE
                   ";
    Jointures à vérifier + mettre les bons préfixes aux champs

    N.B. Une indentation "propre" permet une lecture et un déboguage plus facile.
    Dernière modification par Invité ; 23/05/2015 à 10h49.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonjour Jérôme,

    Je suis justement en train de lire les articles sur les jointures SQL.
    Et merci pour le coup de pouce, car forcément, j'ai commencé par tester les jointures externes... !

    Bon d'un autre côté, j'ai tout surnommé pour une meilleur lisibilité.

    Une fois corrigé (j'avais mis des LEFT OUTER JOIN partout !)

    Voilà ce que cela donne.

    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
    $requete = "SELECT U.ID_AGENT, U.NOM,U.PRENOM, U.SERVICE,
                LM.SIM, LM.NUMERO, LM.COMPTE,
                TM.MARQUE, TM.MODELE, TM.VALEUR,
                UM.SN, UM.IMEI, UM.DATEREMISE, UM.ETAT_REMISE,
                UME.ID_EQUIPEMENT
                    FROM user U 
                    INNER JOIN ligne_mobile LM
                        ON U.ID_AGENT = LM.ID_LIGNE
                    INNER JOIN telephone_mobile TM
                        ON U.ID_AGENT = TM.ID_MOBILE
                    INNER JOIN user_mobile_equipt UME
                        ON U.ID_AGENT = UME.ID_USER_MOBILE
                    LEFT OUTER JOIN user_mobile UM
                        ON U.ID_AGENT = UM.ID_AGENT
                        ";
    Bien maintenant la requête fonctionne et je commence à mieux comprendre les méandres de base du SQL.

    Mais là, un autre problème apparait... Si je coche plus d'un équipement, et bien la requête renvoi autant de fois les résultats qu'il y a de cases cochés multiplié par le nombre de ID_AGENT...
    Surement un problème de boucle qui 1, ne s'arrête pas à l'utilisateur sélectionné et 2 de toute manière boucle autant de fois qu'il y a d'équipements cochés même avec un seul user enregistré.
    Alors que je souhaite les avoirs dans le même "input" ou, au moins sur la même ligne.

    Et allé, soyons fous, récupérer le NOM_EQUIPEMENT plutot que son ID, je me doute que je dois faire correspondre l'un avec l'autre.
    J'y ai réfléchi, mais je ne dois pas m'y prendre par le bon bout...

    Juste me mettre au moins sur la voie cela m'aiderai.

    Ci-dessous les codes pour plus de compréhension.

    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
    <!DOCTYPE HTML>
    <html lang="fr">
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        </head>
        <?php
        include('connect_bdd.php');
        $ID_AGENT = $_POST['ID_AGENT'];
        if (isset($ID_AGENT)) {
            $requete = "SELECT U.ID_AGENT, U.NOM,U.PRENOM, U.SERVICE,
                LM.SIM, LM.NUMERO, LM.COMPTE,
                TM.MARQUE, TM.MODELE, TM.VALEUR,
                UM.SN, UM.IMEI, UM.DATEREMISE, UM.ETAT_REMISE,
                UME.ID_EQUIPEMENT
                    FROM user U 
                    INNER JOIN ligne_mobile LM
                        ON U.ID_AGENT = LM.ID_LIGNE
                    INNER JOIN telephone_mobile TM
                        ON U.ID_AGENT = TM.ID_MOBILE
                    INNER JOIN user_mobile_equipt UME
                        ON U.ID_AGENT = UME.ID_USER_MOBILE
                    JOIN user_mobile UM
                        ON U.ID_AGENT = UM.ID_AGENT
                        ";
            $res = mysqli_query($connect, $requete);
            while ($row = mysqli_fetch_assoc($res)) {
            var_dump($row)
            ?>
            <p id="NOM">
                <label for="idNOM">Nom :</label>
                <input id="idNOM" name="NOM" type="text" value="<?php echo $row["NOM"]; ?>"/>
                <label for="idPRENOM">Prénom :</label>
                <input id="idPRENOM" name="PRENOM" type="text" value="<?php echo $row["PRENOM"]; ?>"/>
                <label for="idSERVICE">Service :</label>
                <input id="idSERVICE" name="SERVICE" type="text" value="<?php echo $row["SERVICE"]; ?>"/><br>
                <label for="idSIM">SIM :</label>
                <input id="idSIM" name="SIM" type="text" value="<?php echo $row["SIM"]; ?>"/>
                <label for="idNUMERO">Numéro :</label>
                <input id="idNUMERO" name="NUMERO" type="text" value="<?php echo $row["NUMERO"]; ?>"/>
                <label for="idCOMPTE">Compte :</label>
                <input id="idCOMPTE" name="COMPTE" type="text" value="<?php echo $row["COMPTE"]; ?>"/><br>
                <label for="idMARQUE">Marque :</label>
                <input id="idMARQUE" name="MARQUE" type="text" value="<?php echo $row["MARQUE"]; ?>"/>
                <label for="idMODELE">Modèle :</label>
                <input id="idMODELE" name="MODELE" type="text" value="<?php echo $row["MODELE"]; ?>"/>
                <label for="idVALEUR">Valeur :</label>
                <input id="idVALEUR" name="VALEUR" type="text" value="<?php echo $row["VALEUR"]; ?>"/><br>
                <label for="idID_EQUIPEMENT">Équipements :</label>
                <input id="idID_EQUIPEMENT" name="ID_EQUIPEMENT" type="text" value="<?php echo $row["ID_EQUIPEMENT"]; ?>"/>
                <label for="idSN">SN :</label>
                <input id="idSN" name="SN" type="text" value="<?php echo $row["SN"]; ?>"/>
                <label for="idIMEI">IMEI :</label>
                <input id="idIMEI" name="IMEI" type="text" value="<?php echo $row["IMEI"]; ?>"/><br>
                <label for="idDATEREMISE">Date de remise :</label>
                <input id="idDATEREMISE" name="DATEREMISE" type="text" value="<?php echo $row["DATEREMISE"]; ?>"/>
                <label for="idETAT_REMISE">État de remise :</label>
                <input id="idETAT_REMISE" name="ETAT_REMISE" type="text" value="<?php echo $row["ETAT_REMISE"]; ?>"/>
            </p>
            <?php
            }
        }
        ?>
    </html>
    Et SQL

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    -- phpMyAdmin SQL Dump
    -- version 4.4.4
    -- http://www.phpmyadmin.net
    --
    -- Client :  127.0.0.1
    -- Généré le :  Sam 23 Mai 2015 à 18:56
    -- Version du serveur :  5.6.17
    -- Version de PHP :  5.5.12
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données :  `materiels`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `equipements`
    --
     
    CREATE TABLE IF NOT EXISTS `equipements` (
      `ID_EQUIPEMENT` int(11) NOT NULL,
      `NOM_EQUIPEMENT` varchar(100) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `equipements`
    --
     
    INSERT INTO `equipements` (`ID_EQUIPEMENT`, `NOM_EQUIPEMENT`) VALUES
    (1, 'Chargeur secteur'),
    (2, 'Cable USB'),
    (3, 'Casque'),
    (4, 'Carte mémoire'),
    (5, 'Coque House'),
    (6, 'Chargeur vehicule');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `ligne_mobile`
    --
     
    CREATE TABLE IF NOT EXISTS `ligne_mobile` (
      `ID_LIGNE` int(4) NOT NULL,
      `SIM` bigint(30) NOT NULL,
      `NUMERO` char(12) NOT NULL,
      `COMPTE` varchar(30) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `pc`
    --
     
    CREATE TABLE IF NOT EXISTS `pc` (
      `PCMARQUE` varchar(100) NOT NULL,
      `PCMODELE` varchar(100) NOT NULL,
      `SNPC` int(20) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `telephone_mobile`
    --
     
    CREATE TABLE IF NOT EXISTS `telephone_mobile` (
      `ID_MOBILE` int(4) NOT NULL,
      `MARQUE` char(25) NOT NULL,
      `MODELE` char(25) NOT NULL,
      `VALEUR` varchar(6) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `user`
    --
     
    CREATE TABLE IF NOT EXISTS `user` (
      `ID_AGENT` int(11) NOT NULL,
      `NOM` char(25) NOT NULL,
      `PRENOM` char(25) NOT NULL,
      `EMAIL` char(100) NOT NULL,
      `SERVICE` char(25) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `user_mobile`
    --
     
    CREATE TABLE IF NOT EXISTS `user_mobile` (
      `ID_USER_MOBILE` int(12) NOT NULL,
      `ID_AGENT` int(4) NOT NULL,
      `ID_MOBILE` int(4) NOT NULL,
      `ID_LIGNE` int(4) NOT NULL,
      `SN` char(20) NOT NULL,
      `IMEI` char(20) NOT NULL,
      `DATEREMISE` char(10) NOT NULL,
      `ETAT_REMISE` char(20) NOT NULL,
      `DATERETOUR` char(10) DEFAULT NULL,
      `ETAT_RETOUR` char(20) DEFAULT NULL,
      `COMMENTS` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `user_mobile_equipt`
    --
     
    CREATE TABLE IF NOT EXISTS `user_mobile_equipt` (
      `ID_USER_MOBILE` int(4) NOT NULL,
      `ID_EQUIPEMENT` int(4) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `equipements`
    --
    ALTER TABLE `equipements`
      ADD PRIMARY KEY (`ID_EQUIPEMENT`);
     
    --
    -- Index pour la table `ligne_mobile`
    --
    ALTER TABLE `ligne_mobile`
      ADD PRIMARY KEY (`ID_LIGNE`),
      ADD UNIQUE KEY `SIM` (`SIM`),
      ADD UNIQUE KEY `NUMERO` (`NUMERO`),
      ADD KEY `COMPTE` (`COMPTE`);
     
    --
    -- Index pour la table `pc`
    --
    ALTER TABLE `pc`
      ADD PRIMARY KEY (`SNPC`),
      ADD KEY `MARQUE` (`PCMARQUE`,`PCMODELE`,`SNPC`);
     
    --
    -- Index pour la table `telephone_mobile`
    --
    ALTER TABLE `telephone_mobile`
      ADD PRIMARY KEY (`ID_MOBILE`),
      ADD KEY `VALEUR` (`VALEUR`),
      ADD FULLTEXT KEY `MARQUE` (`MARQUE`);
     
    --
    -- Index pour la table `user`
    --
    ALTER TABLE `user`
      ADD PRIMARY KEY (`ID_AGENT`),
      ADD UNIQUE KEY `NOM` (`NOM`),
      ADD UNIQUE KEY `EMAIL` (`EMAIL`),
      ADD KEY `SERVICE` (`SERVICE`),
      ADD KEY `PRENOM` (`PRENOM`);
     
    --
    -- Index pour la table `user_mobile`
    --
    ALTER TABLE `user_mobile`
      ADD PRIMARY KEY (`ID_USER_MOBILE`),
      ADD KEY `ID_AGENT` (`ID_AGENT`),
      ADD KEY `ID_MOBILE` (`ID_MOBILE`),
      ADD KEY `ID_LIGNE` (`ID_LIGNE`),
      ADD FULLTEXT KEY `SN` (`SN`);
    ALTER TABLE `user_mobile`
      ADD FULLTEXT KEY `SN_2` (`SN`);
     
    --
    -- Index pour la table `user_mobile_equipt`
    --
    ALTER TABLE `user_mobile_equipt`
      ADD KEY `ID_EQUIPEMENT` (`ID_EQUIPEMENT`),
      ADD KEY `ID_USER_MOBILE` (`ID_USER_MOBILE`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `equipements`
    --
    ALTER TABLE `equipements`
      MODIFY `ID_EQUIPEMENT` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7;
    --
    -- AUTO_INCREMENT pour la table `ligne_mobile`
    --
    ALTER TABLE `ligne_mobile`
      MODIFY `ID_LIGNE` int(4) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `telephone_mobile`
    --
    ALTER TABLE `telephone_mobile`
      MODIFY `ID_MOBILE` int(4) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `user_mobile`
    --
    ALTER TABLE `user_mobile`
      MODIFY `ID_USER_MOBILE` int(12) NOT NULL AUTO_INCREMENT;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    Merci par avance du coup de main.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonsoir,

    Pour info, j'ai ajouté ça en fin de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE U.ID_AGENT = ".$ID_AGENT.";
    Afin que comme prévu l'appel récupère bien les données correspondante à l'ID de l'agent.

    Pour arrêter la boucle j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($res) {
     
                    break ;
                }
    Cela stop bien la boucle, mais par contre cela ne récupère que le premier équipement...

    Je continu.

    Merci pour votre aide.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Je persévère et j'avance...
    Suite à la lecture et relecture du cours SQL sur les jointures, j'ai amélioré ma requête, afin de récupérer le nom des équipements.

    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
     
    <!DOCTYPE HTML>
    <html lang="fr">
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        </head>
        <?php
        include('connect_bdd.php');
        $ID_AGENT = $_POST['ID_AGENT'];
     
        if (isset($ID_AGENT)) {
     
            $requete = "SELECT U.ID_AGENT, U.NOM,U.PRENOM, U.SERVICE,
                LM.SIM, LM.NUMERO, LM.COMPTE,
                TM.MARQUE, TM.MODELE, TM.VALEUR,
                UM.SN, UM.IMEI, UM.DATEREMISE, UM.ETAT_REMISE,
                UME.ID_EQUIPEMENT, E.NOM_EQUIPEMENT
                    FROM user U
                    INNER JOIN ligne_mobile LM
                        ON U.ID_AGENT = LM.ID_LIGNE
                    INNER JOIN telephone_mobile TM
                        ON U.ID_AGENT = TM.ID_MOBILE
                    INNER JOIN user_mobile_equipt UME
                        ON U.ID_AGENT = UME.ID_USER_MOBILE
                    CROSS JOIN equipements E
                        ON E.ID_EQUIPEMENT = UME.ID_EQUIPEMENT
    		LEFT OUTER JOIN user_mobile UM
                        ON U.ID_AGENT = UM.ID_AGENT
                    WHERE U.ID_AGENT = " . $ID_AGENT . ";
                        ";
     
            $res = mysqli_query($connect, $requete);
            while ($row = mysqli_fetch_assoc($res)) {
     
                ?>
                <input type="hidden" name="ID_AGENT" value="<?php echo $row["ID_AGENT"]; ?>"/>
                <p id="NOM">
                    <label for="idNOM">Nom :</label>
                    <input id="idNOM" name="NOM" type="text" value="<?php echo $row["NOM"]; ?>"/>
                    <label for="idPRENOM">Prénom :</label>
                    <input id="idPRENOM" name="PRENOM" type="text" value="<?php echo $row["PRENOM"]; ?>"/>
                    <label for="idSERVICE">Service :</label>
                    <input id="idSERVICE" name="SERVICE" type="text" value="<?php echo $row["SERVICE"]; ?>"/><br>
                    <label for="idSIM">SIM :</label>
                    <input id="idSIM" name="SIM" type="text" value="<?php echo $row["SIM"]; ?>"/>
                    <label for="idNUMERO">Numéro :</label>
                    <input id="idNUMERO" name="NUMERO" type="text" value="<?php echo $row["NUMERO"]; ?>"/>
                    <label for="idCOMPTE">Compte :</label>
                    <input id="idCOMPTE" name="COMPTE" type="text" value="<?php echo $row["COMPTE"]; ?>"/><br>
                    <label for="idMARQUE">Marque :</label>
                    <input id="idMARQUE" name="MARQUE" type="text" value="<?php echo $row["MARQUE"]; ?>"/>
                    <label for="idMODELE">Modèle :</label>
                    <input id="idMODELE" name="MODELE" type="text" value="<?php echo $row["MODELE"]; ?>"/>
                    <label for="idVALEUR">Valeur :</label>
                    <input id="idVALEUR" name="VALEUR" type="text" value="<?php echo $row["VALEUR"]; ?>"/><br>
                    <input name="ID_EQUIPEMENT" type="hidden" value="<?php echo $row["ID_EQUIPEMENT"]; ?>"/>
                    <label for="idNOM_EQUIPEMENT">Équipements :</label>
                    <input id="idNOM_EQUIPEMENT" name="NOM_EQUIPEMENT" type="text" value="<?php echo $row["NOM_EQUIPEMENT"]; ?>"/>
                    <label for="idSN">SN :</label>
                    <input id="idSN" name="SN" type="text" value="<?php echo $row["SN"]; ?>"/>
                    <label for="idIMEI">IMEI :</label>
                    <input id="idIMEI" name="IMEI" type="text" value="<?php echo $row["IMEI"]; ?>"/><br>
                    <label for="idDATEREMISE">Date de remise :</label>
                    <input id="idDATEREMISE" name="DATEREMISE" type="text" value="<?php echo $row["DATEREMISE"]; ?>"/>
                    <label for="idETAT_REMISE">État de remise :</label>
                    <input id="idETAT_REMISE" name="ETAT_REMISE" type="text" value="<?php echo $row["ETAT_REMISE"]; ?>"/>
                </p>
                <?php
                if ($res) {
     
                    break;
                }
            }
        }
        ?>
    </html>
    Maintenant je butte sur l'input équipements.
    Le souci c'est la boucle, si je la stop, comme ci-dessus, forcément je n'ai que le premier équipement de la liste.
    Si je ne la stop pas, ça reboucle : Nom : Form.png
Affichages : 221
Taille : 34,7 Ko

    Pouvez-vous me mettre sur la voie, je ne vois pas où chercher, afin de mettre tout les équipements dans le même input (je l'agrandirai ou je ferai un textarea), ou au moins sur la même ligne ?

    Merci par avance.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    les équipements n'ont rien à faire dans un input, ni un textarea.
    Ce sont des checkbox qu'il faut.
    Ou, à la rigueur, un select à choix multiple (pas top).

    A voir comment tu t'y es pris pour les enregistrer en base de données...

    A voir aussi si ça vaut la peine de se casser la tête avec une seule requête...
    alors qu'il est peut-être plus simple d'en faire plusieurs.
    Dernière modification par Invité ; 30/05/2015 à 10h18.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 59
    Points : 13
    Points
    13
    Par défaut
    Bonjour Jérôme,

    Merci de ta réponse.

    Tu l'as surement oublié vu l'aide que tu apportes à tous, mais mon formulaire d'enregistrement, est finit depuis un moment, d'ailleurs tu m'a beaucoup aidé pour le faire.

    Celui-ci me sert à interroger l'existant dans la base, en vérifiant la présence d'une adresse mail d'un utilisateur, d’où l'utilité que les infos apparaissent dans des inputs, pour être plus claire.
    Et j'imprimerai la fiche si besoin.

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. recuperation données et insertion dans table
    Par amocco dans le forum Débuter
    Réponses: 1
    Dernier message: 25/05/2009, 16h41
  2. Récupération automatique des données d'une feuille de saisie
    Par vieri dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/01/2009, 17h21
  3. Réponses: 8
    Dernier message: 16/05/2008, 09h53
  4. [SQL] Récupération de données et Insert dans une table
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 32
    Dernier message: 12/07/2006, 16h17
  5. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13

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