Bonjour,

Débutant en php, et malgré pas mal de recherche (peut être mauvaise recherche?), je n'arrive pas à trouver réponse à mon interrogation concernant la possibilité ou non d'afficher via un echo plusieurs données provenant d'une même table.

Pour exemple générique:

J'ai dans une base de donnée une table que l'on appellera pour faire simple "user".
Dans cette table j'ai un champ "nom", un champ "prenom", et un champ "age".
Dedans j'ai par exemple un "dupont" "jean" qui à pour age "30", un "lajoie" "eric" qui à pour age "40", etc...

Je suis entrain de suivre le tuto sur la "gestion des news", dans lequel j'apprends à écrire une donnée via un echo.
exemple: j'arrive à appeler avec un premier echo "prenom" pour qu'il m'écrive "jean", puis appeler avec un deuxième echo "age" pour qu'il m'écrive "30", seulement dans le cas de figure qui suit cela me marque Jean puis en dessous me marque 30, alors que je souhaiterais qu'il s'écrire l'un après l'autre

<?php
    $sql="SELECT * FROM user";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        while ($data=mysql_fetch_assoc($req))
        {
            echo"<p>{$data"prenom"]}</p>;";
            echo"<p>{$data"age"]}</p>";         

        }                           
?>

Seulement dans le cas de figure ci-dessus cela me marque Jean puis en dessous me marque 30, alors que je souhaiterais qu'il s'écrire l'un après l'autre sur la même ligne. Alors oui, j'ai un semblant de réponse en suivant le tuto en codant comme suit.

<?php
    $sql="SELECT * FROM user";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        while ($data=mysql_fetch_assoc($req))
        {
            echo"<p>{$data"prenom"]}   ";
            echo"{$data"age"]}</p>";            

        }                           
?>

Mais n'y a t-il pas une autre méthode pour écrire jean et 30 sur une même ligne en utilisant qu'un seul echo. De même que si je souhaite avoir une class "<h1>" pour le prenom et une class "<P>" pour l'age, comme dois-je rédiger mon code? Dois-je être obligé de passer par le css?

En vous remerciant.

Cordialement.

7 réponses


Pewel-OutOfNutella
Réponse acceptée

Tu n'es pas obligé d'intégrer le foreach, c'est une alternative au while ici.

Voici ce que tu souhaite sur le echo :

<?php
    $sql="SELECT * FROM user";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        while ($data=mysql_fetch_assoc($req))
        {
            echo"<h1>" .$data"prenom"]. "</h1>   ".
                "<p>" .$data"age"]. "</p>";         

        }                           
?>

Sinon, comme tu es débutant, je te conseilles de t'entraîner à faire des recherches sur Google, comprendre les mots clés, ce qui est utile dans une requête etc.
Tu dis que tu as peut être effectué une mauvaise recherche, je te donnes ici ce que tu aurais pu taper dans Google pour avoir ta réponse : "concatenation echo". Mais ne t'inquiète pas, ça vient avec de l'exercice. Google est un outil comme un autre, à savoir prendre en main. Une fois que c'est fait, tu peux trouver réponse à n'importe quelle question

Tu peux utiliser la concaténation, ou couper tes boucles, par exemple :

foreach($code as $c)
{
 echo 'Mon nom est '.$c'nom'].' et je suis du sexe '.$c'sexe'];
}
// ou encore 
<?php
foreach($code as $c):?>
    Mon nom est <?= $c'nom'];?> et je suis du sexe <?= $c'sexe'];?>
<?php endforeach;?>

De cette façon, tu peux mettre personnaliser l'affichage comme bon te semble .

Est ce que cette technique répond à ta question ?

Petite précision : les <?= $variable;?> correspond à l'instruction <?php echo $variable;?>

BAM Jan0
Auteur

<u>@ Benjamin:</u>
Tout d'abord je te remercie pour ta réponse.

Concernant la technique que tu me montres, en l’occurrence le "foreach", je n'ai pas encore eu l'occasion de l'utiliser par rapport à mes besoins, et par conséquent débutant dans ce monde vaste qu'est le PHP, je ne connais cette technique que de nom.

Du coup, j'ai regardé ici et là des tuto pour comprendre le foreach. Malheureusement je n'arrive pas à l'insérer dans mon bout de code qui comprend ma requete sql, donc ne serait dire sur le coup si ta réponse peut me permettre de répondre à ma question.

Serait-il possible que tu intègres ta technique dans mon bout de code du premier message, en tenant compte de mes requetes sql?

Merci d'avance.

BAM Jan0
Auteur

u>@Pewel:</u

Je te remercie pour ta réponse.
Cette dernière répond parfaitement à mon problème.

Pour ce qui de la recherche sur Google, effectivement j'étais partie dans une autre direction concernant ma recherche en tapant du style "écrire 2 champs bdd dans un echo" ou ce genre de chose. Effectivement, j'aurais peut être dut réfléchir plus simple en axant ma recherche sur la concaténation.

Encore merci de ton aide.

Je n'ai plus l'habitude de travailler avec l'extention mysql, mais ça devrait donner quelques chose ça :

$sql="SELECT * FROM user";
    $req=mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());
        $data=mysql_fetch_assoc($req);
        foreach($data as $d)
        {
            echo $d'nom'];
        }

Ici, dans ce cas présent, l'utilisation de mysql_fetch_assoc doit être utilisé avec un while, et non pas un foreach.
Pourquoi ? Parce que mysql_fetch_assoc retourne un tableau correspondant à la ligne trouvé en base.
mysql_fetch_assoc fait donc un parcours ligne par ligne et retourne surtout une ligne après une ligne.

Du coup si tu fait

$data=mysql_fetch_assoc($req);
foreach($data as $d) {
    echo $d'nom'];
}

tu auras la première ligne trouvé et c'est tout. Le while dans ce cas permet de dire "tant que je peux lire en base de donneés, alors je fais ça". En utilisant le foreach de cette manière, ca devient : "je récupère ma ligne, et pour chaque ligne (juste une seule), j'affiche mes données".