IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Construction forum : conflit lors d'une vérification d'autorisation [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Construction forum : conflit lors d'une vérification d'autorisation
    Bonjour,

    Je suis le tutoriel de Tadzoa (sur SDZ) sur la construction d'un forum.

    Dans le chapitre Autorisation d'accès -> Les annonces, j'ai un souci avec la vérification concernant les boutons radios "Annonce" et "Topic". Lorsque je place cette vérif' mes topics sont enregistrés dans la BDD mais n’apparaissent pas dans le forum car non-catégorisés... (dîtes-moi que vous m'avez comprise là...)

    Sur ma page poster.php, voici le code de la fin du formulaire pour un nouveau topic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <fieldset>
    	<legend>Message</legend>
    		<textarea cols="80" rows="8" id="message" name="message"></textarea><br />
    <?php
    		if (verif_auth($data['auth_annonce'])) {
    ?>
    		<label><input type="radio" name="mess" id="annonce" value="Annonce" />Annonce</label>
    		<label><input type="radio" name="mess" id="message" value="Message" checked="checked" />Topic</label><br />
    <?php
    		}
    ?>
    </fieldset>
     
    <p>
    	<input type="submit" name="submit" value="Envoyer" />
    	<input type="reset" name = "Effacer" value = "Effacer" />
    </p>
    </form>
    et la page postok.php contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    switch($action) {
    	case "nouveautopic":
     
    	if (!verif_auth($data['auth_annonce']) AND isset($_POST['mess'])) {
    		exit('</div></body></html>');
    	}
     
     
    	$message = $_POST['message'];
    	$mess = $_POST['mess'];
    	$titre = $_POST['titre'];
    	$forum = (int) $_GET['f'];
    	$temps = time();
     
    	if (empty($message) OR empty($titre)) {
    		echo'<p>Votre message ou votre titre est vide, cliquez <a href="poster.php?action=nouveautopic&amp;f='.$forum.'">ici</a> pour recommencer</p>';
    	}
    ?>

    Y a t-il quelque chose que je n'ai pas compris ?

    Je précise que cela dysfonctionne uniquement lorsque je poste un nouveau topic en mode Inscrit. Je ne rencontre aucun problème si je poste en tant que Modérateur par exemple.

    Lorsque je retire tout ce qui concerne cette vérification, le forum fonctionne très bien mais le simple inscrit voit les boutons radios dans le formulaire...

    Merci de m'éclairer


    Marie

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Vérifie les autorisations du mode inscrit !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Purée, cela fait deux fois que j'écris ma réponse, deux fois que je la perds sur ce forum : la première pour une fin session visiblement et la seconde car la page semble s'être rechargée...et vidée...
    Bon je m'accroche et recommence.

    J'écrivais donc que je ne trouvais pas mon erreur quant au mode inscrit ; tout me semble logique dans le code (c'est peut-être là le problème ).
    En début de page, je définie l'attribution des variables de session ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $lvl=(isset($_SESSION['level']))?(int) $_SESSION['level']:1;
    $id=(isset($_SESSION['id']))?(int) $_SESSION['id']:0;
    $pseudo=(isset($_SESSION['pseudo']))?$_SESSION['pseudo']:'';
    Dans les pages poster.php et postok.php, je vérifie que l'internaute ne se retrouve pas là par hasard et est connecté, donc "inscrit" (niveau défini à 2).
    (arrfff je copie/colle au fur et à mesure dans un fichier texte hein....)

    La page poster.php se présente de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
     
    <?php
    session_start();
    $titre="Poster";
    $balises = true;
    include("includes/identifiants.php");
    include("includes/debut.php");
    include("includes/menu.php");
    ?>
     
     
     
    <?php
    $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
     
    if ($id==0) erreur(ERR_IS_CO);
     
    //Si on veut poster un nouveau topic, la variable f se trouve dans l'url, On récupère certaines valeurs
    if (isset($_GET['f'])) {
    	$forum = (int) $_GET['f'];
    	$query= $db->prepare('SELECT forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
    	FROM forum_forum WHERE forum_id =:forum');
    	$query->bindValue(':forum',$forum,PDO::PARAM_INT);
    	$query->execute();
    	$data=$query->fetch();
    	echo '<p>Vous êtes ici : <a href="index.php">Index du forum</a> --> <a href="voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> Nouveau topic</p>';
    }
     
    //Sinon c'est un nouveau message, on a la variable t et On récupère f grâce à une requête
    elseif (isset($_GET['t'])) {
    	$topic = (int) $_GET['t'];
    	$query=$db->prepare('SELECT topic_titre, forum_topic.forum_id, forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
    	FROM forum_topic
    	LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
    	WHERE topic_id =:topic');
    	$query->bindValue(':topic',$topic,PDO::PARAM_INT);
    	$query->execute();
    	$data=$query->fetch();
    	$forum = $data['forum_id'];  
     
    	echo '<p>Vous êtes ici : <a href="index.php">Index du forum</a> --> <a href="voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> <a href="voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
        --> Répondre</p>';
    }
     
    //Enfin sinon c'est au sujet de la modération(on verra plus tard en détail), On ne connait que le post, il faut chercher le reste
    elseif (isset ($_GET['p'])) {
    	$post = (int) $_GET['p'];
    	$query=$db->prepare('SELECT post_createur, forum_post.topic_id, topic_titre, forum_topic.forum_id, forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
    	FROM forum_post
    	LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
    	LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
    	WHERE forum_post.post_id =:post');
    	$query->bindValue(':post',$post,PDO::PARAM_INT);
    	$query->execute();
    	$data=$query->fetch();
     
    	$topic = $data['topic_id'];
    	$forum = $data['forum_id'];
     
    	echo '<p>Vous êtes ici : <a href="index.php">Index du forum</a> --> <a href="voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a> --> <a href="voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
        --> Modérer un message</p>';
    }
    $query->CloseCursor();  
    ?>
     
     
     
     
    <?php
    switch($action) {
    	case "repondre":
     
    	if (verif_auth($data['auth_post'])) {
    ?>
    		<h1>Poster une réponse</h1>
     
    		<?php //je vérifie d'abord si le topic est verrouillé
    		$query=$db->prepare('SELECT topic_locked FROM forum_topic WHERE topic_id = :topic');
    		$query->bindValue(':topic',$topic,PDO::PARAM_INT);
    		$query->execute(); 
    		$data=$query->fetch();
     
    		if ($data['topic_locked'] != 0) {
    			erreur(ERR_TOPIC_VERR); 
    		}
    		$query->CloseCursor(); ?>
     
    	<form method="post" action="postok.php?action=repondre&amp;t=<?php echo $topic ?>" name="formulaire">
     
     
    		<fieldset>
    			<legend>Message</legend>
    				<textarea cols="80" rows="8" id="message" name="message"></textarea>
    		</fieldset>
     
    		<p> 
    			<input type="submit" name="submit" value="Envoyer" />
    			<input type="reset" name = "Effacer" value = "Effacer"/>
    		</p>
    	</form>
    <?php
    	}
    	break;
     
     
     
    	case "nouveautopic":
     
    	if (verif_auth($data['auth_topic'])) {
    ?>
    		<h1>Nouveau topic</h1>
    		<form method="post" action="postok.php?action=nouveautopic&amp;f=<?php echo $forum ?>" name="formulaire">
    			<fieldset>
    				<legend>Titre</legend>
    					<input type="text" size="80" id="titre" name="titre" />
    			</fieldset>
     
    			<fieldset>
    				<legend>Message</legend>
    					<textarea cols="80" rows="8" id="message" name="message"></textarea><br />
    <?php
    					if (verif_auth($data['auth_annonce'])) {
    ?>
    					<label><input type="radio" name="mess" id="annonce" value="Annonce" />Annonce</label>
    					<label><input type="radio" name="mess" id="message" value="Message" checked="checked" />Topic</label><br />
    <?php
    					}
    ?>
    			</fieldset>
     
    			<p>
    				<input type="submit" name="submit" value="Envoyer" />
    				<input type="reset" name = "Effacer" value = "Effacer" />
    			</p>
    		</form>
    <?php
    	}
    	break;
     
     
     
     
     
    	case "edit": 
    	//On récupère la valeur de p
    	$post = (int) $_GET['p'];
     
    	echo'<h1>Edition</h1>';
     
    	//On lance enfin notre requête
    	$query=$db->prepare('SELECT post_createur, post_texte, auth_modo FROM forum_post
    	LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
    	WHERE post_id=:post');
    	$query->bindValue(':post',$post,PDO::PARAM_INT);
    	$query->execute();
    	$data=$query->fetch();
     
    	$text_edit = $data['post_texte']; //On récupère le message
     
    	//Ensuite on vérifie que le membre a le droit d'être ici (soit le créateur soit un modo/admin) 
    	if (!verif_auth($data['auth_modo']) AND $data['post_createur'] != $id) {
    		erreur(ERR_AUTH_EDIT);
    	}
    	else { 
    		//Le formulaire de postage
    ?>
    		<form method="post" action="postok.php?action=edit&amp;p=<?php echo $post ?>" name="formulaire">
    			<fieldset>
    				<legend>Message</legend>
    					<textarea cols="80" rows="8" id="message" name="message"><?php echo $text_edit ?></textarea>
    			</fieldset>
     
    			<p>
    				<input type="submit" name="submit" value="Editer !" />
    				<input type="reset" name = "Effacer" value = "Effacer"/>
    			</p>
    		</form>
    <?php
    	} 
    	$query->CloseCursor();
    	break;
     
     
     
     
     
    	case "delete": 
    	//On récupère la valeur de p
    	$post = (int) $_GET['p'];
     
    	//Ensuite on vérifie que le membre a le droit d'être ici
    	echo'<h1>Suppression</h1>';
     
    	$query=$db->prepare('SELECT post_createur, auth_modo
    	FROM forum_post
    	LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
    	WHERE post_id= :post');
    	$query->bindValue(':post',$post,PDO::PARAM_INT);
    	$query->execute();
    	$data = $query->fetch();
     
    	if (!verif_auth($data['auth_modo']) AND $data['post_createur'] != $id) {
    		erreur(ERR_AUTH_DELETE); 
    	}
    	else { 
    		echo'<p>Êtes-vous certains de vouloir supprimer ce post ?</p>';
    		echo'<p><a href="postok.php?action=delete&amp;p='.$post.'">Oui</a> ou <a href="index.php">Non</a></p>';
    	}
     
    	$query->CloseCursor();
    	break;
     
     
     
    	default:
    		echo'<p>Cette action est impossible</p>';
    } //Fin du switch
    ?>
     
    <?php include("includes/bas.php"); ?>
    On voit donc que dans le cas d'un nouveau topic, je vérifie que l'internaute a bien le droit de poster un topic (droit défini au niveau 2->inscrit)
    Dans la fin du formulaire de ce cas, je poste une condition à l'affichage des boutons radios "Annonce" et "Topic" : si c'est un modérateur ou administrateur qui est connecté alors les boutons s'affichent ; auth_annonce étant défini au niveau 3 minimum (3->modo, 4->admin).



    Dans la page de traitement postok.php, je vérifie à nouveau que l'internaute a bien le droit d'être là (niveau 2->inscrit), puis je lance le switch avec le premier cas "nouveau topic".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?php
    //On récupère la valeur de la variable action
    $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
     
    // Si le membre n'est pas connecté, il est arrivé ici par erreur
    if ($id==0) erreur(ERR_IS_CO);
    ?>
     
     
     
    <?php
    switch($action) {
    	case "nouveautopic":
     
    	if (!verif_auth($data['auth_annonce']) AND isset($_POST['mess'])) {
    		exit('</div></body></html>');
    	}
     
     
    	$message = $_POST['message'];
    	$mess = $_POST['mess'];
    	$titre = $_POST['titre'];
     
    	//ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f
    	$forum = (int) $_GET['f'];
    	$temps = time();
     
    	if (empty($message) OR empty($titre)) {
    		echo'<p>Votre message ou votre titre est vide, cliquez <a href="poster.php?action=nouveautopic&amp;f='.$forum.'">ici</a> pour recommencer</p>';
    	}
    	else { //Si jamais le message n'est pas vide, on entre le topic dans la base de donnée en laissant le champ topic_last_post à 0
    		$query=$db->prepare('INSERT INTO forum_topic (forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre)
    		VALUES(:forum, :titre, :id, 1, :temps, :mess)');
    		$query->bindValue(':forum', $forum, PDO::PARAM_INT);
    		$query->bindValue(':titre', $titre, PDO::PARAM_STR);
    		$query->bindValue(':id', $id, PDO::PARAM_INT);
    		$query->bindValue(':temps', $temps, PDO::PARAM_INT);
    		$query->bindValue(':mess', $mess, PDO::PARAM_STR);
    		$query->execute();
     
    		$nouveautopic = $db->lastInsertId(); //Notre fameuse fonction !
    		$query->CloseCursor(); 
     
     
    		//Puis on entre le message
    		$query=$db->prepare('INSERT INTO forum_post (post_createur, post_texte, post_time, topic_id, post_forum_id)
    		VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
    		$query->bindValue(':id', $id, PDO::PARAM_INT);
    		$query->bindValue(':mess', $message, PDO::PARAM_STR);
    		$query->bindValue(':temps', $temps,PDO::PARAM_INT);
    		$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
    		$query->bindValue(':forum', $forum, PDO::PARAM_INT);
    		$query->execute();
     
    		$nouveaupost = $db->lastInsertId(); //Encore notre fameuse fonction !
    		$query->CloseCursor(); 
     
     
    		//Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
    		$query=$db->prepare('UPDATE forum_topic SET topic_last_post = :nouveaupost, topic_first_post = :nouveaupost
    		WHERE topic_id = :nouveautopic');
    		$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
    		$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
    		$query->execute();
    		$query->CloseCursor();
     
     
    		//Enfin on met à jour les tables forum_forum et forum_membres
    		$query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1, forum_last_post_id = :nouveaupost
    		WHERE forum_id = :forum');
    		$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);    
    		$query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
    		$query->execute();
    		$query->CloseCursor();
     
    		$query=$db->prepare('UPDATE forum_membres SET membre_post = membre_post + 1 WHERE membre_id = :id');
    		$query->bindValue(':id', $id, PDO::PARAM_INT);    
    		$query->execute();
    		$query->CloseCursor();
     
     
    		//Et un petit message
    		echo'<p>Votre message a bien été ajouté ! Cliquez <a href="voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir<br />
    			 Cliquez <a href="index.php">ici</a> pour revenir à l\'index du forum</p>';
    	}
    	break;
    ?>

    Cette partie-là semble poser problème aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!verif_auth($data['auth_annonce']) AND isset($_POST['mess'])) {
    		exit('</div></body></html>');
    	}
    J'ai deux erreurs qui apparaissent et m'informent que les variables "auth_annonce" et "mess" ne sont pas définis... Vrai pour "auth_annonce" seulement il me semble. Mais ce n'est pas ce qui expliquerait mon problème initial non ?


    (bon sang, heureusement que j'avais sauvegardé mon message sur un fichier texte, les sessions sont aussi courtes que sur la messagerie orange.fr, c'est l'enfer !).

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Personne ne saurait me répondre ?

    Merci

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    En fait si tu rentre dans la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (!verif_auth($data['auth_annonce']) AND isset($_POST['mess'])) {
    		exit('</div></body></html>');
    	}
    Le exit sort et donc le reste ne fonctionne pas .

    Montre le message d'erreur concernant auth_annonce'

    Il faut savoir pourquoi il n'existe pas, car s'il existe alors tu continues ton scripte

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Voici le message d'erreur lorsque un "simple inscrit" poste un nouveau topic :
    Nom : capt1.png
Affichages : 117
Taille : 12,4 Ko

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    J'ai résolu mon problème . Comme d'habitude je poste le résultat (bien qu'il ne s'agissait qu'un manque de bon sens de ma part...)

    Les deux erreurs précitées ont été résolues de la façon suivante sur la page de traitement postok.php :
    <?php
    $req= $db->query('SELECT auth_annonce FROM forum_forum');
    $data=$req->fetch();
    ?>


    <?php
    switch($action) {
    case "nouveautopic":

    if (!verif_auth($data['auth_annonce']) AND isset($_POST['mess'])) {
    exit('</div></body></html>');
    }


    if (isset($_POST['mess'])) {
    $mess = $_POST['mess'];
    }
    else {
    $mess='Message';
    }
    Merci à toi MaîtrePylos de t'être intéressé à mon problème et de m'avoir aiguillée

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Perso, là où tu fais ta requête me dérange, ce que je voudrais comprendre, c'est où était initialisé à la base la variable $data ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Et bien justement le problème était que j'initialisais la variable $data sur la page poster.php mais pas dans la page de traitement postok.php. Donc j'ai rappelé la variable $data sur la page de traitement.

    Tu aurais procédé autrement ?

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bon tu remarqueras , que tu ne nous donnes pas forcement tous les éléments se trouvant dans tes pages, donc tu coup on a un peu de mal à suivre.

    Pratiquement si tu dois dans différentes pas utiliser ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    verif_auth($data['auth_annonce'])
    Alors oui, j'aurais fait différemment.

    J'aurais mis cette valeur dans une session au départ de poster.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['auth_annonce'] = $data['auth_annonce']
    Comme ça je peux l'utiliser dans toutes mes pages sans devoir refaire la requête.
    Attention à bien mettre au début de cahque page qui va utiliser une session quelconque.

    Ensuite tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    verif_auth($_SESSION['auth_annonce'] )
    Maintenant revenons un peu à ta requête SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req= $db->query('SELECT auth_annonce FROM forum_forum');
    Dans cette requête tu sélectionnes, tout dans forum_forum, donc c'est normal que cela fonctionne, rien dans cette requête ne permet de définir, que ce soit moi par exemple, là il prend tout;, donc je pense que tu as quand même un léger souci.
    Tu devrais faire un pour voir ce qu'il y a dedans.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bon tu remarqueras , que tu ne nous donnes pas forcement tous les éléments se trouvant dans tes pages, donc tu coup on a un peu de mal à suivre.
    Oops... pourtant j'ai l'impression d'avoir communiquer tout ce qui était nécessaire. Ensuite copier/coller la page sur le forum rendrait le topic interminable et inutilement encombré, enfin c'est ce que j'ai pensé...

    Tu devrais faire un
    var_dump($data)
    Voici le résultat qu'il me retourne :
    array (size=2)
    'auth_annonce' => string '3' (length=1)
    0 => string '3' (length=1)
    Et c'est exactement ce que je souhaite qu'il me retourne : le niveau 3. $data['auth_annonce'] n'identifie pas le modo/admin connecté mais son niveau d'autorisation.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Ma requête est maladroite semble t-il. Je vais diriger vers la mise en place d'une session alors mais je n'arrive pas à bien cerné son importance pour juste une page. J'utilise des sessions dans mes sites lorsque je veux garder le fil de connexion d'un internaute sur tout un site mais pas dans ce cas là...

  13. #13
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Moi ce qui me dérange est comment il sait que c'est moi dans ta requête ?
    J'imagine que Marie est admin et MaitrePylos utilisateur.

    Donc Marie niveau 1 et maitrepylos niveau 3

    Comment dans ta requête tu sais que je suis Maitrepylos, donc niveau 3 ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    J'ai donc passé auth-annonce par une session et ai donc retiré ma requête maladroite sur postok.php. Le tout fonctionne en toute logique. Je n'aurais pas pensé passer ça en session.

    Comment dans ta requête tu sais que je suis Maitrepylos, donc niveau 3 ?
    MaîtrePylos est défini comme inscrit donc niveau 2
    Marie est définie comme admin donc niveau 4

    Auth_annonce est accessible à partir du statut modo, donc niveau 3.

    Une table forum_membres listant les membres contient le niveau de chacun. Quand MaîtrePylos se connecte, on sait qu'il a le niveau 2 et qu'il ne peut donc pas poster une annonce car le niveau 3 est requis au minimum.

    Lorsque je serai arrivée à la fin de ce tutoriel, je reviendrai sur l'ensemble du code car il y a aura obligatoirement des points à optimiser... j'aurai l'occasion de revenir chercher conseil plus d'une fois

    Merci MaîtrePylos

  15. #15
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Ok, mais sache que tu auras bientôt des souci avec cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT auth_annonce FROM forum_forum
    , car pour moi elle est incorecte il manque un WHERE sur une clé secondaire

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Ok, mais sache que tu auras bientôt des souci avec cette requete
    Nan mais je l'ai retiré cette requête quand j'ai suivi le conseil de faire une session !

    Malgré mon problème (maintenant résolu) j'ai poursuivi le tutoriel et en suis au chapitre de l'administration.

    Sauf avis contraire de ta part je passe ce sujet en Résolu (?)

    ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD15] Gérer un conflit lors d'une réplication automatique
    Par ykydra dans le forum WinDev
    Réponses: 1
    Dernier message: 07/01/2011, 06h14
  2. Réponses: 0
    Dernier message: 11/03/2008, 15h18
  3. Deloggage lors d'une recherche de type cliquer sur le sous-forum "Tous"
    Par is_null dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 06/08/2007, 13h07
  4. Erreur lors d'une intégration d'un forum à un site
    Par maximenet dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 15h53
  5. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo