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 :
[...]
Titre :
Rubrique : <?
// Pour afficher la liste
print(html_select_rubrique());
?>
Texte d'info (qui s'affichera sur la page affichant la liste des dossiers) :
<? echo $pre_contenu; ?>
Contenu :
<? echo $contenu; ?>
[...]
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 = '';
$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"].'';
if($row["id"]){
$ret .= html_select_rubrique($row["id"],($spacer.' '));
}
$ret .= html_option_dossier($row["id"],($spacer.' -'));
}
if(!$parent){
$ret .= '';
}
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"].'';
}
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.''.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.
# Problème de formulaire?
Posté par Fnourry . Évalué à 1.
Pour vérifier ce que tu récupères, insert ça au début de ton code PHP:
foreach($_POST as $key=>$value) echo "POST:: $key=>$value<BR>";
Sinon, tu as juste au-dessus:
$contenu = addslashes($_POST['pre_contenu']);
$contenu = addslashes($_POST['contenu']);
$contenu es valué 2 fois et ne sert jamais.
# Burk
Posté par Mike_M . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.