Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Bonsoir, apres plusieurs jours de recherche il m'est impossible de rendre les champs obligatoires, sur la mod DaEmOn_KiLLeR Prezup.
J'ai tester en long et en large les astuces de ce lien http://fluxbb.fr/archives/viewtopic.php?id=10155 mais rien à faire, la ligne 74 ne donne pas de If ($fid), il n'existe plus car j'ai pris l'édition de adaur http://pastebin.com/EDHETjje
Bref je suis sur du 1.5.9 et je pense etre à deux doigts de trouver le probleme, que je pense venir du javascript. J'ai fouiller dans pas mal de site de javascript et je ne comprends pas pourquoi ça ne marche pas.
Le common.js du forum ne ressemble pas du tout a celui qui est dans le script de présentation, je me demande s'il n'est pas obsolète. Mais comment rendre ce script compatible avec mon common.js 1.5.9??? 
Merci de m'aider!!
Mon common.js
/**
* Copyright (C) 2008-2012 FluxBB
* based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
*/
function select_checkboxes(curFormId, link, new_string)
{
var curForm = document.getElementById(curFormId);
var inputlist = curForm.getElementsByTagName("input");
for (i = 0; i < inputlist.length; i++)
{
if (inputlist[i].getAttribute("type") == 'checkbox' && inputlist[i].disabled == false)
inputlist[i].checked = true;
}
link.setAttribute('onclick', 'return unselect_checkboxes(\'' + curFormId + '\', this, \'' + link.innerHTML + '\')');
link.innerHTML = new_string;
return false;
}
function unselect_checkboxes(curFormId, link, new_string)
{
var curForm = document.getElementById(curFormId);
var inputlist = curForm.getElementsByTagName("input");
for (i = 0; i < inputlist.length; i++)
{
if (inputlist[i].getAttribute("type") == 'checkbox' && inputlist[i].disabled == false)
inputlist[i].checked = false;
}
link.setAttribute('onclick', 'return select_checkboxes(\'' + curFormId + '\', this, \'' + link.innerHTML + '\')');
link.innerHTML = new_string;
return false;
}Le script intégré a la mod
<script type="text/javascript">
function validation()
{
if(document.prez.req_subject.value == "")
{
alert ('Vous n\'avez pas rempli le champ concernant le nom du sujet !');
document.prez.req_subject.focus();
return false;
}
else {return true;}
}
</script>Mon script
<?php
$forum_de_prez = 2;
define('PUN_ROOT', dirname(__FILE__).'/');
require PUN_ROOT.'include/common.php';
$page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), 'Se présenter');
require PUN_ROOT.'header.php';
require PUN_ROOT.'include/parser.php';
if ($pun_user['is_guest'])
message($lang_common['No permission']);
if (isset($_GET['fid'])) :
$fid = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
if ($fid != $forum_de_prez)
message($lang_common['Bad request']);
if ($fid)
$result = $db->query('SELECT f.id, f.forum_name, f.moderators, 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);
// Start with a clean slate
$errors = array();
// Make sure form_user is correct
if (!$pun_user['is_guest'] && $_POST['form_user'] != $pun_user['username'])
message($lang_common['Bad request']);
// Flood protection
if (!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'];
$username = $pun_user['username'];
$email = $pun_user['email'];
$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));
// Clean up message from POST
$infos_persos = "[quote][color=green][b]Informations personnelles[/b][/color][/quote]\n";
$prenom2 = "[b]Mon prénom :[/b] ".$_POST['prenom']."\n";
$age2 = "[b]Mon âge :[/b] ".$_POST['age']." \n";
$pays2 = "[b]Ma région/ville :[/b] ".$_POST['region']."\n";
$message_sup2 = "[b]A propos de moi :[/b] ".$_POST['message_sup']."\n\n";
$autres_infos = "[quote][color=orange][b]Autres Informations[/b][/color][/quote]\n";
$conness2 = "[b]Comment j'ai connu le Forum ? :[/b] ".$_POST['conness']."\n\n";
$message = pun_linebreaks(pun_trim($infos_persos.$prenom2.$age2.$pays2.$message_sup2.$autres_infos.$conness2));
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));
// Validate BBCode syntax
if ($pun_config['p_message_bbcode'] == '1')
$message = preparse_bbcode($message, $errors);
require PUN_ROOT.'include/search_idx.php';
$now = time();
// 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();
// 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).'\', \'0\', '.$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 and first_post_id
$db->query('UPDATE '.$db->prefix.'topics SET last_post_id='.$new_pid.', 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
$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, "Demande postée. Redirection ...");
else : ?>
<script type="text/javascript">
function validation()
{
if(document.prez.req_subject.value == "")
{
alert ('Vous n\'avez pas rempli le champ concernant le nom du sujet !');
document.prez.req_subject.focus();
return false;
}
else {return true;}
}
</script>
<div class="blockform">
<h2><span><center>Formulaire de présentation</center></span></h2>
<div class="box">
<form method="post" action="<?php echo $PHP_SELF."?fid=".$forum_de_prez; ?>" onsubmit="return validation();">
<div class="inform" style="text-align: center;">
Remplissez les champs ci-dessous, validez et votre presentation sera créer automatiquement!<br /><br />
<fieldset>
<legend>Titre du topic*</legend>
<div class="infldset">
<label><input type="text" name="req_subject" value="[Choisis ton titre] <?php echo pun_htmlspecialchars($pun_user['username']); ?>" size="40" maxlength="100" /></label>
</div>
</fieldset>
<fieldset>
<legend>Informations personnelles*</legend>
<div class="infldset">
<label>Votre pseudo :<br /><input readonly="readonly" type="text" name="form_user" value="<?php echo pun_htmlspecialchars($pun_user['username']);?>" size="40" /><br /></label>
<label>Votre prénom :<br /><input type="text" name="prenom" size="40" maxlength="40" /><br /></label>
<label>Votre âge :<br /><input type="text" name="age" size="40" maxlength="40" /><br /></label>
<label>Votre région :<br /><input type="text" name="region" size="40" maxlength="40" /><br /></label>
</div>
</fieldset>
<fieldset>
<legend>Informations complémentaire* </legend>
<div class="infldset">
<label>Faites une présentation convenable :<br /><textarea name="message_sup" rows="5" cols="40"></textarea><br /></label>
</div>
<label>Comment avez vous connu le Forum ?<br /><textarea name="conness" rows="5" cols="40"></textarea><br /></label>
</fieldset>
<fieldset>
<legend>Création du post</legend>
<div class="infldset">
<label><span style="color: #FF0000;font-style: bold;">Attention : Vérifier que vous avez bien rempli tous les champs avant de valider!</span><br /><br /><input type="submit" name="update" value="Valider" /></label>
</div>
</fieldset>
</div>
</form>
</div>
</div>
<?php
endif;
require PUN_ROOT.'footer.php';Dernière modification par Silverstar (12-07-2016 04:30:30)
Hors ligne
Aucune idée, j'utilise curl pour ce genre de manipulation.
:canon: Mangafan : Mettez un chat dans votre processeur ! 
Hors ligne
Ca a l'air pas mal attends je teste tout de suite:P
Pour l'aide du post au dessus, j'avais reussi a faire les champs obligatoire mais impossible de lancer le formulaire
Dernière modification par Silverstar (12-07-2016 18:13:58)
Hors ligne
Super ca marche nickel merci, tu me sauve la peau apres 3 jours de recherches
Hors ligne
Le truc c'est que je n'aime pas la méthode du dessus en plus de la trouver écrite avec le cul un soir de diarrhée et je dis cela sans animosité, je suis presque certain qu'Adaur lui même préférerait se la couper que d'utiliser encore un tel code et je ne parle pas de faille mais de la présentation et des sous-titres (les commentaires) ; Avec curl dernièrement, j'ai juste eu à ajouter un referer personnalisé dans la méthode pour que ça fonctionne toujours après tout vous voulez tous à chaque fois la même chose, créer un post dans un certain format avant de l'envoyer à fluxbb donc pourquoi ne pas utiliser ce que fluxbb sait déjà faire et juste lui envoyer la bonne requête http. Au pire quand ça ne marche plus tu sais que le forum n'est pas en cause puisque tu peux toujours poster des messages mais qu'il faut que tu regardes ce qui a changé pour qu'il accepte un nouveau message.
Tandis qu'avec la structure du forum, utiliser des requêtes en dur et des fonctions sans trop savoir ce qui est modifié au fil des majs et du temps donne ce résultat ; On se retrouve avec un bout de code qu'on ne sait pas faire marcher et où on ne sait pas ce qui ne marche plus.
Cela dit, le code modifié par Adaur marche toujours tel quel et pour ajouter un contrôle en javascript sur les champs c'est vraiment simple, il n'y a aucun javascript à utiliser en plus de celui existant sur fluxbb. Faut commencer à comprendre et adapter, ça ne suffit pas de faire des copier/coller. 
Tiré de post.php :
$required_fields = array('req_email' => $lang_common['Email'], 'req_subject' => $lang_common['Subject'], 'req_message' => $lang_common['Message']);
$focus_element = array('post');Je n'étais déjà pas chaud à l'époque et je suis refroidi aujourd'hui de voir qu'on utilise encore ce code. Moins on a à toucher au core pour faire des ajouts mineurs mieux on se porte pour la maintenance. Si tu modifies le common.js, à la maj tu vas écraser ta modif et ça ne marchera plus ou alors tu vas finir par oublier de faire des majs comme pour les noms de domaine dans l'autre sujet et un jour tu va te retrouver avec une faille béante et tu diras à qui veut l'entendre que c'est pas normal parce que tu étais un 1.5.10 et que ça n'aurait jamais dû arriver. 
Edit: content pour toi que cela fonctionne.
Dernière modification par mangafan (12-07-2016 19:21:57)
:canon: Mangafan : Mettez un chat dans votre processeur ! 
Hors ligne