[RESOLU] visualiser base de donnees dans une liste déroulante

Eléphanteau du PHP | 25 Messages

03 janv. 2013, 15:11

bonjour,

j'ai réalisé un code permettant de visualiser les données de ma base, dans une liste déroulante pour pouvoir ensuite les modifier ! j'ai réussi a faire afficher le selected (l'option choisis par l'utilisateur) et j'aimerais donc visualiser la valeur par défaut ( le selected) + les autres valeurs qu'il peut y avoir dans mon type ENUM poste ('employé','directeur','PDG'). comment puis-je faire ? avez vous des idées ?

voici mon code :
$result = mysql_query("SELECT DISTINCT * FROM personne WHERE Nom LIKE '".mysql_real_escape_string($nom)."' && Prenom LIKE '".mysql_real_escape_string($prenom)."'");
$list = mysql_query("SELECT DISTINCT * FROM personne ");//requete pour listing personnes

                    echo '<select name="poste">';//création du select

                    while ($data = mysql_fetch_array($result))
                        {
                            while ($row = mysql_fetch_array($list)) {
                                if ($row["poste"] == $data["poste"]) //si la personne trouvée est celle de reponse, alors
                                    echo '<option value="'.$row["poste"].'" selected>'.$row["poste"].'</option>';//option avec select
                                else
                                    echo '<option value="'.$row["poste"].'">'.$row["poste"].'</option>';//option sans select
							}
						}
					echo '</select>';//fin select
merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 janv. 2013, 16:04

Le plus simple serait de faire un select avec tes 3 valeurs... mais bon, si tu veux éviter la redondance, il faut faire une requête sur la structure de la table pour pouvoir récupérer les valeurs autorisées de l'enum (attention cela implique également que le user utilisé pour se connecter à la base dispose des droits nécessaires) :
SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'le_nom_de_ta_table' AND COLUMN_NAME = 'le_nom_de_ta_colonne'
Bon par contre, faut nettoyer le résultat pour virer tout ce qui ne te sert pas, mais ça peut se faire assez facilement avec une expression régulière :
preg_match_all( "/'(.*?)'/", $row, $val );
print_r($val);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

03 janv. 2013, 16:07

merci je vais essayé

Eléphanteau du PHP | 25 Messages

03 janv. 2013, 16:14

la requête que tu me donne je la met dans $row ? :)

Eléphanteau du PHP | 25 Messages

03 janv. 2013, 17:23

j'ai reussi a utlidé ta requete mais preg_match_all ne fonctionne pas !

mon code :
$row = mysql_query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'personne' AND COLUMN_NAME = 'situation'");	
$res = mysql_fetch_array($row);
preg_match_all( "/'(.*?)'/", $res, $val );
print_r($val);
l'erreur est :
"SCREAM: Error suppression ignored for"
" Warning: preg_match_all() expects parameter 2 to be string, array given in C:\..."

peux tu m'aider STP ?

merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

03 janv. 2013, 17:55

$res est un array, il faut passer une String. ;)
preg_match_all( "/'(.*?)'/", $res[0], $val );

Eléphanteau du PHP | 25 Messages

04 janv. 2013, 09:21

bonjour,

j'ai donc essayé avec ta solution :
$row = mysql_query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'personne' AND COLUMN_NAME = 'situation'");	
					$res = mysql_fetch_array($row);
					preg_match_all( "/'(.*?)'/", $res[0], $val );
					print_r($val);
mais il me sort :
Array ( [0] => Array ( [0] => 'Celibataire' [1] => 'En couple' [2] => 'Pacse' [3] => 'Marie' [4] => 'Divorce' [5] => 'Veuf' ) [1] => Array ( [0] => Celibataire [1] => En couple [2] => Pacse [3] => Marie [4] => Divorce [5] => Veuf ) )

et j'aimerais que récupérer les valeurs (célibataire,En couple,Pacse , Marie, Divorce,Veuf) c'est tout !!
et pouvoir les exploité une par une ! aurais tu une idée comment faire ?

merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 10:32

La documentation est très complète quand à comment exploiter les array : http://fr2.php.net/manual/en/language.types.array.php :)

Eléphanteau du PHP | 25 Messages

04 janv. 2013, 11:05

merci j'avais déjà lu cette doc . mais elle ne parle pas de comment exploité les mysql_fetch_array() .
je n'arrive donc pas à récupérer les valeurs une par une ! je ne suis pas calés en PHP
d'autres idées ou solution ?

merci

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 11:22

mysql_fetch_array te retourne un array. ;)
Tu as de plus des exemples d'utilisation dans la doc : http://fr2.php.net/mysql_fetch_array

Eléphanteau du PHP | 25 Messages

04 janv. 2013, 12:23

merci je vais essayé !

Eléphanteau du PHP | 25 Messages

04 janv. 2013, 16:31

j'ai réussi a récupérer les valeurs comme ceci :
						<?php 
						$result1 = mysql_query("SELECT DISTINCT * FROM personne WHERE Nom LIKE '".mysql_real_escape_string($nom)."' && Prenom LIKE '".mysql_real_escape_string($prenom)."'");
						$list1 = mysql_query("SELECT DISTINCT situation FROM personne ");//requete pour listing personnes

						echo '<select name="situation">';//création du select
						
						while ($data = mysql_fetch_array($result1))
							{
								while (($row = mysql_fetch_array($list1) )) 
								{
									if ($row["situation"] == $data["situation"]){
										echo '<option value="'.$row["situation"].'" selected>'.$row["situation"].'</option>';}//option avec select
									else
									{
										$ress = mysql_query('SHOW COLUMNS FROM personne LIKE "situation" ');// requete pour chercher les valeurs dans SET
										$ligne = mysql_fetch_array($ress);//je met les valeurs dans un tableau
										$type = substr($ligne['Type'], 5, (strlen($ligne['Type'])-7));//je les traites en enlevant les premier caractere
										$mon_enum = preg_split('#\',\'#', $type);//j'eneleve les guiellemets et les virgules
										for ($i=0 ; $i<6 ; $i++)
										echo '<option value="'.$mon_enum[$i].'">'.$mon_enum[$i].'</option>';
									}
								}
							}		
						echo '</select>';//fin select		
						?>
Mais par contre tout ce qu'il y a aprés le "else" se répete autant de fois qu'il y a de personne dans ma table , j'aimerais qu'il se répete qu'une seul fois
comment puis-je faire ?

merci

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 16:32

Mets donc le code de ce else en dehors de ta boucle while pour que ces infos n'apparissent qu'une seule fois dans ton select.

Eléphanteau du PHP | 25 Messages

04 janv. 2013, 16:50

je ne peux pas sinon ca me fait une erreur !!
Parse error: syntax error, unexpected T_ELSE in C:\....
while ($data = mysql_fetch_array($result1))
{
           while (($row = mysql_fetch_array($list1) )) 
           {
           if ($row["situation"] == $data["situation"])
           echo '<option value="'.$row["situation"].'" selected>'.$row["situation"].'</option>';//option avec select
            }		
}							
	else
	{
	$ress = mysql_query('SHOW COLUMNS FROM personne LIKE "situation" ');
	$ligne = mysql_fetch_array($ress);//je met les valeurs dans un tableau
	$type = substr($ligne['Type'], 5, (strlen($ligne['Type'])-7));//je les traites en enlevant les premier caractere
	$mon_enum = preg_split('#\',\'#', $type);//j'eneleve les guiellemets et les virgules
	for ($i=0 ; $i<6 ; $i++)
	echo '<option value="'.$mon_enum[$i].'">'.$mon_enum[$i].'</option>';
	}

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 17:59

Le code contenu dans le else, pas le else avec. ;)
Sinon cela n'a aucun sens.