If et else qui ne marche pas :(

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : If et else qui ne marche pas :(

par Truc » 23 déc. 2005, 20:08

Il y a un probleme pour le textarea...
<textarea name="contenu" id="newst"rows="5" cols="50"></textarea>
    <?php echo $contenu; ?>
</textarea>
tu le fermes 2 fois dont une fois avant d'y mettre du contenu.

autre chose, sur ces 2 lignes (dont une ne sert a rien, la 1ere :wink: ):
$contenu = addslashes($_POST['contenu']);
$contenu =avant_postage(addslashes($_POST['contenu'])); 
que fait avant_postage() ?

par Cyrano » 22 déc. 2005, 20:10

As-tu testé ta requête dans phpMyAdmin : est-ce que le retour est correct ?

Si oui, alors tu as un problème lors de la récupération et tu ne dois pas pointer sur le bon index quelque part.

Enfin deux chose: utilises donc le bouton [php] au lieu de [code], ça nous donnera une coloration syntaxique plus facile à suivre qu'un vert uniforme. Ensuite, évite donc le SELECT * et au lieu de * mets les noms des champs à récupérer, ce sera plus facile à débugguer par la suite, surtout pour nous parce que tu as peut-être bien justement une erreur à ce niveau-là.

par tidus » 22 déc. 2005, 19:41

Excusez-moi pour le double poste , mais j'ai compris pourquoi le contenu des news ne s'affiche pas. En faîte, dans la BDD tout s'écrit correctement , seulement , le CHAMP "CONTENU" est tourjours vide , donc rien ne s'enregistre. C'est pour ça qu'il y'a pas de contenu. Maintenant il faut trouver la bonne erreur dans mes scripts ^^.

Voici rediger_news.php ( c'est là oû on poste les news )
<?php $bbcode = "TRUE"; include ("../inc/haut.php"); ?>
   <head>
       <title>Rédiger une news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h3, form
        {
            text-align:center;


        }
        </style>
    </head>
   
    <body>

<h3><a href="liste_news.php">Retour à la liste des news</a></h3>

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


if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
{
    // On récupère les infos de la correspondante
    $retour = mysql_query('SELECT * FROM news WHERE id=' . $_GET['modifier_news']);
    $donnees = mysql_fetch_array($retour);
   
    // On place le titre et le contenu dans des variables simples
    $titre = $donnees['titre'];
    $contenu = $donnees['contenu'];
    $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on rédige une nouvelle news
{
    // Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
    $titre = '';
    $contenu = '';
    $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>

<form id="news" method="post" action="liste_news.php">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>

											<input type="button" value="gras" style="font-weight:bold" onclick="storeCaret('gras')" />
											<input type="button" value="italic" style="font-style:italic" onclick="storeCaret('italic')" />
											<input type="button" value="souligner" style="text-decoration:underline" onclick="storeCaret('souligner')" />
											<input type="button" value="centrer" onclick="storeCaret('centrer')" />
											<input type="button" value="url" style="width:30px;" onclick="storeCaret('url')" />
											<input type="button" value="image" onclick="storeCaret('image')" /><br />
											<select name="couleur" onchange="bbcode_couleur()">
											<option value="">Choisir une couleur</option>
											<option style="color: red;" value="rouge">Rouge</option>
											<option style="color: blue;" value="bleu">Bleu</option>
											<option style="color: green;" value="vert">Vert</option>
											<option style="color: black;" value="noir">Noir</option>
											<option style="color: olive;" value="olive">Olive</option>
											<option style="color: maroon;" value="marron">Marron</option>
											</select >
											<select name="taille" onchange="bbcode_taille()">
											<option value="">Taille du texte</option>
											<?php
											$taille = 8;
											while ($taille != 38)
											
											{
											 echo '<option value="' . $taille . '">' . $taille . '</option>';
											 $taille++;
											 $taille++;
											}
											?>
											</select ><br />
											<form id="news">
										<p>
										
    Contenu :<br />
    <textarea name="contenu" id="newst"rows="5" cols="50"></textarea>
    <?php echo $contenu; ?>
    </textarea><br />
   
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
    <input type="submit" value="Envoyer" />
</p>
</form>


</body>
</html>
<? include ("../inc/bas.php"); ?>
Et voici , liste news.php ( c'est la page qui traite les news postée etc...)
<?php $bbcode = "TRUE"; include ("../inc/haut.php"); ?>
   <head>
       <title>Liste des news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h2, th, td
        {
            text-align:center;
        }
        table
        {
            border-collapse:collapse;
            border:0.5px solid black;
            margin:auto;
        }
        th, td
        {
            border:.0.5px solid black;
        }
        </style>
    </head>
   
    <body>


<h2><a href="rediger_news.php">Ajouter une news</a></h2>

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


//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------

if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
    $titre = addslashes($_POST['titre']);
    $contenu = addslashes($_POST['contenu']);
	$contenu =avant_postage(addslashes($_POST['contenu']));
    // On vérifie si c'est une modification de news ou pas
    if ($_POST['id_news'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
    }
    else
    {
        // C'est une modification, on met juste à jour le titre et le contenu
        mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id=" . $_POST['id_news']);
    }
}


//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//--------------------------------------------------------

if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
    // Alors on supprime la news correspondante
    mysql_query('DELETE FROM news WHERE id=' . $_GET['supprimer_news']);
}
?>

<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>

<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>

<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>

<?php
} // Fin de la boucle qui liste les news
?>
</table>

</body>
</html>
<? include ("../inc/bas.php"); ?>
Voilà , pourtant j'ai essayer de trouver l'erreur de l'enregistrement pour le cotenu news dans la BDD , mais sans succès :( .

par tidus » 22 déc. 2005, 13:05

Le code marche pas , et oui j'ai bien un contenu news dans la BDD. Serait-t'il possible que quelqun qui est prêt à m'aider me donne son adresse msn com me celà je lui donne tout les fichiers qui ont rapport avec mes news.

par Truc » 22 déc. 2005, 01:01

je ne vois pas d'erreur majeure mais tu peut modifier la requete pour séléctionner les champs dont tu as besoin et enlever les quotes autour de l'id puisque c'est un champ numérique.
$retour = "SELECT titre,timestamp,contenu FROM news WHERE id=".$id;
as tu bien un contenu dans la base ? :roll:

par tidus » 21 déc. 2005, 19:09

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 :( .

par Invité » 21 déc. 2005, 16:39

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é ??

par Truc » 20 déc. 2005, 23:38

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 ?

par Cyrano » 20 déc. 2005, 22:47

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 ?

par tidus » 20 déc. 2005, 19:51

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 ?

par Invité » 20 déc. 2005, 19:46

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 :) !

par Truc » 20 déc. 2005, 16:56

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.

par Maitrepylos » 20 déc. 2005, 16:24

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

par pjl » 20 déc. 2005, 16:17

ce n'est pas plus correct. Cette requête ne sert à rien, tout simplement.

par Maitrepylos » 20 déc. 2005, 15:36

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