Mangeur de cigogne Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !


Rechercher dans le forum

Mots-clés :

Trouver :
un de ces termes tous les termes

Depuis :
7 j 15 j 30 j


Retour à l'index du forum

sortir le champ "commentaire" d'un champ mysql

Message original de Julian

Le : 14/11/2008 à 16:07:24

Dejà lu 295 fois avant vous

Hello,

Dans ma bdd "test", j'ai une table "user", et dans cette table user, j'ai les champs "id", "noms", "prénoms".
Pour chacun de ces champs, j'ai renseigné dans mysql la case "commentaire". Ce que je veux, c'est savoir comment récupérer le contenu de ce champs "commentaire". Par exemple pour chaque champ, je récupère le nom de ce dernier avec mysql_field_name, je veux savoir s'il existe pas par hasard une fonction genre "mysql_field_comment" (celui-ci n'existe malheureusement pas..) pour sortir ce commentaire.

Exemple :

Pour le champ "nom", j'ai comme mysql_field_name "nomuser" et comme commentaire "Nom du user". Ce que je veux, c'est non pas sortir "nomuser", mais "Nom du user".

En fait, je génère mes formulaire dynamiquement en fonction de ma table, et bien que le form se génère bien, j'affiche le nom des champs, et parfois ce n'est pas très causant, ainsi, j'ai renseigné un truc un peu plus causant dans "commentaire", et c'est cette info que je voudrais extraire.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 14/11/2008 à 16:33:39

Saluton,
Je crains qu'il te faille passer par une requête
SHOW FULL COLUMNS FROM tbl_name

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 14/11/2008 à 16:40:41

mhh.. Peux tu développer stp ?

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 14/11/2008 à 21:09:14

Hé bien cette requête te retourne une ressource dont chaque ligne est un tableau associatif qui contient les items suivants décrivant une colonne de la table :
{Field,Type,Collation,Null,Key,Default,Extra,Privileges,Comment}

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 17/11/2008 à 11:52:54

Hello,

bon, j'ai bien réussis à lister mes commentaires, via un
$sql2 = "SHOW FULL COLUMNS FROM $module_récupéré";
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
while($data2 = mysql_fetch_array($req2))  
{
     echo $data2[8]."<br>";
}[/ode]
Très bien, ça sort mes commentaires comme je veux, le hic, c'est que je ne vois pas comment imbriquer ça dans mon code qui sort dynamiquement la liste de mes champs :

[code]for ($i = 0; $i < $columns; $i++) 
{
    if(!ereg("id0",mysql_field_name($fields, $i)))
    {    
        $namefield = mysql_field_name($fields, $i);
        $length = mysql_field_len($fields, $i);
        $type = mysql_field_type($fields, $i);
        if ($type == "blob")
        {
            echo $namefield .' <br><label><textarea name="'.$namefield.'" cols="40" rows="4"</textarea></label><br>';
        }
        elseif(ereg("_lst",$namefield))
        {            
            echo $namefield." <select>";
            $sql = "SELECT * FROM $namefield ORDER BY 2";
            $res = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
            while($data=mysql_fetch_array($res)) 
            {
                echo "<option>".$data[1]."</option>\n";
            }
            echo "</select><br>";
        }
        elseif($length <= "255" AND !ereg("_lst",$type))
        {
            $sizefield = $length/6;
            echo $namefield .' <input name="'.$namefield.'" type="text" size="'.$sizefield.'"><br>';
        }
    }
}



J'aimerais en fait qu'au lieu de faire echo $namefield, je fasse un echo $data2[8], pour que chaque commentaire corresponde au bon champ.. J'ai bien imaginé des solutions avec des jointures, mais impossible de sortir quoi que ce soit..

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 17/11/2008 à 11:54:51

Désolé j'ai oublié un c :

$sql2 = "SHOW FULL COLUMNS FROM $module_récupéré";
$req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
while($data2 = mysql_fetch_array($req2))  
{
     echo $data2[8]."<br>";
}



et

for ($i = 0; $i < $columns; $i++) 
{
    if(!ereg("id0",mysql_field_name($fields, $i)))
    {    
        $namefield = mysql_field_name($fields, $i);
        $length = mysql_field_len($fields, $i);
        $type = mysql_field_type($fields, $i);
        if ($type == "blob")
        {
            echo $namefield .' <br><label><textarea name="'.$namefield.'" cols="40" rows="4"</textarea></label><br>';
        }
        elseif(ereg("_lst",$namefield))
        {            
            echo $namefield." <select>";
            $sql = "SELECT * FROM $namefield ORDER BY 2";
            $res = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
            while($data=mysql_fetch_array($res)) 
            {
                echo "<option>".$data[1]."</option>\n";
            }
            echo "</select><br>";
        }
        elseif($length <= "255" AND !ereg("_lst",$type))
        {
            $sizefield = $length/6;
            echo $namefield .' <input name="'.$namefield.'" type="text" size="'.$sizefield.'"><br>';
        }
    }

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 17/11/2008 à 14:09:39

Saluton,
Tu peux générer un tableau associatif Field->Comment à partir de la requête SHOW FULL COLUMNS FROM $module_récupéré et ensuite $namefield te fournira l'index pour retrouver le commentaire dans ce tableau.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 17/11/2008 à 14:26:25

Pour construire le tableau associatif je te suggères
<?php
$sql2 
"SHOW FULL COLUMNS FROM $module_récupéré";
$comments=array();
$req2 mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
while(
$data2 mysql_fetch_assoc($req2)) {
     
$comments[data2['Field']]=$data2['Comment'];
     } 
?>

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 17/11/2008 à 15:08:51

Alors j'ai un peu revu cette histoire de tableaux associatifs, via http://www.wikituto.org/index.php/Tableaux:Tableaux_associatifs_PHP .Ca m'a l'air clair, mais dans mon cas, je ne vois toujours pas comment organiser ça, dans la mesure où je fais de l'entièrement dynamique. Je ne connais pas à l'avance le nom de mes champs, je ne peux donc pas les inscrire en dur dans mon code..

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 17/11/2008 à 15:12:00

mhh désolé j'avais pas vu ta dernière réponse. Es-tu sure que ton code est bon ? j'ai un soucis de guillemets au niveau des crochets. Merci de ton coup de main.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 17/11/2008 à 15:22:06

Es-tu sûr que ton code est bon ?

Oh non !
La preuve, il manque un $ au data2 de la dernière ligne.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 17/11/2008 à 15:31:16

Mais je comprends pas ton $comments[$data2['Field']]=$data2['Comment'];

Tu passes la valeur d'une variable à une autre.. je saisis pas.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 17/11/2008 à 15:33:16

Je dis que dans le tableau comments l'index 'User' sera associé à la valeur 'Nom utilsateur'.
Fais un print_r($comments) en fin de boucle tu verras un beau tableau associatif.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 19/11/2008 à 10:30:26

en fait, pour le bout de code suivant :

for ($i = 0; $i < $columns; $i++) 
    {    
        if(!ereg("id0",mysql_field_name($fields, $i)))
        {    
            $namefield = mysql_field_name($fields, $i);
            $length = mysql_field_len($fields, $i);
            $type = mysql_field_type($fields, $i);
            if ($type == "blob")
            {
                echo $namefield .' : <br><label><textarea name="'.$namefield.'" cols="40" rows="4"</textarea></label><br>';
            }
            elseif(ereg("_lst",$namefield))
            {            
                echo $namefield." : <select>";
                $sql = "SELECT * FROM $namefield ORDER BY 2";
                $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                while($data=mysql_fetch_array($req)) 
                {
                    echo "<option>".$data[1]."</option>\n";
                }
                echo "</select><br>";
            }
            elseif($length <= "255" AND !ereg("_lst",$type))
            {
                $sizefield = $length/6;
                echo $namefield .' : <input name="'.$namefield.'" type="text" size="'.$sizefield.'"><br>';
            }
        }
    }
    echo '<input type="submit" name="Submit" value="Envoyer"></form>';
}



Je ne vois pas comment intégrer ton code à toi. Ici $namefield me renvoi le nom du champ dans la table, et moi je voudrais non pas le "name" mais le "comment". Je conserve la deuxième apparition de $namefield (pour le vrai nom du champ), mais pour l'affichage, je voudrais le commentaire du champs. Et là, je bloque sur la façon de procéder.. J'ai essayé d'intégrer ton while à mon for, mais ça ne marche pas du tout comme je veux, je m'emmêle trop les pinceaux.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 19/11/2008 à 10:37:31

echo $comments[$namefield], comme je te l'ai dit dans mon post du 17/11/2008 à 14:09:39

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 19/11/2008 à 10:47:03

Oui ça j'ai bien compris, mais c'est dans les boucles for et while que je me perds. Voici ce que je fais :


<?php /* ... */
else
{    
    echo 
"<br>rajouter une entrée dans la table " .$module_récupéré"<br>";
    echo 
'<br><form action="modif.php?action=ajouter&amp;module='.$module_récupéré.'" method="POST" name="ajout">';
    
$sql2 "SHOW FULL COLUMNS FROM $module_récupéré";
    
$comments=array();
    
$req2 mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
    while(
$data2 mysql_fetch_assoc($req2)) 
    {
     
$comments[$data2['Field']]=$data2['Comment'];
     
        for (
$i 0$i $columns$i++) 
        {    
            if(!
ereg("id0",mysql_field_name($fields$i)))
            {    
                
$namefield mysql_field_name($fields$i);
                
$length mysql_field_len($fields$i);
                
$type mysql_field_type($fields$i);
                if (
$type == "blob")
                {
                    echo 
$data2['Comment'] .' : <br><label><textarea name="'.$namefield.'" cols="40" rows="4"</textarea></label><br>';
                }
                elseif(
ereg("_lst",$namefield))
                {            
                    echo 
$data2['Comment']." : <select>";
                    
$sql "SELECT * FROM $namefield ORDER BY 2";
                    
$req mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                    while(
$data=mysql_fetch_array($req)) 
                    {
                        echo 
"<option>".$data[1]."</option>\n";
                    }
                    echo 
"</select><br>";
                }
                elseif(
$length <= "255" AND !ereg("_lst",$type))
                {
                    
$sizefield $length/6;
                    echo 
$data2['Comment'] .' : <input name="'.$namefield.'" type="text" size="'.$sizefield.'"><br>';
                }
            }
        }
    }
    echo 
'<input type="submit" name="Submit" value="Envoyer"></form>';
}
?>



Mais ça ne marche pas :|

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 19/11/2008 à 10:52:53

Tu dois générer le tableau $comments à part et l'utiliser comme une nomenclature.
Là je ne comprends pas grand chose à ton usine à gaz.

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 19/11/2008 à 11:21:51

En fait, voilà la partie de mon code, telle quelle actuellement, avec des explications :

<?php    /* géneration du formulaire */
    
echo "<br>rajouter une entrée dans la table " .$module_récupéré"<br>";
    
/* entête du formulaire */
    
echo '<br><form action="modif.php?action=ajouter&amp;module='.$module_récupéré.'" method="POST" name="ajout">';
    
/* récupèration des différents champs de ma table via    
        $fields = mysql_list_fields($table, $module_récupéré, $db);
        $columns = mysql_num_fields($fields); */
        
for ($i 0$i $columns$i++) 
        {    
    
/* si le nom de mon champs ne contient pas id0, j'affiche */
            
if(!ereg("id0",mysql_field_name($fields$i)))
            {    
                
$namefield mysql_field_name($fields$i);
                
$length mysql_field_len($fields$i);
                
$type mysql_field_type($fields$i);
    
/* récupération de différentes infos sur les champs, ce qui va m'aider pour la mise en forme */
                
if ($type == "blob")
                {
                    echo 
$namefield .' : <br><label><textarea name="'.$namefield.'" cols="40" rows="4"</textarea></label><br>';
                }
                elseif(
ereg("_lst",$namefield))
                {            
                    echo 
$namefield." : <select>";
                    
$sql "SELECT * FROM $namefield ORDER BY 2";
                    
$req mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                    while(
$data=mysql_fetch_array($req)) 
                    {
                        echo 
"<option>".$data[1]."</option>\n";
                    }
                    echo 
"</select><br>";
                }
                elseif(
$length <= "255" AND !ereg("_lst",$type))
                {
                    
$sizefield $length/6;
                    echo 
$namefield .' : <input name="'.$namefield.'" type="text" size="'.$sizefield.'"><br>';
                }
    
/* ci dessus, différentes conditions pour la mise en forme, si c'est du longtext (blob), si inférieur ou égale à 255, ou s'il s'agit de liste.. */
            
}
        }
    echo 
'<input type="submit" name="Submit" value="Envoyer"></form>';
    
/* mon formulaire est correctement généré */
 
?>



Comme tu le vois, je récupère plein d'infos sur mes champs, et les utilise pour mettre en forme, et également pour renseigner mes listes, de façon dynamique (en fait, une table qui va service de source à une liste, je la nomme "matable_lst", et par cette astuce, je récupère directement ma liste rien qu'avec le nom du champs, et ma liste se complète toute seule).

Mon code actuel me permet de générer un formulaire complet, le hic, c'est que visuellement, mettre "bu_lst [champ bu]", ça veut pas dire grand chose, je voudrais mettre idéalement "liste des BU : ", du coup, je voudrais renseigner le "comment" de mon champ (en y mettant ici "liste des BU : ") et l'utiliser.

A part, comme tu me l'as montré, je sais récupérer mes comments, mais je ne vois pas comment intégrer ça dans mon code actuel :\

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Maljuna Kris

Le : 19/11/2008 à 13:49:02

Il te suffit de générer l'array $comments avant la boucle for ($i = 0; $i < $columns; $i++)

Re: sortir le champ "commentaire" d'un champ mysql

Réponse de Julian

Le : 21/11/2008 à 11:40:56

c'était exactement ça, merci ! :)
Retour à l'index du forum


Ajouter une réponse

Nom :

Email :

Titre :

Message :

Combien font 3 + 2 ?

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Recevoir les réponses par mail :
Oui Non

Mémoriser mon nom et mon email :
Oui Non

 

Charte des forums PHPDébutant

Bienvenue à vous,

Vous voici donc prêt à poster sur les forums de PHPDébutant. Avant toute chose, merci de prendre le temps de lire les quelques lignes qui suivent.

Attention, à partir du moment ou vous postez dans les forums, vous acceptez la présente charte. Si votre message est modéré ou supprimé, vous ne pourrez pas dire que vous n'étiez pas au courant des règles !

Pourquoi une charte

Le but de cette charte est simple : que ces forums restent cordiaux et que les personnes aidant les autres ne se sentent pas lésées, insultées, critiquées. Pour que ces forums fonctionnent, il faut des personnes qui répondent aux questions. Pour que celles ci restent sur le forum, il faut les traiter avec respect, et ne pas les confondre avec des bonnes poires, esclaves, etc...

Mesures de régulation

  • Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).
  • Prenez le temps de vérifier que la question que vous allez poser n'a pas déjà été posée, à l'aide du formulaire de recherche.
  • Prenez également le temps de vérifier que la réponse à votre question ne se trouve pas dans les tutoriaux. Nous ne pouvons pas répeter pour chaque visiteur tous les cours, il sont écrits, profitez-en (dans l'ordre tant qu'à faire) !
  • Nous ne faisons pas de scripts tout prêts. Nous aidons et vous guidons pour que vous puissiez trouver vous même la réponse, ce qui est beaucoup plus formateur.
  • Si vous comptez poster un message publicitaire, abstenez-vous. Au mieux le message sera supprimé, au pire les habitués descendront votre service en flamme.
  • Pour tout message de recrutement, précisez bien votre demande. Inutile de poster pour trouver un développeur pour faire gratuitement votre site de webmastering qui vous rapportera plein de sous. Les seuls coups de mains donnés en développement sont pour des associations ou des sujets passionnant un développeur.
  • Toute personne tenant des propos racistes ou illicites sera bannie et pourra faire l'objet de poursuites.
  • L'humour étant très présent sur ces forums, ne réagissez pas violemment à des propos qui pourraient être à prendre au second degré et avec de l'humour.
  • Attention aux trolls ! Leur multiplication peut entraîner la mort des forums, et sans forum, plus d'aide !
  • Respectez les thèmes des forums. Pensez aussi à vérifier que votre message n'a pas été déplacé si vous le croyez effacé.

Conseils

  • N'oubliez pas que les personnes à qui vous vous adressez sont des bénévoles qui donnent de leur temps pour vous. Si vous êtes méchants avec eux, il n'aideront plus et vous n'aurez plus d'aide !
  • Ne soyez pas pressé. Nous avons une vie aussi, et nous ne sommes par forcément tout le temps disponibles.
  • N'oubliez pas que les smileys sont la pour faire comprendre l'humeur dans laquelle vous rédigez un message. Il est indispensable de mettre des smileys quand vous faites de l'humour, sinon le message pourrait être mal perçu (ca serait quand même idiot de plomber l'ambiance en faisant de l'humour !).
  • Surveillez votre orthographe, nous ne vous demandons pas d'être littéraire, mais que votre message soit au moins compréhensible. Evitez à tout prix le style SMS.
  • Expliquez clairement le problème, ce n'est pas toujours facile, mais mieux vaut essayer de le faire le plus possible.
  • Ne postez pas de questions trop vagues du genre "comment faire un forum". Cela ne sert à rien, cela ne s'explique pas sur un coin de forum.
  • Mettez un titre clair, correspondant au sujet que vous allez poster. A l'aide, au secours, etc... ne sont pas d'une grande utilité pour ceux qui vont vous aider. Parfois nous passons en coup de vent, et si nous ne savons pas ce que va contenir le message, nous ne le regarderons même pas.
  • Ne mettez par [URGENT] ou autre joyeuseté du genre dans vos titres de messages. Cela irrite les gens (il y'a plus urgent dans la vie, pensez aux gens qui meurent de faim ou ayant besoin des pompiers, ça c'est urgent), et vous n'aurez pas votre réponse plus vite pour autant.
  • Si vous connaissez déjà à quel domaine votre question d'adresse (par exemple mysql, html, php, javascript), n'hésitez pas à le marquer au début de votre message, avec un [html] par exemple (notez les minuscules).
  • Ne dites pas "ça marche pas". Il y a toujours des raisons. Je vous invite à consulter le tutorial "ça marche pas" qui vous aidera à mieux expliquer votre problème.
  • Ne postez pas 36000 lignes de code. Sur le forum, le code apparaît non coloré et sans indentation, ce qui est illisible. Au dessus de 5 lignes, plus personne ne lit et vous n'aurez pas de réponse. Utilisez le wall
  • En règle générale restez courtois et clair, n'oubliez pas que la politesse fait partie de la vie courante. Il est de bon ton de dire bonjour même pour une réponse, même plusieurs fois dans la journée (ceux qui vous lisent n'ont pas forcément lu vos autres messsages)

La Fin

Avec tout ces conseils vous augmenterez les chances de réponse, leur pertinence et leur rapidité

Voilà, ça sera tout, bonne écriture :)

Fermer les règles et poster un message


www.phpdebutant.org © 2009 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement