8795 sujets

Développement web côté serveur, CMS

Hello!
J'ai une page dont je me sers pour mettre à jour des données pour mon site...
Dans cette page, j'ai une boucle et pour chaque position, j'ai un ensemble de 4 boutons radio qui envoie la valeur sélectionnée dans ma bdd...

J'aimerais réussir à mettre en checked les boutons radio en fonction des valeurs présentes dans ma bdd, mais j'ai un peu de mal...

Voici mon code


// préparation du tableau
    $req_top40 = "SELECT
						t.pos,
                        t.id,
                        t.evo,
                        mp3.artiste,
                        mp3.titre
                        FROM
                        top40 t
                        LEFT JOIN
                        mp3
                        ON
                        t.id = mp3.id
                        GROUP BY
                        mp3.id
                        ORDER BY
                        t.pos ASC;";

						echo $req_top40;
						
    $req_top40b = mysql_query($req_top40);
    
$req_semaine = "SELECT semaine from top40 WHERE pos=1";
$req_semaineb = mysql_query($req_semaine);

    // maintenant, on affiche les donnees
    echo '<form method="post" action="top40.php" name="">';
    echo '<table width="950" border="5" bgcolor="#cococo" bordercolorlight="#fda3a5" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0";>';
    echo '<tr>';
    echo '  <td width="50"><center><b><font size="2">Position</font></b></center></td>';
    echo '  <td width="50"><center><b><font size="2">ID</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Artiste</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Titre</font></b></center></td>';
    echo '  <td width="200"><center><b><font size="2">Evolution</font></b></center></td>';
    echo '</tr>';
	
    while ($val = mysql_fetch_array($req_semaineb))
    {
			echo '<H2><font color="#FFFFFF"> Classement du <b> <input type="text" name="semaine" maxlength="20" size="20" value="'.$val['semaine'].'"></<b></font></H2>';
	}
	
    while ($val = mysql_fetch_array($req_top40b))
    {

        echo '<tr>';
        echo '  <td width="50"><center><b><font size="2">'.$val['pos'].'</font></b></center></td>';
        echo '  <td width="50"><center><b><font size="2"><input type="text" name="pos_'.$val['pos'].'_id" maxlength="15" size="5" value="'.$val['id'].'"></font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['artiste'].'</font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['titre'].'</font></b></center></td>';
        echo '  <td width="200"><center>';

echo ' <input type="radio" id="evo_plus" name="evo_'.$val['id'].'" value="haut"';
echo ($id->evo == "haut") ? ' checked="checked"' : '';
echo '><label for="evo_plus">+</label>';
echo ' <input type="radio" id="evo_moins" name="evo_'.$val['id'].'" value="bas"';
echo ($id->evo == "bas") ? ' checked="checked"' : '';
echo '><label for="evo_moins">-</label>';
echo ' <input type="radio" id="evo_egal" name="evo_'.$val['id'].'" value="egal"';
echo ($id->evo == "egal") ? ' checked="checked"' : '';
echo '><label for="evo_plus">=</label>';
echo ' <input type="radio" id="evo_entree" name="evo_'.$val['id'].'" value="entree"';
echo ($id->evo == "entree") ? ' checked="checked"' : '';
echo '><label for="evo_entree">E</label>';

[code]      echo '</center></td>';
        echo '</tr>';
    };
    echo '<tr>';
    echo '  <td colspan="5"><input type="submit" name="submit" value="Mettre A Jour"></td>';
    echo '</tr>';
    echo '</table>';
    echo '</form>';

Pourriez vous me dire pourquoi ça ne fonctionne pas?
Merci d'avance pour votre aide
Hello,
Je ne comprends pas trop le but de ton appli... mais là n'est pas le problème ! Smiley cligne

Bon, quand tu fais tes
echo ($id->evo == "haut") ? ' checked="checked"' : '';

ton $id ne semble défini nulle part avant.

Les valeurs "haut", "bas", "egal", "entree" que tu testes, elles sont bien stockées dans le champ evo de la table top40 ?
Si tu remplaces tes $id->evo par des $val['evo'], ça donne ce que tu veux ?
En fait cette apli me permets de mettre à jour un classement avec des données venant d'une autre table.

concernant les données haut, bas, egal et entree, elles sont bien dans le champs evo de ma table, en fonction de la donnée voulue bien sur...

concernant $val['evo'], non ça ne fonctionne pas mieux Smiley bawling

Merci pour ton aide Smiley smile
Salut,

je pige pas tout non plus : il faudrait peut-être nous montrer plus de code et notamment d'où provient ton curieux $id->evo...

S'il s'agit d'un test après soumission du formulaire ça devrait être $_POST['evo'] non ?
Heyoan a écrit :
Salut,

je pige pas tout non plus : il faudrait peut-être nous montrer plus de code et notamment d'où provient ton curieux $id->evo...

S'il s'agit d'un test après soumission du formulaire ça devrait être $_POST['evo'] non ?

Ta solution ne fonctionne pasmieux chez moi, mais de toutes façons, ce n'est pas après l'envoi du formulaire que je veux récupérer les données dans les boutons radio, c'est dès le chargement de la page, afin d'une part, de voir ce qui est dans la base, et d'autre part qu'en cas d'oubli de cocher l'un des boutons, il ne renvoie pas un vide dans la bdd...

voici le code complet de ma page :
<?php

include("../connexion.inc.php"); 
mysql_connect($host, $user, $pass); 
mysql_select_db("$bdd") 
or die("Ouverture base impossible"); 

// je mets ça ici pour afficher un tableau à jour après traitement
    if (isset($_POST['submit']))
    {
        for($pos = 1; $pos < 41; $pos++)
        {
            // récuperation de l'ID à cette position
            $id = abs(intval($_POST['pos_'.$pos.'_id']));
		//------------------bouton radio-------------------

	
	
foreach($_POST as $key => $value)
{
if ($key != 'submit')
{
// soit $key vaut pos_X_id, soit evo_X
$temp = explode('_', $key); // il doit y avoir plus optimisé sans doute

if ($temp[0] == 'pos')
{
$pos = $temp[1];
$lire_id = $value;
// on lit l'évolution correspondante
$evo = $_POST['evo_'.$value]; // vaut classement_haut OU classement_bas ....

// on prépare la requête
$req_maj = "UPDATE
top40
SET
semaine='".$semaine."',
id='".$lire_id."',
evo='".$evo."'
WHERE
pos='".$pos."' ";

echo $req_maj;

mysql_query($req_maj) or die($req_maj. mysql_error());



			
			
            $ok = mysql_query($req_maj) or die($req_maj. mysql_error());
            if ($ok)
                echo '<p><font color="#00FF00">Top 40, position '.$pos.' mise à jour !</font></p>';
            else
                echo '<p><font color="#FF0000"><span style="background-color: #CCFFFF">Impossible de mettre à jour la position '.$pos.' du Top 40...</span></font></p>';

};
};
};
};
};


// préparation du tableau
    $req_top40 = "SELECT
						t.pos,
                        t.id,
                        t.evo,
                        mp3.artiste,
                        mp3.titre
                        FROM
                        top40 t
                        LEFT JOIN
                        mp3
                        ON
                        t.id = mp3.id
                        GROUP BY
                        mp3.id
                        ORDER BY
                        t.pos ASC;";

						echo $req_top40;
						
    $req_top40b = mysql_query($req_top40);
    
$req_semaine = "SELECT semaine from top40 WHERE pos=1";
$req_semaineb = mysql_query($req_semaine);


    // maintenant, on affiche les donnees
    echo '<form method="post" action="top40.php" name="">';
    echo '<table width="950" border="5" bgcolor="#cococo" bordercolorlight="#fda3a5" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0";>';
    echo '<tr>';
    echo '  <td width="50"><center><b><font size="2">Position</font></b></center></td>';
    echo '  <td width="50"><center><b><font size="2">ID</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Artiste</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Titre</font></b></center></td>';
    echo '  <td width="200"><center><b><font size="2">Evolution</font></b></center></td>';
    echo '</tr>';
	
    while ($val = mysql_fetch_array($req_semaineb))
    {
			echo '<H2><font color="#FFFFFF"> Classement du <b> <input type="text" name="semaine" maxlength="20" size="20" value="'.$val['semaine'].'"></<b></font></H2>';
	}
	
    while ($val = mysql_fetch_array($req_top40b))
    {

        echo '<tr>';
        echo '  <td width="50"><center><b><font size="2">'.$val['pos'].'</font></b></center></td>';
        echo '  <td width="50"><center><b><font size="2"><input type="text" name="pos_'.$val['pos'].'_id" maxlength="15" size="5" value="'.$val['id'].'"></font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['artiste'].'</font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['titre'].'</font></b></center></td>';
        echo '  <td width="200"><center>';
		
		
		echo ' <input type="radio" id="evo_plus" name="evo_'.$val['id'].'" value="haut" ';
		if($_POST['evo'] == "haut");
		echo '  "checked" ><label for="evo_plus">+</label>';
 		echo ' <input type="radio" id="evo_moins" name="evo_'.$val['id'].'" value="bas" ';
		if($_POST['evo'] == "bas");
		echo '  "checked" ><label for="evo_moins">-</label>';
 		echo ' <input type="radio" id="evo_egal" name="evo_'.$val['id'].'" value="egal" ';
		if($_POST['evo'] == "egal");
		echo '  "checked" ><label for="evo_plus">=</label>';
 		echo ' <input type="radio" id="evo_entree" name="evo_'.$val['id'].'" value="entree" ';
		if($_POST['evo'] == "entree");
		echo '  "checked" ><label for="evo_entree">E</label>';
	
        echo '</center></td>';
        echo '</tr>';
    };
    echo '<tr>';
    echo '  <td colspan="5"><input type="submit" name="submit" value="Mettre A Jour"></td>';
    echo '</tr>';
    echo '</table>';
    echo '</form>';



Merci pour votre aide à tous Smiley smile
Hello!
Je viens d'essayer différentes idées, glanées ici ou là, mais je ne m'en sors pas...
Si vous avez une solution même différente de celle que j'ai essayé de mettre en place?
Bonne fin de journée Smiley smile
Eh bien si tu testes les données d'une table (ça aurait été plus simple en nous donnant la structure) le test devrait porter sur la valeur de "evo" (ou plutôt le nom du champ dans la table) et donc, comme dit plus haut par vickk sur $val['evo']. Smiley murf
Heyoan a écrit :
Eh bien si tu testes les données d'une table (ça aurait été plus simple en nous donnant la structure) le test devrait porter sur la valeur de "evo" (ou plutôt le nom du champ dans la table) et donc, comme dit plus haut par vickk sur $val['evo']. Smiley murf

voici un imprimecr de ma base:
upload/21751-sql.jpg

Je suis bien d'accord avec toi, j'avais d'ailleurs essayé avant de me tourner vers d'autres choses qu'on m'avait proposées..mais ca ne fonctionne pas...
Il doit y avoir une erreur dans mon code mais ou, je n'arrive pas a le deceler...
Je remets mon code tel qu'il est ce jour:
</center>
</P>
<P>
<center>
<span style="text-decoration: overline"><u><B>Top 40</B></u></span>
</center>


<?php

include("etc.php"); 
mysql_connect($host, $user, $pass); 
mysql_select_db("$bdd") 
or die("Ouverture base impossible"); 

// je mets ça ici pour afficher un tableau à jour après traitement
    if (isset($_POST['submit']))
    {
        for($pos = 1; $pos < 41; $pos++)
        {
            // récuperation de l'ID à cette position
            $id = abs(intval($_POST['pos_'.$pos.'_id']));
		//------------------bouton radio-------------------

	
	
foreach($_POST as $key => $value)
{
if ($key != 'submit')
{
// soit $key vaut pos_X_id, soit evo_X
$temp = explode('_', $key); // il doit y avoir plus optimisé sans doute

if ($temp[0] == 'pos')
{
$pos = $temp[1];
$lire_id = $value;
// on lit l'évolution correspondante
$evo = $_POST['evo_'.$value]; // vaut classement_haut OU classement_bas ....

// on prépare la requête
$req_maj = "UPDATE
top40
SET
semaine='".$semaine."',
id='".$lire_id."',
evo='".$evo."'
WHERE
pos='".$pos."' ";

echo $req_maj;

mysql_query($req_maj) or die($req_maj. mysql_error());



			
			
            $ok = mysql_query($req_maj) or die($req_maj. mysql_error());
            if ($ok)
                echo '<p><font color="#00FF00">Top 40, position '.$pos.' mise à jour !</font></p>';
            else
                echo '<p><font color="#FF0000"><span style="background-color: #CCFFFF">Impossible de mettre à jour la position '.$pos.' du Top 40...</span></font></p>';

};
};
};
};
};


// préparation du tableau
    $req_top40 = "SELECT
						t.pos,
                        t.id,
                        t.evo,
                        mp3.artiste,
                        mp3.titre
                        FROM
                        top40 t
                        LEFT JOIN
                        mp3
                        ON
                        t.id = mp3.id
                        GROUP BY
                        mp3.id
                        ORDER BY
                        t.pos ASC;";

						echo $req_top40;
						
    $req_top40b = mysql_query($req_top40);
    
$req_semaine = "SELECT semaine from top40 WHERE pos=1";
$req_semaineb = mysql_query($req_semaine);


    // maintenant, on affiche les donnees
    echo '<form method="post" action="top40.php" name="">';
    echo '<table width="950" border="5" bgcolor="#cococo" bordercolorlight="#fda3a5" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0";>';
    echo '<tr>';
    echo '  <td width="50"><center><b><font size="2">Position</font></b></center></td>';
    echo '  <td width="50"><center><b><font size="2">ID</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Artiste</font></b></center></td>';
    echo '  <td width="150"><center><b><font size="2">Titre</font></b></center></td>';
    echo '  <td width="200"><center><b><font size="2">Evolution</font></b></center></td>';
    echo '</tr>';
	
    while ($val = mysql_fetch_array($req_semaineb))
    {
			echo '<H2><font color="#FFFFFF"> Classement du <b> <input type="text" name="semaine" maxlength="20" size="20" value="'.$val['semaine'].'"></<b></font></H2>';
	}
	
    while ($val = mysql_fetch_array($req_top40b))
    {

        echo '<tr>';
        echo '  <td width="50"><center><b><font size="2">'.$val['pos'].'</font></b></center></td>';
        echo '  <td width="50"><center><b><font size="2"><input type="text" name="pos_'.$val['pos'].'_id" maxlength="15" size="5" value="'.$val['id'].'"></font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['artiste'].'</font></b></center></td>';
        echo '  <td width="150"><center><b><font size="2">'.$val['titre'].'</font></b></center></td>';
        echo '  <td width="200"><center>';
		
		
		echo ' <input type="radio" id="evo_plus" name="evo_'.$val['id'].'" value="haut" ';
		if($val['evo'] == "haut");
		echo '  "checked" ><label for="evo_plus">+</label>';
 		echo ' <input type="radio" id="evo_moins" name="evo_'.$val['id'].'" value="bas" ';
		if($val['evo'] == "bas");
		echo '  "checked" ><label for="evo_moins">-</label>';
 		echo ' <input type="radio" id="evo_egal" name="evo_'.$val['id'].'" value="egal" ';
		if($val['evo'] == "egal");
		echo '  "checked" ><label for="evo_plus">=</label>';
 		echo ' <input type="radio" id="evo_entree" name="evo_'.$val['id'].'" value="entree" ';
		if($val['evo'] == "entree");
		echo '  "checked" ><label for="evo_entree">E</label>';
	
		
		
         echo '</center></td>';
        echo '</tr>';
    };
    echo '<tr>';
    echo '  <td colspan="5"><input type="submit" name="submit" value="Mettre A Jour"></td>';
    echo '</tr>';
    echo '</table>';
    echo '</form>';
	






    echo '</div>'; 
    
    mysql_close();
?>

désolé de vous embeter Smiley confus