Aller au contenu

Sujets conseillés

Posté

Bonjour à tous,

Voilà j'ai codé un script de news utilisant un système de bbcode. Le souci est que lorsque je modifie une news, la modification est enregistrée comme une nouvelle news et donc sous un nouvel id. J'ai beau chercher, je ne trouve pas d'où cela vient.

J'imagine qu'il y a un souci à ce niveau : $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification

Il doit y avoir une perte de l'id...

Voici liste_news.php :

CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns=&quot;http://www.w3.org/1999/xhtml">

<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:2px solid black;

margin:auto;

}

th, td

{

border:1px solid black;

}

</style>

</head>

<body>

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

<?php

require ("connect.php");

//-----------------------------------------------------

// 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']);

// On vérifie si c'est une modification de news ou pas

if ($_POST['id_news'] == 0)

{

//-------------------------------

// Fonction qui traite le BBcode

//-------------------------------

function bbcode_format ($contenu) {

$simple_search = array(

'/\[g\](.*?)\[\/g\]/is',

'/\[i\](.*?)\[\/i\]/is',

'/\[s\](.*?)\[\/s\]/is',

'/\[u rl=http://(.*?)\](.*?)\[\/url\]/is',

'/\[image](.*?)\[\/image_description=(.*?)\]/is',

'/\[image_gauche](.*?)\[\/image_gauche]/is',

'/\[image_droite](.*?)\[\/image_droite]/is',

);

$simple_replace = array(

'<strong>$1</strong>',

'<em>$1</em>',

'<u>$1</u>',

'<a href="$1">$2</a>',

'<img src="$1" alt="$2" class="cadre_image" />',

'<span class="float_left">$1</span>',

'<span class="float_right">$1</span>',

);

$contenu = preg_replace ($simple_search, $simple_replace, $contenu);

return $contenu;

}

// Ce n'est pas une modification, on crée une nouvelle entrée dans la table

mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . bbcode_format($contenu) . "', '" . time() . "')") or die(mysql_error());

}

else

{

// On protège la variable "id_news" pour éviter une faille SQL

$_POST['id_news'] = addslashes($_POST['id_news']);

// 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'] . "'") or die(mysql_error());

}

}

//--------------------------------------------------------

// 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 correspondant

// On protège la variable "id_news" pour éviter une faille SQL

$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);

mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'') or die(mysql_error());

}

?>

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

{

?>

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

Et voici rediger_news.php :

CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns=&quot;http://www.w3.org/1999/xhtml">

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

<script type="text/javascript">

<!--

function insertion(repdeb, repfin) {

var input = document.forms['formulaire'].elements['contenu'];

input.focus();

/* pour l'Explorer Internet */

if(typeof document.selection != 'undefined') {

/* Insertion du code de formatage */

var range = document.selection.createRange();

var insText = range.text;

range.text = repdeb + insText + repfin;

/* Ajustement de la position du curseur */

range = document.selection.createRange();

if (insText.length == 0) {

range.move('character', -repfin.length);

} else {

range.moveStart('character', repdeb.length + insText.length + repfin.length);

}

range.select();

}

/* pour navigateurs plus récents basés sur Gecko*/

else if(typeof input.selectionStart != 'undefined')

{

/* Insertion du code de formatage */

var start = input.selectionStart;

var end = input.selectionEnd;

var insText = input.value.substring(start, end);

input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);

/* Ajustement de la position du curseur */

var pos;

if (insText.length == 0) {

pos = start + repdeb.length;

} else {

pos = start + repdeb.length + insText.length + repfin.length;

}

input.selectionStart = pos;

input.selectionEnd = pos;

}

/* pour les autres navigateurs */

else

{

/* requête de la position d'insertion */

var pos;

var re = new RegExp('^[0-9]{0,3}$');

while(!re.test(pos)) {

pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");

}

if(pos > input.value.length) {

pos = input.value.length;

}

/* Insertion du code de formatage */

var insText = prompt("Veuillez entrer le texte à formater:");

input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);

}

}

//-->

</script>

</head>

<body>

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

<?php

require ("connect.php");

if (isset($_GET['modifier_news'])) // Si on demande de modifier une news

{

// On protège la variable "modifier_news" pour éviter une faille SQL

$_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));

// On récupère les infos de la news correspondant

$retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['modifier_news'] . '\'') or die(mysql_error());

$donnees = mysql_fetch_array($retour);

//-------------------------------

// Fonction qui traite le BBcode

//-------------------------------

$contenu = $donnees['contenu'];

function bbcode_format ($contenu) {

$simple_search = array(

'/\<strong\>(.*?)\<\/strong\>/is',

'/\<em\>(.*?)\<\/em\>/is',

'/\<u\>(.*?)\<\/u\>/is',

'/\<a href="(.*?)"\>(.*?)\<\/a\>/is',

'/\<img src="(.*?)" alt="(.*?)" class="cadre_image" \/>/is',

'/\<span class="float_left"\>(.*?)\<\/span\>/is',

'/\<span class="float_right"\>(.*?)\<\/span\>/is',

);

$simple_replace = array(

'[g]$1[/g]',

'$1',

'$1',

'$2',

'[image]$1[/image_description=$2]',

'[image_gauche]$1[/image_gauche]',

'[image_droite]$1[/image_droite]',

);

$contenu = preg_replace ($simple_search, $simple_replace, $contenu);

return $contenu;

}

// On place le titre et le contenu dans des variables simples

$titre = stripslashes($donnees['titre']);

$contenu = bbcode_format($contenu);

$contenu = stripslashes($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 action="liste_news.php" method="post" name="formulaire">

<p align="center"><h4>Titre :</h4>

<input type="text" size="30" name="titre" value="<?php echo $titre; ?>"/><br /><br />

<h4>Contenu : </h4><input type="button" value="Gras" onClick="insertion('[g]', '[/g]')"/> 

<input type="button" value="Italique" onClick="insertion('', '')"/> 

<input type="button" value="Souligné" onClick="insertion('', '')"/> 

<input type="button" value="Lien" onClick="insertion('', '')"/> 

<input type="button" value="Image" onClick="insertion('[image]', '[/image_description=]')"/> 

<input type="button" value="Image alignée à gauche du texte" onClick="insertion('[image_gauche]', '[/image_gauche]')"/> 

<input type="button" value="Image alignée à droite du texte" onClick="insertion('[image_droite]', '[/image_droite]')"/><br /><br />

<textarea type="text" cols="80" rows="20" name="contenu"><?php echo $contenu; ?></textarea></td>

<br /><br />

<input type="submit" value="Envoyer" /></p>

</form>

</body>

</html>

Merci d'avance ;)

Posté

C'est le bronx ton truc m'enfin, rajoute ca dans le formulaire :

<input type="hidden" name="id_news" value="<?php echo $id_news; ?>"/>

@+

Posté (modifié)

Merci pour ton aide ;)

Le Bronx !!! A ce point là ?! Aurais-tu des conseils à me donner pour optimiser ce code, et le sécuriser ?

Merci :D

Modifié par cookie01

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...