Page 1 sur 2

If et else qui ne marche pas :(

Posté : 19 déc. 2005, 20:56
par tidus
Bonjour ,

j'ai une administration pour mon site , mais j'ai un gros problème , j'aimerais dire à php de regarder dans la bdd si le membre connecté à un rang admin ou membre. Si il a un rang admin on affiche salut admin sinon si c'est un membre on affiche salut membre. Mais mon script marche pas.


Voici le script :

<?
require("conf.php3");
// CONNEXION MYSQL
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}
// SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link) or die(mysql_error());
// SI L'ID N'EXISTE PAS
if(mysql_num_rows($requete)==0)
	{
	// REDIRECTION PAGE ERREUR
	header("Location:$url_erreur");
	exit;
	}
// LIGNE FACULTATIVE : RECUPERATION DU PSEUDO
$pseudo_membre=mysql_result($requete,0,"pseudo");
// CHAMPS SUPLEMENTAIRES
// Si vous avez ajouté des champs dans la table SQL, inspirez-vous de la ligne précédente pour récupérer leur valeur. 
//$email=mysql_result($requete,0,"email");
//$ville=mysql_result($requete,0,"ville");

?>

<html>
<head>
<title> Espace membre</title>
</head>
<!-- Sélectionnons les champs rang de la table "membre", uniquement lorsque le rang =admin-->
<?
$reponse = mysql_query("SELECT rang FROM membre WHERE rang='admin'");

if ( $reponse =='admin')
{
echo "salut admin";
}       
else
{
echo "salut membre";
}
?>
<body bgcolor="#FFFFFF" text="#000000">
<p align="center"><b><font face="Verdana" size="3">Administration de NintendoManga</font></b></p>
<p align="center">&nbsp;</p>
<p align="center"><font size="2" face="Verdana">
Voici une page proteger par login et mot de passe !<br><br>
Votre pseudo : <b><? echo "$pseudo_membre"; ?></b><br><br>
<p>Exemple de lien vers une autre page protégée :</p><br>
<a href="1.php?id=<? echo "$id"; ?>">AUTRE PAGE MEMBRE</a><br>
(ce lien ne fonctionne pas car la page n'existe pas, le code est donné à titre d'exemple).
<br><br>

</font></p>
</body>
</html> 
<?
mysql_close($db_link);
?>
Le script marche mais on lieu de mettre salut membre sa écrit salut membre.

Il doit y'avoir quelque chose qui ne marche pas sur cette ligne :
<?
$reponse = mysql_query("SELECT rang FROM membre WHERE rang='admin'");

if ( $reponse =='admin')
{
echo "salut admin";
}       
else
{
echo "salut membre";
}
?>
Voilà , si vous pouvez m'aider ce serais cool et sur ce je vous remercie d'avance :D .

Posté : 19 déc. 2005, 21:51
par Cyrano
$reponse est une ressource, pas une valeur, il te faut dans ce cas utiliser par exemple
$reponse = mysql_query("SELECT rang FROM membre WHERE rang='admin'");
$ligne = mysql_result($reponse, 0);
if ( $ligne == 'admin')
{
    echo "salut admin";
}       
else
{
    echo "salut membre";
}

Posté : 19 déc. 2005, 23:36
par Truc
la requête est bizarre avec une clause WHERE qui sélectionne à priori que les admins le test suivant va toujours retourner vrai, non ?!

Posté : 20 déc. 2005, 15:19
par Maitrepylos
Je confirme, il ne faut pas de where
$reponse = mysql_query("SELECT rang FROM membre ");
$ligne = mysql_result($reponse, 0);
if ( $ligne == 'admin')
{
    echo "salut admin";
}       
else
{
    echo "salut membre";
}

Posté : 20 déc. 2005, 15:28
par pjl
Je confirme, il ne faut pas de where
S'il ne met pas de where ca va tout lui ramener, c'est encore pire.

Et pour en revenir à son script, ca sert à quoi de faire cette requête :

Code : Tout sélectionner

select * from membre where id="$id""
puis celle-ci (qui en plus ne veut rien dire) :

Code : Tout sélectionner

SELECT rang FROM membre WHERE rang='admin'
Dans la 1ere requête, il y a déjà le rang. Ca ne sert à rien d'aller le chercher une 2eme fois.

Posté : 20 déc. 2005, 15:36
par Maitrepylos
oui, mais si il met un where rang="admin", le if ne sert à rien puisque de toute façon, cela sera un admin.

peut-être que ceci serait plus correcte.


SELECT rang FROM membre WHERE rang=$pseudo_membre

Posté : 20 déc. 2005, 16:17
par pjl
ce n'est pas plus correct. Cette requête ne sert à rien, tout simplement.

Posté : 20 déc. 2005, 16:24
par Maitrepylos
Il recherche l'id, si il n'existe pas il le renvoie sur une autre page, si il existe il le rentre dans la variable $pseudo_membre
$requete=mysql_db_query($sql_bdd,"select * from membre where id=\"$id\"",$db_link) or die(mysql_error());
// SI L'ID N'EXISTE PAS
if(mysql_num_rows($requete)==0)
    {
    // REDIRECTION PAGE ERREUR
    header("Location:$url_erreur");
    exit;
    }
// LIGNE FACULTATIVE : RECUPERATION DU PSEUDO
$pseudo_membre=mysql_result($requete,0,"pseudo"); 
donc si il veut savoir si il est membre ou admin, il doit faire un select sur l'id($pseudo_membre).

je me trompe ou j'ai pas compris?

et effectivement cela devrais donc donner ceci
SELECT rang FROM membre WHERE id=$pseudo_membre

Posté : 20 déc. 2005, 16:56
par Truc
je me trompe ou j'ai pas compris?
et effectivement cela devrais donc donner ceci
Cette requête ne sert à rien, tout simplement.
Pas mieux :wink:

la 1ère requete séléctionne déjà le rang donc pas besoin d'en refaire une 2eme !! Voila le probleme :wink:

il peut donc retirer le rang de cette 1ere requete:
$rang=mysql_result($requete,0,"rang");
Pour finir 1 seule requete avec l'id du membre suffit.

Posté : 20 déc. 2005, 19:46
par Invité
Le problème est résolu :D . Je remercie tout le monde pour avoir contribué à m'aider , et celui qui a raison est "Truc" , j'ai tester tout vos scripts et celui qui marche est celui de ce dernier. Merci beaucoup de m'avoir aidé , sa fait un problème en moin :P .

merci encore :) !

Posté : 20 déc. 2005, 19:51
par tidus
C'est moi qui a posté le message ci-dessus ^^ . Juste je voulais vous dire, j'ai un autre problème que je viens de decouvrir , et celui-ci semble être un casse tête .

J'ai un script de news , si une news est posté le titre apparais dans la page news.php ( mais pas le contenu de la news ) et si on clique sur le titre ( qui est un lien ) sa nous ammène dans une nouvelle page et là il y'a la news au complet :p .


Bref , j'ai un problème , j'ai posté plein de news mais quand je clique sur les differents liens de news sa m'affiche toujour le même contenu de la première news :s et moi je voudrais que les news ont leurs contenu et pas le contenu de la première news

Voici 1.php ( sa recupère les news avec le lien )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       
    </head>
   
    <body>

<h1>Bienvenue sur mon site !</h1>

<p>Voici les dernières news :</p>


<?php
mysql_connect("***", "***", "***");
mysql_select_db("***");

// On récupère les 5 dernières news
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
while ($donnees = mysql_fetch_array($retour))
{
?>

<div class="news">
    <h3>
        <?php echo '<a href="news.php?id=' . $donnees['id'] . '" title="' . $donnees['titre'] . '">' . $donnees['titre'] . '</a>'; ?>
<!-- Déjà, on créer un lien sur le titre pour ammener la personne sur la news. On donne comme lien, la page que l'on va créer et on lui attribut un $_GET. Ici, c'est le $_GET['id'].-->
    </h3>
<!-- on supprime la date et le contenu-->
</div>
<?php
} // Fin de la boucle des news
?>

</body>
</html>
Et voici news.php ( c'est là que sa amène si on clique sur le lien d'une news , c'est pour lire le contenu de la news )
<?
$id = $_GET['id'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
    </head>
   
    <body>
<p>Voici les dernières news :</p>


<?php
mysql_connect("***", "***", "***");
mysql_select_db("***");

$retour = "SELECT * FROM news WHERE id='$id'"; // Requête SQL
$resultat = mysql_query($retour);
$news = mysql_fetch_array($resultat);


?>

<div class="news">
    <h3>
<?php echo $news['titre']; ?>
<em>le <?php echo date('d/m/Y à Hhi', $news['timestamp']); ?></em>
</h3>
<?php
$contenu = nl2br(stripslashes($news['contenu']));
    echo $contenu;
?>
</div>
</body>
</html>
Je pense que j'ai trouver la source du problème , quand on clique dans une news sa va toujours dans le même lien donc celui-ci:

http://**//admin/news.php?id=0

Donc sa va toujours dans l'id 0 , c'est-à-dire la première news , c'est pour ça que toutes les news on le même contenu , je me trompe ?

Posté : 20 déc. 2005, 22:47
par Cyrano
Tu as vérifié ce que te retournait ta requête via phpMyAdmin par exemple ? Est-ce que tous les id sont bien différents ?

Posté : 20 déc. 2005, 23:38
par Truc
et celui qui a raison est "Truc" , j'ai tester tout vos scripts et celui qui marche est celui de ce dernier
je n'ai fait que d'éclaircir le probleme soulevé par pjl :wink:

le champ correspondant a l'id est-il en auto_increment ?

Posté : 21 déc. 2005, 16:39
par Invité
Si j'étais toi je vérifierais deja ce que te donne la lecture du $_GET['id']

@ priori quand tu génères ton lien, tu ajoute le titre dans l'url (je ne sais pas pourquoi d'ailleurs...)

et je pense que le problème vient du fait que tu voulais générer un lien du type :

Code : Tout sélectionner

<a href="news.php?id='id'&title='titre'>titre</a>
Seulement t'as zappé le & dans la géénration de ton lien et ca doit donner un truc foireux non ? T'as vérifié l'url de la page où t'es redirigé ??

Posté : 21 déc. 2005, 19:09
par tidus
J'ai trouver l'erreur , j'avais oublier de mettre en auto-incrémente :oops: . Maintenant ça marche , mais sa affiche seulement le titre de la news et la date , sa naffiche pas le contenu :( .
<?include ("../inc/haut.php"); ?>
<?
$id = $_GET['id'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
    </head>
   
    <body>
<p>Voici les dernières news :</p>


<?php
mysql_connect("***", "***", "***");
mysql_select_db("**");

$retour = "SELECT * FROM news WHERE id='$id'"; // Requête SQL
$resultat = mysql_query($retour);
$news = mysql_fetch_array($resultat);


?>

<div class="news">
    <h3>
<?php echo $news['titre']; ?>
<em>le <?php echo date('d/m/Y à Hhi', $news['timestamp']); ?></em>
</h3>
<?php
$contenu = nl2br(stripslashes($news['contenu']));?>
<?  echo $contenu;
?>
</div>
</body>
</html>
 <?include ("../inc/bas.php"); ?>
Voilà , c'est sa le code qui récupère les valeurs de la BDD , pourtant je ne trouve pas l'erreur :( .