FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 10-05-2012 15:05:06

Xtrem-AW
Membre
Inscription : 19-08-2009
Messages : 339

[Résolu] Formulaire de Poste avec choix du forum par menu déroulant

Bonjour tout le monde,

Je vient ici demander de l'aide pour créer un formulaire qui a l'aide d'un menu déroulant je me suis pour cela inspiré du module de Présentation des membres mais pour le moment je bloque totalement
pour le moment je tombe sur l'erreur : "le lien que vous avez suivi est incorrect ou périmé" des que j’envoi le formulaire hmm

voila mon code actuel :

<?php

define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
$page_title = array(pun_htmlspecialchars($pun_config['o_board_title']) . ' / Proposer une Actu');
require PUN_ROOT.'header.php';
require PUN_ROOT.'include/parser.php';

$forum_news = pun_trim($_POST['cat']);

if ($pun_user['is_guest']) message($lang_common['Bad request']);
else {
	
if (isset($_GET['fid'])) {
$fid = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
if ($fid != $forum_news) message($lang_common['Bad request']);
if ($fid) $result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
if (!$db->num_rows($result)) message($lang_common['Bad request']);
$cur_posting = $db->fetch_assoc($result);
// Is someone trying to post into a redirect forum?
if ($cur_posting['redirect_url'] != '') message($lang_common['Bad request']);
// Start with a clean slate
$errors = array();
// Make sure form_user is correct
if (($pun_user['is_guest']) || (!$pun_user['is_guest'] != $pun_user['username'])) message($lang_common['Bad request']);
// Flood protection
if (!$pun_user['is_guest'] && !isset($_POST['preview']) && $pun_user['last_post'] != '' && (time() - $pun_user['last_post']) < $pun_user['g_post_flood']) $errors[] = $lang_post['Flood start'].' '.$pun_user['g_post_flood'].' '.$lang_post['flood end'];
// If it's a new topic
if ($fid)
{
	$subject = pun_trim($_POST['req_subject']);
	if ($subject == '') $errors[] = $lang_post['No subject'];
	else if (pun_strlen($subject) > 70) $errors[] = $lang_post['Too long subject'];
	else if ($pun_config['p_subject_all_caps'] == '0' && strtoupper($subject) == $subject && $pun_user['g_id'] > PUN_MOD) $subject = ucwords(strtolower($subject));	
}
// If the user is logged in we get the username and e-mail from $pun_user
if (!$pun_user['is_guest'])
{
	$username = $pun_user['username'];
	$email = $pun_user['email'];
}
// Clean up message from POST
extract($_POST);
$intro2 = "[i]".$intro."[/i] \n\n";
$req_message2 = $req_message."\n\n";
$message = pun_linebreaks(pun_trim($intro2.$req_message2));

if (strlen($message) > 65535) $errors[] = $lang_post['Too long message'];
else if ($pun_config['p_message_all_caps'] == '0' && strtoupper($message) == $message && $pun_user['g_id'] > PUN_MOD) $message = ucwords(strtolower($message));
require PUN_ROOT.'include/search_idx.php';
$now = time();
// It's a new topic
if ($fid)
{
	// Create the topic
	$db->query('INSERT INTO '.$db->prefix.'topics (poster, subject, posted, last_post, last_poster, forum_id) VALUES(\''.$db->escape($username).'\', \''.$db->escape($subject).'\', '.$now.', '.$now.', \''.$db->escape($username).'\', '.$fid.')') or error('Impossible de créer la discussion', __FILE__, __LINE__, $db->error());
	$new_tid = $db->insert_id();

	if (!$pun_user['is_guest'])
	{
		// Create the post ("topic post")
		$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$new_tid.')') or error('Impossible de créer le message', __FILE__, __LINE__, $db->error());
	}

	$new_pid = $db->insert_id();

	// Update the topic with last_post_id
	$db->query('UPDATE '.$db->prefix.'topics SET last_post_id='.$new_pid.' WHERE id='.$new_tid) or error('Impossible de modifier la discussion', __FILE__, __LINE__, $db->error());

// Update the topic with first_post_id
    $db->query('UPDATE '.$db->prefix.'topics SET first_post_id='.$new_pid.' WHERE id='.$new_tid) or error('Impossible de modifier la discussion', __FILE__, __LINE__, $db->error());

	update_search_index('post', $new_pid, $message, $subject);

	update_forum($fid);
}

// Increment his/her post count
if (!$pun_user['is_guest'])
{
	$low_prio = ($db_type == 'mysql') ? 'LOW_PRIORITY ' : '';
	$db->query('UPDATE '.$low_prio.$db->prefix.'users SET num_posts=num_posts+1, last_post='.$now.' WHERE id='.$pun_user['id']) or error('Impossible de modifier l\'utilisateur', __FILE__, __LINE__, $db->error());
}

redirect('viewtopic.php?pid='.$new_pid.'#p'.$new_pid, "Actualité Publiée avec Succès. Redirection ...");
} // Fin d'envois des infos dans la bdd

else { ?>
<script language="javascript" type="text/javascript"> 
function validation()
{
	if(document.actu.req_subject.value == "")
	{
		alert ('Vous n\'avez pas remplis le champ concernant le nom du sujet !');
		document.actu.req_subject.focus();
		return false; 
	}
	else {return true;}
}
</script>

<div class="blockform">
	<div class="box" align="center">
		<form name="actu" method="post" action="<?php echo $PHP_SELF."?fid=".$forum_news; ?>" onsubmit="return validation();">
			<div class="inform">
					<img src="img/formulaires/news/news.png">
				<fieldset>
					<div class="infldset">
						<label>Titre du topic :<br/><input type="text" name="req_subject" value="" size="50" maxlength="100" /></label>
						<i>Merci de saisir un titre de sujet qui d&eacute;crit le mieux la News !</i><br><br>
						<label>Catégorie : 
						<select name="cat" id="cat">
							  <option value="56" selected="selected">Ordinateur</option>
							  <option value="57">Smartphone</option>
							  <option value="58">Jeux Vidéos</option>
							  <option value="67">Web</option>
							  <option value="61">Divers</option>
					  </select><br /></label>
					</div>
				</fieldset>
				<fieldset>
					<div class="infldset">
					  <label>Introduction :<br />
						<textarea name="intro" rows="7" cols="100"></textarea><br /><i>L'Introduction ne doit être composé que d'un seul et unique paragraphe.</i><br/><i>Merci de bien vouloir n'utiliser que les balises </i><b>[b][/b]</b><i> et </i><b>[u][/u]</b><i> pour souligner les mots importants.</i></label>
                      </div>
				</fieldset>
				<fieldset>
					<div class="infldset">
					  <label>News :<br />
						<textarea name="req_message" id="req_message" rows="17" cols="100"></textarea><br /></label>
<?php /* FluxToolBar */
if (file_exists(FORUM_CACHE_DIR.'cache_fluxtoolbar_form.php'))
	include FORUM_CACHE_DIR.'cache_fluxtoolbar_form.php';
else
{
	require_once PUN_ROOT.'include/cache_fluxtoolbar.php';
	generate_ftb_cache('form');
	require FORUM_CACHE_DIR.'cache_fluxtoolbar_form.php';
}
?>
					</div>
				</fieldset>
					<label><span style="color: #FF0000;"><b>Attention : le module va g&eacute;n&eacute;rer automatiquement le Message d&egrave;s que vous cliquerez sur "Publier l'Actualité" !</b></span>
<br /><br />
<input type="submit" name="update" value="Publier l'Actualité !" /><br/><br/></label>
			</div>
		</form>
	</div>
</div>
<?php 
?>


<?php
}
}	//close if statement
 
require PUN_ROOT.'footer.php';

si quelqu'un sais comment résoudre mon problème, je suis preneur happy

Dernière modification par Xtrem-AW (10-05-2012 15:19:39)

Hors ligne

#2 10-05-2012 15:18:02

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

Tu as un problème avec ta variable $forum_news : quand tu veux l'utiliser dans ton formulaire, elle n'existe pas et l'adresse de destination du "form" est en "fid=".

De plus, si on suit ta logique, tu testes si la catégorie choisie est égale au forum_news, hors tu proposes plusieurs choix de catégorie : comment le test peut-il être valide pour tous les éléments de la liste déroulante ?


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#3 10-05-2012 15:25:15

Xtrem-AW
Membre
Inscription : 19-08-2009
Messages : 339

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

donc je doit enlever se test mais le problème c'est que je peut pas dire de poster dans tel catégorie parce que mon formulaire connais pas a l'avance la catégorie que va choisir l'utilisateur...

il y a un moyen pour régler se soucis, ou c'est impossible ?

Hors ligne

#4 10-05-2012 15:36:28

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

Il te suffit de définir ton fid en fonction de ce qui est choisit dans la liste déroulante, donc en gros :
- tu vires le "?fid=..." dans le form
- tu remplaces le "$_GET[fid] par ce que contient $_POST['cat'], avec les précautions habituelles (intval, vérifier que la valeur est l'une de celles autorisées dans le formulaire, ...)


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#5 10-05-2012 17:30:44

Xtrem-AW
Membre
Inscription : 19-08-2009
Messages : 339

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

j'ai pas tout compris la hmm

Hors ligne

#6 10-05-2012 17:56:15

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

Quelle partie ?

- tu vires le "?fid=..." dans le form
==> Il faut modifier la ligne suivante pour enlever le paramètre

<form name="actu" method="post" action="<?php echo $PHP_SELF."?fid=".$forum_news; ?>" onsubmit="return validation();">

devient

<form name="actu" method="post" action="<?php echo $PHP_SELF; ?>" onsubmit="return validation();">

tu remplaces le "$_GET[fid] par ce que contient $_POST['cat'], avec les précautions habituelles (intval, vérifier que la valeur est l'une de celles autorisées dans le formulaire, ...)
==> Il faut modifier une partie du haut :

$forum_news = pun_trim($_POST['cat']);

if ($pun_user['is_guest']) message($lang_common['Bad request']);
else {
	
if (isset($_GET['fid'])) {
$fid = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
if ($fid != $forum_news) message($lang_common['Bad request']);

devient

if ($pun_user['is_guest'])
    message($lang_common['Bad request']);
else
{
    if (isset($_POST['cat']))
    {
        $fid = intval($_POST['cat']);
        if (!in_array($fid, array(56, 57, 58, 67,61)))
            message($lang_common['Bad request']);

(pas testé, mais c'est dans l'esprit ce qu'il faut faire)


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#7 10-05-2012 18:27:30

Xtrem-AW
Membre
Inscription : 19-08-2009
Messages : 339

Re : [Résolu] Formulaire de Poste avec choix du forum par menu déroulant

Je vient de tester tout fonctionne a merveille, merci de faire mon boulot :$

et désolé de mon incompétence hmm

Hors ligne

Pied de page des forums