Bonjour à tous.
Voiloà, je suis en train de refaire mon site afind e me débarrasser de xoops, et j'ai un souci avec un formulaire qui fait appel à une table autre que celle dans laquelle on insert les valeur, dans une liste déroulante.
Voici le code du formulaire :
[...]
<form action="liste_dossier.php" method="post">
<p>Titre :<input type="text" size="30" name="titre" value="<? echo $titre; ?>"></p>
<p>Rubrique : <?
// Pour afficher la liste
print(html_select_rubrique());
?></p>
<p>Texte d'info (qui s'affichera sur la page affichant la liste des dossiers) :<br>
<textarea name="pre_contenu" cols="100" rows="10"><? echo $pre_contenu; ?></textarea></p>
<p>Contenu :<br>
<textarea name="contenu" cols="100" rows="15"><? echo $contenu; ?></textarea></p>
<p>
<input type="hidden" name="id_dossier" value="<? echo $id_dossier; ?>">
<input type="submit" value="Envoyer">
</p>
</form>
[...]
Voici le code de la foction a laquelle fait appel le formulaire :
function html_select_rubrique($parent = false, $spacer=false){
if($parent){
$ret = '';
$sql = "SELECT * FROM `rub_dossiers` WHERE id_parent='".$parent."' ORDER BY titre";
}else{
$ret = '<select name="rub_select">';
$sql = "SELECT * FROM `rub_dossiers` WHERE id_parent='0' OR id_parent='' ORDER BY titre";
}
$res = mysql_query($sql);
if(mysql_num_rows($res) == 0){
return;
}
while($row = mysql_fetch_array($res)){
$ret .= '<option value="'.$row["id"].'">'.$spacer.$row["titre"].'</option>';
if($row["id"]){
$ret .= html_select_rubrique($row["id"],($spacer.' '));
}
$ret .= html_option_dossier($row["id"],($spacer.' -'));
}
if(!$parent){
$ret .= '</select>';
}
return $ret;
}
function html_option_dossier($rid, $spacer){
$ret = '';
$sql = "SELECT * FROM `dossiers` WHERE rid='".$rid."'";
$res = mysql_query($sql);
if(mysql_num_rows($res) == 0){
return;
}
while($row = mysql_fetch_array($res)){
$ret .= '<option value="d'.$row["id"].'">'.$spacer.$row["titre"].'</option>';
}
return $ret;
}
Et enfin le fichier qui insert les données dans les tables : (un partie)
<?
// Vérification : peut-on poster une news ?
if (isset($_POST['titre']) AND isset($_POST['pre_contenu']) AND isset($_POST['contenu']))
if (empty($_POST['titre']) OR empty($_POST['contenu']))
{
echo ('Attention ! Seuls les champs suite et liens peuvent être vides !');
}
else
{
$titre = addslashes($_POST['titre']);
$contenu = addslashes($_POST['pre_contenu']);
$contenu = addslashes($_POST['contenu']);
// vérification modif ou pas
if ($_POST['id_dossier'] == '')
{
// pas de modif donc nouvelle entrée
$sql = "INSERT INTO dossiers (titre, time, rid, pre_contenu, contenu) VALUES('".$_POST['titre']."', '".time()."', '".$_POST['id']."', '".$_POST['pre_contenu']."', '".$_POST['contenu']."')";
if( !mysql_query($sql) ) {
die('Erreur SQL !'.$sql.'<br>'.mysql_error());
} else {
echo 'Votre dossier a été ajoutée.';
}
}
elseif(is_numeric($_POST["id_dossier"]))
{
//modif donc maj
mysql_query("UPDATE dossiers SET titre='".$_POST['titre']."', rid='".$_POST['rid']."', pre_contenu='".$_POST['pre_contenu']."', contenu='".$_POST['contenu']."' WHERE id=".$_POST['id_dossier']);
}
}
[...]
En fait ce qu'il se passe lorsque j'ajoute un dossier, c'est qu'il met la valeur 0 dans le champ rid.
le champ rid, c'est le champ qui permet de dire à quelle rubrique appartient ce dossier.
De plus, les rubriques sont rangées par groupe. En gros il y a des sous-rubriques. D'où la fonction.
Quelqu'un pourrait-il m'aider svp ?
Merci d'avance.
Poste le Sunday 7 August 2005 16:44:17