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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Affichage de "Array" lors de recupération dans base de données


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Par défaut [Smarty] Affichage de "Array" lors de recupération dans base de données
    Hello,

    Je me suis mis dernièrement au générateur de templates Smarty, pour la réalisation d'une application web, le but étant d'enregistrer des utilisateurs via un formulaire, pour cela pas de soucis, mais dans la page de recherche de ces derniers, j'ai un petit soucis:

    Voici le code de search.php:
    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
    if(!empty($_POST["r_nom"]) || !empty($_POST["r_prenom"]) || !empty($_POST["r_numero"]))
    {
       if(!empty($_POST["r_nom"]))
       {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Nom : ".htmlentities($_POST["r_nom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
         if(!empty($_POST["r_prenom"]))
         {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Prénom : ".htmlentities($_POST["r_prenom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
         }
         if(!empty($_POST["r_numero"]))
         {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Numéro : ".htmlentities($_POST["r_numero"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
         }
     
    $recherche = mysql_query("SELECT id, nom, prenom, numero FROM `utilisateurs` WHERE nom LIKE '".mysql_real_escape_string($_POST["r_nom"])."%' AND prenom LIKE '".mysql_real_escape_string($_POST["r_prenom"])."%' AND numero LIKE '".mysql_real_escape_string($_POST["r_numero"])."%' ORDER BY nom DESC");
     
    $data = mysql_fetch_array($recherche);
    	foreach($data as $data)
    	{
    	  $data2['nom'][] = htmlentities($data['nom']);
    	  $data2['prenom'][] = htmlentities($data['prenom']);
    	  $data2['numero'][] = htmlentities($data['numero']);
    	}
     
    $smarty->assign('nom_result', $data2['nom']);
    $smarty->assign('prenom_result', $data2['prenom']);
    $smarty->assign('numero_result', $data2['numero']);
    }
    et voici le code de search.tpl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form method="POST" action="">
    Rechercher un nom : <input id="r_nom" type="text" class="fieldtext" name="r_nom" value="" /><br />
    Rechercher un prénom : <input id="r_prenom" type="text" class="fieldtext" name="r_prenom" value="" /><br />
    Rechercher un numéro : <input id="r_numero" type="text" class="fieldtext" name="r_numero" value="" /><br />
    <input type="submit"  class="button" value="Rechercher" /><br /><br />
    </form>
    <table>
    <tr>
    <td>Nom</td><td>Prénom</td><td>Numéro</td>
    </tr>
    <tr>
    <td>{$nom_result}</td><td>{$prenom_result}</td><td>{$numero_result}</td>
    </tr>
    </table>
    Voici le résultat que j'obtiens:

    +---------------------------+
    | Nom | Prénom | Numéro|
    ------------------------------
    | Array| Array | Array |
    +----------------------------+

    Je ne vois pas trop où est le problème, peut-être un manque de recul...

    Si quelqu'un pourrait m'apporter une solution cela me serait d'une très grande aide, d'avance merci.

    Cordialement,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Par défaut
    re-hello,

    J'avais oublié de vous préciser la nature de la fonction recherche, il y a dans la base de données une table `utilisateurs` qui contient 4 champs: id, nom, prenom, numero; la requête SQL effectue un "WHERE champs LIKE 'valeur_$_post_du_formulaire%'";

    Si j'effectue la recherche:

    Nom: user001
    Prenom: (rien)
    Numéro: (rien)

    et que ma base de données contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +---------------------------------+
    | id | nom    | prenom   | numero |
    -----------------------------------
    | 1  | Dupont | Mike     | 001    |
    -----------------------------------
    |  2 | Dupont | Georges  |  002   |
    +---------------------------------+


    Je voudrais afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----------------------------+
    | nom    | prenom   | numero |
    ------------------------------
    | Dupont | Mike     | 001    |
    ------------------------------
    | Dupont | Georges  |  002   |
    +----------------------------+

    Mais je n'obtiens qu'un seul résultat même si il y à plusieurs utilisateurs du même nom et/ou prénom et/ou numéro...Etc, voici mes nouvelles sources:

    source de search.php:
    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
    if(!empty($_POST["r_nom"]) || !empty($_POST["r_prenom"]) || !empty($_POST["r_numero"]))
    {
      if(!empty($_POST["r_nom"]))
      {
         $smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Nom : ".htmlentities($_POST["r_nom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
       if(!empty($_POST["r_prenom"]))
       {
     	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Prénom : ".htmlentities($_POST["r_prenom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
       if(!empty($_POST["r_numero"]))
       {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Numéro : ".htmlentities($_POST["r_numero"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
     
    $recherche = "SELECT id, nom, prenom, numero FROM `utilisateurs` WHERE nom LIKE '".mysql_real_escape_string($_POST["r_nom"])."%' AND prenom LIKE '".mysql_real_escape_string($_POST["r_prenom"])."%' AND numero LIKE '".mysql_real_escape_string($_POST["r_numero"])."%' ORDER BY nom DESC";
     
    $result = mysql_query($recherche);
    $ligne = mysql_fetch_array($result);
     
    $arr = array("nom" => htmlentities($ligne['nom']), "prenom" => htmlentities($ligne['prenom']), "numero" => htmlentities($ligne['numero']));
    $smarty->assign('myArray', $arr);
    }
    source de search.tpl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form method="POST" action="">
    Rechercher un nom : <input id="r_nom" type="text" class="fieldtext" name="r_nom" value="" /><br />
    Rechercher un prénom : <input id="r_prenom" type="text" class="fieldtext" name="r_prenom" value="" /><br />
    Rechercher un numéro : <input id="r_numero" type="text" class="fieldtext" name="r_numero" value="" /><br />
    <input type="submit"  class="button" value="Rechercher" /><br /><br />
    </form>
    <table>
    <tr>
    <td>Nom</td><td>Prénom</td><td>Numéro</td>
    </tr>
    {foreach from=$myArray item=foo}
    <td>{$foo}</td>
    {/foreach}
    </table>
    Et j'obtiens uniquement l'utilisateur qui à le plus petit id (2 dans mon cas), je suis un peu perdu, je l'avoue

    Merci pour votre aide future.

    Cordialement,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Par défaut
    re-re-hello,

    Je me suis arraché les cheveux, mais j'y suis enfin arrivé, voici la solution à ce problème:

    Tout d'abord il faut créer une class ainsi qu'une fonction permettant de récupérer les informations de la base de données à l'instar de mysql_fetch_array() en PHP "basique", la voici:

    source fonction pour récupérer info bdd (class.php):
    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
     
    <?php
    class retoursql {
    // Tableau renvoyant sous la forme $ligne['chp1'] $ligne['chp2'].
    public function getRowAssoc($sql)
    {
    	return mysql_fetch_array($sql, MYSQL_ASSOC);  // ?
     
    }
     
    public function GetAllArray($sql)
    {
    	$lignes=array();
    	while ($l=$this->getRowAssoc($sql)) {
    		$lignes[]=$l;
    	}
    	return $lignes;
    }
    }
    ?>
    Maintenant voici donc le final des sources de ma fonction recherche:

    source de search.php:
    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
     
    <?php
    // Bibliothèque Smarty.
    require_once('libs/Smarty.class.php');
     
    // Ma class perso
    require_once('class.php');
     
    // Instance de Smarty.
    $smarty = new Smarty();
    $retoursql = new retoursql();
     
    if(!empty($_POST["r_nom"]) || !empty($_POST["r_prenom"]) || !empty($_POST["r_numero"]))
    {
       if(!empty($_POST["r_nom"]))
       {
          $smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Nom : ".htmlentities($_POST["r_nom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
       if(!empty($_POST["r_prenom"]))
       {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Prénom : ".htmlentities($_POST["r_prenom"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
       if(!empty($_POST["r_numero"]))
       {
    	$smarty->assign('resultsearch', "<div align=\"left\">Resultat pour les mots clef Numéro : ".htmlentities($_POST["r_numero"])."<br /><br /><table border=\"1\"><tr><td>ID</td><td>Nom</td><td>Prénom</td><td>Numéro</td></tr>");
       }
     
    $recherche = "SELECT id, nom, prenom, numero FROM `utilisateurs` WHERE nom LIKE '".mysql_real_escape_string($_POST["r_nom"])."%' AND prenom LIKE '".mysql_real_escape_string($_POST["r_prenom"])."%' AND numero LIKE '".mysql_real_escape_string($_POST["r_numero"])."%' ORDER BY nom DESC";
    $result = mysql_query($recherche);
    $ligne = $retoursql->getAllArray($result);
     
    foreach ($ligne as $ligne)
    {
       $ligne2['nom'][] = nl2br(htmlentities($ligne['nom']));
       $ligne2['prenom'][] = nl2br(htmlentities($ligne['prenom']));
       $ligne2['numero'][] = nl2br(htmlentities($ligne['numero']));
    }
     
    $smarty->assign('nom', $ligne2['nom']);
    $smarty->assign('prenom', $ligne2['prenom']);
    $smarty->assign('numero', $ligne2['numero']);
    }
    source de search.tpl:
    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
     
    <form method="POST" action="">
    Rechercher un nom : <input id="r_nom" type="text" class="fieldtext" name="r_nom" value="" /><br />
    Rechercher un prénom : <input id="r_prenom" type="text" class="fieldtext" name="r_prenom" value="" /><br />
    Rechercher un numéro : <input id="r_numero" type="text" class="fieldtext" name="r_numero" value="" /><br />
    <input type="submit"  class="button" value="Rechercher" /><br /><br />
    </form>
    <table>
    <tr>
    	<td>Nom</td><td>Prénom</td><td>Numéro</td>
    </tr>
    {section name=inscrits loop=$nom}
    <tr>
    	<td>{$nom[inscrits]}</td><td>{$prenom[inscrits]}</td><td>{$numero[inscrits]}</td>
    </tr>
    {/section}
    </table>
    Merci quand même, bonne journée à vous.

    Cordialement,
    A Tapz of NEt.

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

Discussions similaires

  1. [MySQL] Affichage sur plusieurs lignes dans base de données
    Par asvin dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/10/2008, 20h07
  2. Réponses: 1
    Dernier message: 13/08/2008, 14h59
  3. Réponses: 6
    Dernier message: 29/03/2008, 16h36
  4. [MySQL] Insertion et affichage UTF-8 dans base de données
    Par DeezerD dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/08/2007, 22h39
  5. [ARRAY]insertion variable dans base de donnée
    Par lazzeroni dans le forum JDBC
    Réponses: 2
    Dernier message: 30/03/2006, 11h33

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