[Résolu]Liste PHP alimentée par table MySQL - Problèmes divers... :o(

Bonjour m’sieurs dames… J’ai, comme on dirait, un petit problème… C’est normal, je suis débutant total en PHP et MySQL. :whistle:

J’utiliserais d’ailleurs avec plaisir l’outil de recherche (ça a dû être abordé pas mal de fois…), mais bon, hum, bref, passons… :o

Un bout de code valant tous les discours…

Juste le bout qui merdouille…


<TABLE>
        <TR>
          <TD><B>Ancien</B></TD>
          <TD><SELECT name=statut size=3>
<?php
<<<<<<<script connexion. Qui marche, pour l'avoir testé...>>>>>>>

    //Requête
$req=mysql_query('SELECT data FROM table');
WHILE ($sql=mysql_fetch_array($req))
 {
  print "<option>".$sql."</option>";     //Bug :o(
 }
?>

      </SELECT></TD>
      <TR>

  1. Ca concatène pas bien. Que ce soit avec ECHO, PRINT, des quote ou des guillemets, je m’en sors pas bien du tout, il me quote aussi ma variable (même avec des guillemets… :sweet: )
  2. Mes ECHO/PRINT ramassent tout ce qui traîne… Y compris mes variables (déjà dit en 1), mais aussi les quotes, et même les balises de fin de PHP… ?>
  3. Impossible de récupérer des données du fetch_array… :sweet:

$sql est un tableau contenant le résultat de ta requete. ici il n’y a qu’une colonne, mais ça reste un tableau :wink:

echo $sql[‘data’];

Alors c’est là le problème…


echo "<option>";
echo $sql['data'];
echo "</option>";

ne marche pas non plus… Toujours cette concaténation de mayrde… :sweet:

Et un script test (sans rien, ni tableau, ni form…)


echo "option";
echo $sql['data'];
echo "option";

N’affiche rien du tout. J’ai 1 donnée dans la DB pourtant… :confused:

J’comprends plus rien du tout… :riva:

va voir cette page
http://fr3.php.net/mysql_fetch_array

ya peut etre une merdouille du genre mysql_fetch_array renvoi un tableau indexé par des numériques, a priori ca marche pour les deux, il faudrait donc appeler le tableau comme ca :

$sql[0]


<TABLE>
<TR>
  <TD><B>Ancien</B></TD>
  <TD><SELECT name=statut size=3>
<?php
$Req = mysql_query( 'SELECT data FROM table' );
if( mysql_num_rows( $Req ) > 0 ) {
	while( list( $Data ) = mysql_fetch_array($Req) ) {
  ?><option><?php echo $Data; ?></option><?php
	}
} else {
	// Pas d'entrées.
}
?>
    </SELECT></TD>
<TR>

Je penserais a un truc du genre.

C’est dingue qu’il n’y ait pas plus de réponses, ni de tutoriaux ou exemples sur le net… Ca doit être un problème ultra-classique, me dites pas que je suis le seul à penser à associer MySQL à un menu déroulant… :riva:

Je viens t’aider : )
Deja vérifie bien que tu a un enregistrement quand meme :



$query = mysql_query("SELECT COUNT(*) FROM `table`");
list($nb) = mysql_fetch_array($query); 
echo $nb;



ENsuite essaye :



<table>
<tr>
<td><b>Ancien</b></td>
<td><select name="statut" size="3">

<?php
//Script connexion
require("php/secret/connect.php"); 
//Requête
$req = mysql_query('SELECT `data` FROM `table`');
while($sql = mysql_fetch_array($req))
	{
  echo "<option>".$sql['data']."</option>";
	}
?>
</select></td><tr></table>
</body></html?#62;;


et voivi le contenu de ma table (mysql5):


-- 
-- Structure de la table `table`
-- 

CREATE TABLE `table` (
  `data` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 
-- Contenu de la table `table`
-- 

INSERT INTO `table` (`data`) VALUES ('coucou');


Pour la création, j’en suis sûr. En fait, il y a un script de création, un script de modification, et pas de script de suppression, pour éviter les bourdes: si erreur de création, on modifie. Si création inutile, on assigne un nom genre XXX, et on laisse la donnée inutilisée jusqu’au moment utile (où on remplacera XXX par la data).

Et donc, comme je teste aussi des scripts de création, j’ai toujours l’interface MySQL active en arrière-plan pour vérification. :super:


<?php
//SCRIPT TEST


REQUIRE('connectlight.php');
$req = mysql_query('SELECT data FROM table');
while($sql = mysql_fetch_array($req))
{
 echo "Test".$sql['data']."test";      //Incertain...
}
?> 

En retour, j’obtiens TestValeur1testTestValeur2testTestValeur3test. Donc ce script fonctionne… Ca merde ailleurs, tout simplement. :neutre:

Merci beaucoup, c’est pas une erreur de PHP, mais d’HTML tout bête, donc ça devrait pas être trop compliqué à trouver. :slight_smile:

Edit: tout ne va pas pour le mieux dans le meilleur des mondes…
Là où je suis complètement paumé, c’est que…


<?php
echo '<HTML><BODY><FORM method="post action="modif_statuto.php"><SELECT name="statut" size=5>';

//Début HTML

REQUIRE('connectlight.php');
$req = mysql_query('SELECT statut FROM statuto');
while($sql = mysql_fetch_array($req))
{
 echo "<OPTION>".$sql['statut']."</OPTION>";      //Incertain...
}

//SCRIPT PHP

echo '</SELECT></FORM></BODY></HTML>'; //FIN HTML
?>

Fonctionne à la perfection. :riva:

Là, j’ai simplifié le script (pour en retirer l’essentiel), mais avec le PHP kivabienderrière, ma BDD est modifiée comme je veux, quand je veux… :super:

Bon, bah mayrdalors, je fais tout en PHP avec des echo dans tous les sens pour créer du HMTL.
C’est très meauche, mais du moment que ça marche! :ane:

Par contre, si un jour quelqu’un décide d’afficher le code… :nexath

Tu a qq problèmes de " " et de ’ ’ dans ta synthaxe, ca ne va pas terrible : )

Voila uen bonne synthaxe et un "bon" html pour ton utilisation :


monfichier.php :
<?php

echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
      \"http://www.w3.org/TR/html4/loose.dtd\">
<html?#62;<head>
<meta http-equiv=\"Content-type\" content=\"text/html; charset=ISO-8859-1\">

<title>Titre</title></head>
<body>
<form method=\"post\" action=\"modif_statuto.php\"><select name=\"statut\" size=\"5\">";


require('connectlight.php');
$req = mysql_query('SELECT `statut` FROM `statuto`');
while($sql = mysql_fetch_array($req))
{
echo "<option>".$sql['statut']."</option>";
}
?>
</select></form></body></html?#62;

Ps : met tes noms de balises tjs en minuscule, c’est une bonne habitude a prendre, et même nécessaire tu verras

Saluton,
Sauf à ce qu’il soit démontrer que le contenu de la table soit très volatile et versatile, remplir une liste de sélection, (a fortiori un menu) à partir d’une requête sur une table est le type même de la vraie fausse bonne idée.
Je préconise plutôt de générer un fichier d’include à chaque modification (ajout, suppression ou update) de la table et d’utiliser ce fichier généré dans les scripts qui requiert cette liste.

Oui. Tu sais c’était quoi le problème?
Je ne savais pas qu’un fichier devait être obligatoirement de type *.php quand il contient ne serait-ce qu’une ligne de php… Débutant total, comme je le disais au début… :paf:

Mais bon, globalement, c’est un langage bien foutu, quand même, et le fait que le serveur précise exactement à quel endroit une erreur de syntaxe éventuelle se trouve facilite énormément les choses. :slight_smile: