Probleme avec un script PHP

WRInaute discret
Bonsoir :)

J'ai un tit soucis avec un script PHP masi je ne trouve pas d'ou vient l erreur :
Voila le script consiste a corriger un edito en ligne donc je n ai peut etre pas ete au plus simple mais en gros si on rentre le titre et la "signature" du dernier edito le script fait un update masi le proleme c est que meme si je rentre le bon titre et la bonne signature il me dit que ca n'existe pas :evil: alors si qq peut m aider ca sera cool :) voila le script :
Code:
<?
$titre_page = "ADMINISTRATION SU SITE ****";
include ('modele/entete.inc.php');
if (isset($_POST['submit']))
{
	function echappement ($data)
		{
			global $bd;
			if (ini_get('magic_quotes_gpc'))
			{
				$data = stripslashes($data);
			}
			return mysql_escape_string($data);
		}
	require_once ('modele/mysql_connect.php');
	
	$message = NULL;
	if (empty($_POST['titre']))
	{
		$T = FALSE;
	 	$message .= '<p>le titre est vide...</p>';
	}
	else
	{
		$T = echappement ($_POST['titre']);
	}

	if (empty($_POST['edito']))
	{
		$E = FALSE;
	 	$message .= '<p>Tu as oulié ton édito ...</p>';
	}
	else
	{
		$E = echappement ($_POST['edito']);
	}

	if (empty($_POST['signature']))
	{
		$S = FALSE;
	 	$message .= '<p>Tu as oublié de signer ton édito ...</p>';
	}
	else
	{
		$S = echappement ($_POST['signature']);
	}

	if ($T && $E && $S)
	{	
		$rq = "SELECT titre FROM edito_tb
			   WHERE (titre= '$T' AND signature='$S')";
		$result = mysql_query($rq);
		if ($nb == 1)
		{
			$ligne = mysql_fetch_array($result, MYSQL_NUM);
			$rq = "UPDATE edito_tb SET edito=('$E') WHERE signature=$ligne[3]";
			$result = mysql_query($rq);
			if (mysql_affected_rows() == 1)
			{
				echo "<p>Ton édito vient d'étre modifié.</p>";
				include ('pied_page.inc.php');
				exit();
			}
			else
			{
				$message .="<p> Ton édito n\'a pas pu étre modifié il y a une erreur système : <p></p>" . mysql_error()."<p></p>";
			}
		}
		else
		{
			$message .="<p>Ta signature et le titre de l'édito ne correspondent pas à ceux dejà enregistrés.</p>";
		}
		mysql_close();
	}
	else
	{
		$message .= '<p> il faut recommencer</p>';
	}
}
if(isset($message))
{
	echo "$message";
}
?>

je me suis pris la tete dessus toute la journee et la je commence a voir flou ca se trouve c est tout petit truc de rien enfin j'espere
d'avance merci

Hicham
 
WRInaute impliqué
if ($nb ==1)

$nb n'est defini nul part donc c un peu normal qu'il passe tout de suite au else...

je suppose que ici on devrait avant avoir un truc du genre :

$nb = mysql_num_rows($result);
 
WRInaute discret
nouveau probleme avec mon script que j'ai pas mal modifié, donc comme j'ai deja expliqué la fonction de ce script est de pouvoir modifier un edito donc je reprends 2 varibales (titre et signature) et je verifie si elles existent si oui alors je update ma base masi le probleme c'est que pour je ne sais quel raison il n update pas et le pire c est que je n'ai pas de message d'erreur precis de mysql alors du coup j'ai du mal a trouver l erreur si quelqu un peux jeter un coup d oeil au script car j ai tellement passer de temps dessus que maintenant je suis incapable de voir s il y a erreur ou pas meme si elle est flagrante :


Code:
<?
$titre_page = "ADMINISTRATION SU SITE ****";
include ('modele/entete.inc.php');
if (isset($_POST['submit']))
{
	function echappement ($data)
		{
			global $bd;
			if (ini_get('magic_quotes_gpc'))
			{
				$data = stripslashes($data);
			}
			return mysql_escape_string($data);
		}
	require_once ('modele/mysql_connect.php');
	
	$message = NULL;
	if (empty($_POST['titre']))
	{
		$T = FALSE;
	 	$message .= '<p>tu as oublié le titre de ton édito ...</p>';
	}
	else
	{
		$T = echappement ($_POST['titre']);
	}

	if (empty($_POST['edito']))
	{
		$E = FALSE;
	 	$message .= '<p>Tu as oulié ton édito ...</p>';
	}
	else
	{
		$E = echappement ($_POST['edito']);
	}

	if (empty($_POST['signature']))
	{
		$S = FALSE;
	 	$message .= '<p>Tu as oublié de signer ton édito ...</p>';
	}
	else
	{
		$S = echappement ($_POST['signature']);
	}

	if ($T && $E && $S)
	{	
		$rq = "SELECT titre FROM edito_tb WHERE (titre= '".$T."' AND signature='".$S."')";
		$result = mysql_query($rq);
		$nb = mysql_num_rows($result);
		if ($nb == 1)
		{
			$ligne = mysql_fetch_array($result, MYSQL_NUM);
			$rq = "UPDATE edito_tb SET edito='$E' WHERE signature='". $S ."'";  
			$result = mysql_query($rq) or die(mysql_error().'<br>'.$rq);  
			if (mysql_affected_rows() == 1)
			{
				echo "<p>Ton édito vient d'étre modifié.</p>";
				include ('pied_page.inc.php');
				exit();
			}
			else
			{
				$message .="<p> Ton édito n'a pas pu étre modifié il y a une erreur système : <p></p>" . mysql_error()."<p></p>";
			}
		}
		else
		{
			$message .="<p>Ta signature et le titre de l'édito ne correspondent pas à ceux dejà enregistrés.</p>";
		}
		mysql_close();
	}
	else
	{
		$message .= '<p> il faut recommencer</p>';
	}
}
if(isset($message))
{
	echo "$message";
	echo "$rq";
}
?>

Merci d'avance
Hicham
 
WRInaute impliqué
C'est pas trs propre ton truc hein :)

Deja, je vois que tu identifies toujours un article par son titre et sa signature, mais pour l'update tu ne prends que la signature, ca veut dire que si ca marche, tous les articles signes de la meme personne vont etre remplaces par le nouveau contenu ; je ne pense pas que ce soit le but souhaite..

je t'encourage vivement a assigner un identifiant unique a tes articles, ca simplifiera un peu je pense :)

Pour le reste j'ai regarde en vitesse, je ne sais pas trop, je dirais qu'il y a peut etre un probleme d'echappement (tu as essaye de faire des updates simples, sans ' ni " dans le contenu et la signature pour voir si ca marche ?

Par ailleurs, si tu retapes un contenu identique pour ton edito, rien ne sera modifie et mysql_affected_rows retournera 0.
 
Discussions similaires
Haut