8791 sujets

Développement web côté serveur, CMS

Bonjour,

j'ai construit une sorte de livre d'or et j'aimerai que l'on puisse supprimer les messages.

ceci est la page où sont insérés les messages


$base = mysql_connect ("minibase.flash.sql.free.fr", "minibase.flash", "mdp");
mysql_select_db ('minibase_flash', $base);

$sql = "SELECT Id, Message FROM base_ytzmi ORDER BY Id DESC";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$nb_signature = mysql_num_rows($req);

if ($nb_signature == 0) {
	echo 'Aucune idée pour l\'instant.';
}
else {
	while ($data = mysql_fetch_array($req)) {
			
		echo nl2br(htmlentities(trim($data['Id'])));
		echo '<br />';
		echo nl2br(htmlentities(trim($data['Message'])));
		echo '<br /><form method="post" action="delete_idee_ytzmi.php">';
		echo '<br /><div align="center"><img border="0" src="image/balai.gif" ><input type="submit" value="Supprimer de la liste" name="delete"></div>';
		echo '<br /><br /><hr width="80%" color="#CC6600"/><hr width="60%" color="#3333CC" />';
		echo '<br /><br />';																						
	}
}
// on libère l'espace mémoire alloué pour cette requête

mysql_free_result ($req);
// on ferme la connection à la base de données.
mysql_close ();



Ici est le php pour l'insertion du message



if (isset($_POST['go']) && $_POST['go']=='Ajouter à la liste') {

	if ((isset($_POST['Message']))) {
		// si la  variable n'est pas vide, on fera notre insertion dans la base
		if ((!empty($_POST['Message']))) {
				// on se connecte à notre base
				$base = mysql_connect ('localhost', 'minibase.flash', 'minibase');
				mysql_select_db ('base_ytzmi', $base);

				// on prepare notre requête d'insertion des données
				$sql = 'INSERT INTO base_ytzmi VALUES("", "'.mysql_escape_string($_POST['Message']).'")';

				// on lance la requête
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

				// on ferme la connexion à la base de données
				mysql_close();

				// on redirige le visiteur vers l'accueil du livre d'or
				header('Location: idee_ytzmi.php3');

				// on termine le script courant
				exit();
}}}
// on entre dans le cas où le formulaire s'affichera).



Et là est la page pour effacer


 include ('protected/login.inc.php');
  //include ('protected/ctrl.inc.php');

if((isset($_POST['delete']))
	
		$delete = mysql_query('DELETE FROM base_ytzmi WHERE Id AND Message='.$_POST['delete']);
	header('Location:idee_ytzmi.php3');
		$req = mysql_query($delete) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
}
	else
{
	echo 'Elle ne peut être supprimée de la liste !';
}
mysql_close();



Je vous ai donné tous les php correspondant, mais l'erreur qui s'affiche est dans le fichier php 'delete'

a écrit :
Parse error: syntax error, unexpected T_VARIABLE in /mnt/154/sdb/7/f/minibase.flash/idee_ytzmi/delete_idee_ytzmi.php on line 7


Cela fait 3 jours que je suis à chercher, modifier, lire tout ce qui peut être écrit sur ce sujet mais je ne vois pas quelle variable n'existe pas...

je suppose que pour vous c'est flagrant... pouvez-vous me le dire, svp? merci

ou m'aider à corriger mes php Smiley ohwell
Modifié par ytzmi (11 Jul 2011 - 17:50)
C'est une erreur de syntaxe. Il manque certainement un point virgule ou une parenthèse ou accolade en trop/moins.

Déjà il y a une parenthèse ouvrante en trop à la ligne
if([#red][b]([/b][/#]isset($_POST['delete']))

et il manque l'accolade ouvrante à la suite.
Modifié par moust (11 Jul 2011 - 19:29)
comme je suis toujours "en recherche", entre temps, j'ai modifié mon php du delete_idee_ytzmi.php

en :


 include ('protected/login.inc.php');
  //include ('protected/ctrl.inc.php');
  
  			//on veut supprimer un message
  			$post = (int) $_GET['post'];
        	$requete1 = mysql_query('SELECT Id, Message FROM base_ytzmi WHERE id='.$post.'');
        	$data = mysql_fetch_assoc($requete1);
        	$Message = $data['message'];
        	$Id = $data['id'];
        	$query=$sql=('DELETE FROM base_ytzmi WHERE Message = [langue]ost');
     
            $query='execute()';
            $query='CloseCursor()';

            //On enlève 1 au nombre de messages
            $query=$sql=('UPDATE base_ytzmi SET message = message - 1  WHERE message = :message');
            
            $query='execute()';
            $query='CloseCursor()';

            //On enlève 1 au nombre de id
            $query=$sql=('UPDATE base_ytzmi SET  id = id - 1 WHERE id = :id');
           
            $query='execute()';
            $query='CloseCursor()';

            //Enfin le message
            echo'<p>L\'idéee a bien été supprimé !<br />
            Cliquez <a href="./idee_ytzmi.php3?t='.$message.'">ici</a> pour retourner à la liste<br />';

			// on ferme la connexion à la base de données
				mysql_close();


Après moulte messages d'erreur, de syntaxe etc, j'ai fini par arriver à mon "echo" l'idée a bien été supprimé mais en retournant sur la page, l'idée est toujours là.

Smiley ohwell
$query=$sql=('DELETE FROM base_ytzmi WHERE Message =   ost');


euh ce n'est pas un mysql_query() qu'il faudrait a la place de $query=$sql= ?
a écrit :
euh ce n'est pas un mysql_query() qu'il faudrait a la place de $query=$sql= ?


j'ai modifié par

$requete =("DELETE FROM base_ytzmi WHERE Message = '$post'");
$resultat = mysql_query($requete,$connexion) or die ("Erreur : ".mysql_error());
    mysql_close($connexion);


c'est un script que j'ai pris sur le siteduzero que j'ai tenté comme j'ai pu, moi-même étant du niveau 0, de l'adapter à mes besoins.

donc à ce jour, avec les dernières modifications, je n'ai plus de message d'erreur.
j'ai bien le message me disant que l'idée a été supprimée de la liste et quand je retourne sur la page, l'idée y est toujours.

dois-je vous remettre la totalité du script et tenter de me dire où sont mes erreurs ?

merci
teste à la place du delete un select pour voir si c'est le bon enregistrement que tu vise par ton where ... et un echo de la requête avant ...
j'ai fait ceci : (si ce n'était pas ça que je devais faire, surtout ne me "crie" pas dessus Smiley decu )

	$requete =("SELECT FROM idee_ytzmi WHERE Message = '$post'");
     		$resultat = mysql_query($requete,$connexion) or die ("Erreur : ".mysql_error());
     		echo '<br>Idée sélectionnée';
    mysql_close($connexion);



et j'ai ce message d'erreur
Erreur : You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'FROM idee_ytzmi WHERE Message = '0'' at line 1


ce qui signifie qu'il ne sait pas où prendre le message, c'est ça ?

Smiley ohwell puis-je demander ce que je dois faire ?
est-ce dans cette partie-là, dans la page idee_ytzmi.php3 que je dois rajouter une indication pour que le message soit pris et supprimer.

if ($nb_signature == 0) {
	echo 'Aucune idée pour l\'instant.';
}
else {
	while ($data = mysql_fetch_array($req)) {
			
		echo nl2br(htmlentities(trim($data['Id'])));
		echo '<br />';
		echo nl2br(htmlentities(trim($data['Message'])));
		echo '<br /><form method="post" action="delete_idee_ytzmi.php">';
		echo '<br /><div align="center"><img border="0" src="image/balai.gif" ><input type="submit" value="Supprimer de la liste" name="delete"></div>';
		echo '<br /><br /><hr width="80%" color="#CC6600"/><hr width="60%" color="#3333CC" />';
		echo '<br /><br />';																						
	}
}


Si oui, que dois-je écrire ?

merci
ytzmi a écrit :
j'ai fait ceci : (si ce n'était pas ça que je devais faire, surtout ne me &quot;crie&quot; pas dessus Smiley decu )

	$requete =("SELECT FROM idee_ytzmi WHERE Message = '$post'");
     		$resultat = mysql_query($requete,$connexion) or die (&quot;Erreur : &quot;.mysql_error());
     		echo '&lt;br&gt;Idée sélectionnée';
    mysql_close($connexion);



et j'ai ce message d'erreur
Erreur : You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'FROM idee_ytzmi WHERE Message = '0'' at line 1



en fait il aurait fallu faire
	$requete =("SELECT * FROM idee_ytzmi WHERE Message = '$post'");
echo "requete sql : {"$requete"} <br />";
     		$resultat = mysql_query($requete,$connexion) or die (&quot;Erreur : &quot;.mysql_error());
     		echo '&lt;br&gt;Idée sélectionnée';
print_r($resultat);
    mysql_close($connexion);


pour voir si tu as les bonnes valeurs dans $post

effectivement ton formulaire a un souci on dirait, fait déjà un formulaire à la main pour être sur de ton code html, il faut un champ de formulaire caché ou non avec l'identifiant de ton enregistrement à supprimer.
ok Smiley ohwell

j'ai rectifié et j'ai le message d'erreur suivant qui dit :

requete sql : {"$requete"}
<br>Idée sélectionnéeResource id #4


et le id #4 est inexistant, car l'idée à supprimer devrait être #3

et non, car je viens de mettre une 4ème idée, et après vouloir la supprimer, le message d'erreur reste le même avec id #4

;;;;;;;;

pour
effectivement ton formulaire a un souci on dirait, fait déjà un formulaire à la main pour être sur de ton code html, il faut un champ de formulaire caché ou non avec l'identifiant de ton enregistrement à supprimer.


tu parles de quel formulaire ?

celui de la page où l'on écrit l'idée et on envoie (en fait le formulaire d'envoi)

ou

celui où est "visible" l'idée et là où j'ai rajouté un bouton "supprimer l'idée"
Modifié par ytzmi (13 Jul 2011 - 19:13)
je parles du formulaire où tu demandes la suppression bien sûr

ah et pour l'echo c'était pas tout a fait cela que je voulais écrire en fait il y a des doubles quotes en trop c'est
a écrit :
echo " requête sql : {$requete}"
que je voulais que tu fasses

les variables entre double quotes sont remplacées par leurs valeurs ( ça évite la concaténation ... )
j'ai modifié et j'ai le message d'erreur

requete sql : SELECT * FROM idee_ytzmi WHERE Id = '0'
<br>Idée sélectionnéeResource id #4


ce qui signifie qu'il ne trouve pas l'id d'où est "appelé" la suppression.

Il faudrait donc que je fasse un formulaire avec l'identifiant de l'enregistrement...
oula... Smiley sweatdrop

ok, je vais chercher et voir si je trouve un "keke" chose Smiley rolleyes
et bien si dans ton formulaire tu n'indiques pas l'identifiant dans un champ caché ou non, ton programme ne peut pas le deviner effectivement.

En général on génère ( au moment de la génération du formulaire) un champ de formulaire caché avec comme valeur l'identifiant, comme cela en cliquant sur le bouton d'action ( modification/suppression .... ) on récupère aussi l'identifiant.

Un conseil : quand tu crée un formulaire affiche les données reçues dans ton script de traitement pour être sûr des valeurs passées. Vérifie ensuite les variables de requête générées par des messages de débuguage .
tu es super sympa.

ce que tu me dis est très clair ........; mais je suis perdue !

voici ce que j'ai rajouté dans mon script où le Id et le Message sont appelés pour être affichés.

if ($nb_signature == 0) {
	echo 'Aucune idée pour l\'instant.';
}
else {
	while ($data = mysql_fetch_array($req)) {
			
		echo nl2br(htmlentities(trim($data['Id'])));
		echo '<br />';
		echo nl2br(htmlentities(trim($data['Message'])));
			echo '<br /><form action="delete_idee_ytzmi.php?id=<?php echo $id;?>" method="post" >';
			echo '<br /><div align="center"><a href="delete_idee_ytzmi.php?id='.$affiche['id'].'"><img border="0" src="image/balai.gif" ><input type="submit" value="Supprimer de la liste" name="delete"></a></div>';
		echo '<br /><br /><hr width="80%" color="#CC6600"/><hr width="60%" color="#3333CC" />';
		echo '<br /><br />';																						
	}
}


je vais à la pèche dans les forums dans les sites qui proposent des scripts et je tente de les adapter mais franchement, j'ai l'impression du faire du raccommodage... d'assembler des morceaux de pièces et je vois bien que c'est biscornu et que cela ne ressemble à rien ! Smiley decu


Dans mon autre page "delete_idee_ytzmi.php" j'ai mis ceci :

//on veut supprimer un message
  			$Id = $_GET['Id'];
  			$post = $_GET['p'];
        	$requete1 = mysql_query("SELECT Id, Message FROM idee_ytzmi WHERE Message ='.$post.'");
        	$data = mysql_fetch_assoc($requete1);
        	$Message = $data['message'];
        	$Id = $data['id'];
        	
        		if(isset($_POST["delete"]))
{
	//On efface le message
	$efface_donnees = mysql_query("DELETE FROM idee_ytzmi WHERE id = $id");
			
        
     		$resultat = mysql_query($efface_donnees,$connexion) or die ("Erreur : ".mysql_error());
            mysql_close($connexion);
			
	}		


et le message erreur est :

Erreur : Query was empty


je me doute que tu n'es pas là pour corriger et me mâcher le travail, mais à force de faire du copier-coller de tout ce que je vois ailleurs, je commence à fatiguer.
je suis toujours à la recherche d'une solution pour supprimer les messages à partir de la page.

donc, une partie du code où se trouve le "bouton" pour supprimer

else {
	while ($data = mysql_fetch_array($req)) {
		
		echo '<br />';
		echo nl2br(htmlentities(trim($data['Message'])));
		echo '<br />';	
		echo nl2br(htmlentities(trim($data['Id'])));
		
			echo '<br /><form action="delete_idee_ytzmi.php" method="post" >';
			echo '<br /><div align="center"><a href="delete_idee_ytzmi.php?Message='.$data['Message'].'"><img border="0" src="image/balai.gif" ><input type="submit" value="Supprimer de la liste" name="delete"></a></div>';
		
		echo '<br /><br /><hr width="80%" color="#CC6600"/><hr width="60%" color="#3333CC" />';
		echo '<br /><br />';																						
	}
}	


Et là, j'ai trouvé "ailleurs" un code de suppression de message mais j'ai une erreur de syntax que je ne trouve pas


 include ('protected/login.inc.php');
  //include ('protected/ctrl.inc.php');
  
  //On récupère l'identifiant
$Id = $_GET['Id'];
//on initialise notre formulaire pour pouvoir le masquer
$masquer_formulaire == 0;

  			//Si l'action de supprimer a été effectuée
if(isset($_POST['delete']))
{
	//On efface la catégorie
	$efface_donnees = mysql_query("DELETE FROM idee_ytzmi WHERE Id = $Id");

	//Si il y a une erreur
	if (!$efface_donnees) {
		die('Requête invalide : ' . mysql_error());
	}
	else {
		//Si tout c'est bien passé, on informe que le message est supprimé
		echo '<div class="cadre"><p>L\'idée à été supprimé avec succès. <a href=idee_ytzmi.php3>Retour à la page.</a></p></div>';
	}
	//on masque le formulaire pour n'afficher que le message
	$masquer_formulaire=1;
	// On ferme isset($_POST["Supprimer"]))
}

//on masque le formulaire en fonction des résultats
if($masquer_formulaire == 0) {
	

	<form action="delete_idee_ytzmi.php?id=<?php echo $id;?>" method="post">
	<p><input name="delete" value="Supprimer idée N°<?php echo $id;?>"
	type="submit" /></p>
	</form>
		
	//on ferme la boucle if($masquer_formulaire == 0)
}
     				
			// on ferme la connexion à la base de données
				mysql_close();


si vous voyez, vous pouvez me dire où, svp ? Smiley sweatdrop