Page 1 sur 2

Php suppression resultat SQL de plusieurs lignes

Posté : 29 juin 2012, 00:46
par robin21081993
Bonsoir,

Je suis nouveau sur le forum.
Je créé actuellement un site internet.
Celui-ci a une partir administrateur, sur laquelle l'administrateur peut (via un textarea) envoyer des messages à la base de données qui sont ensuite affichés aux visiteurs du site.
L'administrateur doit avoir la possibilité de supprimer ces messages via un formulaire.

Mon problème est le suivant :

Si le message inséré ne compte pas de saut de ligne, alors il est possible de supprimer le message sans soucis.
Cependant, à partir du moment ou il y a un "saut de ligne" alors lorsque je clique sur le lien de suppression, cela ne fait rien...

J'ai fais de multiples recherches depuis déjà un certaines nombre de semaines... mais sans succès... j'ai testé pleins de choses qui ne m'ont pour l'instant menées à rien...
Donc j'ai décidé de solliciter votre aide afin de réussir à solutionner enfin ce problème si possible...

Je vous remercie BEAUCOUP d'avance !

Bonne soirée.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 29 juin 2012, 05:20
par Xartrick
Quand tu supprime ton message, tu utilise un indice comme référence ou le message lui même ?
Un requête dans le genre:

DELETE FROM `table_name` WHERE `id` = 1

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 29 juin 2012, 09:10
par Mazarini
Il faudrait afficher les informations recu par la page qui traite la suppression et afficher la requete SQL pour essayer de comprendre ce qui se passe.

Le plus important est de contrôler la bonne exécution de la requete en testant les codes erreurs après la requete.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 03 juil. 2012, 09:56
par robin21081993
Xartrick : J'utilise le message lui-même
Comme ceci :
$sql = "DELETE FROM texte WHERE zone_texte = '".$message."' ";



Voici ma page php de suppression :

<html>
<head></head>
<body>

<?php

$cnx = mysql_connect( "xxxxxxxxxx", "xxxxxxxxx", "xxxxxxxxx" );

$db = mysql_select_db( "xxxxxxxxx" );

$message = $_GET["zone_texte"];

$sql = "DELETE FROM texte WHERE zone_texte = '".$message."' ";

$requete = mysql_query($sql, $cnx);

if($requete)
{
echo("<br/>La suppression à été correctement effectuée<br/><a href='xxxxxx'>Retour</a>");
}
else
{
echo("<br/>La suppression à échouée");
}
?>
</body>
</html>

ET VOICI UNE PARTIE DU CODE DE LA PAGE ADMIN QUI PERMET DONC A L'ADMINISTRATEUR DE SUPPRIMER LES TEXTES :

<b><u><h2>Textes</h2></u>

<?php
$cnx = mysql_connect("xxxxxxxx", "xxxxxxxx", "xxxxxxxx") ;


$db = mysql_select_db( "xxxxxxxx" ) ;

$sql = "SELECT zone_texte
FROM texte" ;

$requete = mysql_query( $sql, $cnx ) ;
?>
<table class="titre" align="center">
<?
//affichage des données:
while( $result = mysql_fetch_object( $requete ) )
{
echo("<tr><td class='titre'><div align=\"center\">".$result->zone_texte."<br/><a href=\"#\" onClick=\"confirme('".$result->zone_texte."')\" >Supprimer</a></td><br>\n") ;
}
?>
</table>


J'ai insérer un petit code Java au début de la page afin de demander à l'admin lorsqu'il veut supprimer quelque chose, s'il est bien sûr de vouloir le supprimer.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 03 juil. 2012, 13:13
par xTG
Utilises la clé primaire de la table plutôt que le message lui même (ce dernier peut occasionner selon le code et la configuration du serveur des résultats de comparaisons inattendues : encodage, échappement, ect).

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 03 juil. 2012, 13:18
par Mazarini
Je laisse mon message pour la partie en gras au moins.

Mysql et html font des choses sur les chaines pour leur traitement. Manifestement la chaine est transformée entre ce que transmet le navigateur et ce qu'enregistre musql. Peut être un problème \n\r (au lieu de \n)ou d'autres ajouts invisible de \.
Au passage, fait un test avec une quote dans le texte.

Le plus simple serait d'utiliser un id numérique pour tes messages. Ca te permettrai d'avoir 2 fois le même message sans problème.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 12:09
par robin21081993
Bonjour !

Merci beaucoup pour les réponses.

Mazarini, j'ai essayé avec une quote, et en effet, cela me fait la même chose (impossible de supprimer...).
Alors donc oui, il faudrait peut-être que je supprime l'id numérique (qui serait clé primaire) ce qui supprimerait donc le message.

Par contre, comment je peux faire pour que l'id numérique s'ajoute automatiquement dans la table ? Y aurait-il une fonction (comme la fonction date) pour qu'elle se rentre automatiquement, et s'incrémente toute seule ?

Merci beaucoup d'avance!

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 14:20
par xTG
AUTO_INCREMENT sur le champ. ;)

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 16:15
par Mazarini
Avec une quote, ca ne supprime pas, mais en plus il y a une erreur à controler avec mysql_error()

Lorsque tu vois le message "La suppression à échouée" c'est qu'il y a une erreur dans ton ordre sql, pas que le message n'a pas été trouvé (cf problème de quote).

Pour voir si tu as bien supprimé une ligne : mysql_affected_rows()

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 20:50
par robin21081993
Donc tout est bon concernant l'auto incrémentation...

Par contre, pour la requête de suppression :

Donc au lieu de faire ceci :
$sql = "DELETE FROM texte WHERE zone_texte = '".$message."' ";

Il faut que je fasse quelque chose dans ce genre (en supprimant le numéro qui est clé primaire) :
$sql = "DELETE FROM texte WHERE numero = numero;"

Mais donc évidemment ça ne fonctionne pas...
Je ne sais pas trop quoi mettre exactement après "WHERE numero = ?" En général on y met des variables, mais étant donné que je ne demande pas à l'admin de rentrer de numéro dans le formulaire (vu qu'il y a l'auto incrémentation), je ne vois pas quelle "variable" y mettre...

Mazarini, après avoir réussi cette suppression, je mettrai tout le code qui permet l'affichage des erreurs, et à l'avenir, je le ferai automatiquement, car je me rends compte que c'est vraiment bien important ^^

Encore merci d'avance...!

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 20:55
par Mazarini
Parce que pour effacer un message, il faut le saisir ?

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 10 juil. 2012, 23:35
par robin21081993
L'administrateur saisie un message oui... (dans un textarea...)
Mais il ne saisie pas l'id du message... et donc du coup, je ne sais pas comment faire une requete permettant la suppression de l'ID et non du MESSAGE...
C'est bien ce que vous me conseillez plus haut non ? D'ajouter un ID avec chaque message, afin de supprimer cette ID et non de supprimer le message en lui-même...

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 11 juil. 2012, 09:10
par xTG
Oui mais on t'a aussi dit de lister les différents message et de faire un lien pour chaque message pour passer l'id à la page de suppression.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 14 juil. 2012, 14:49
par robin21081993
Oui et bien c'est ce que je fais dans la page d'admin...
Il y a la page que voit les visiteurs, ou on trouve donc les messages.
Et lorsque l'administrateur se connecte, il a une page qui lui affiche aussi les messages qu'il a saisie précédemment, avec un petit "lien" sous chaque message permettant la suppression...

Mon problème est que, lors de la requête de suppression, il faut bien que je supprime l'ID du message (qui s'insère automatiquement dans la BDD lors de la saisie d'un message) et non le message lui-même non ?
Donc, je ne sais pas quoi mettre exactement dans ma requête...
Lorsque je supprimais le message lui-même auparavant, et bien je mettais la variable du message, mais étant donné que maintenant c'est l'ID qu'il faut supprimer, je ne vois pas quoi mettre...

Vous voyez ce que je veux dire ?

Encore merci d'avance.

Re: Php suppression resultat SQL de plusieurs lignes

Posté : 15 juil. 2012, 12:18
par moogli
tu a déjà indiqué un requete fonctionnelle de suppression (delete from message where id=412 par exemple).

A partir de la il faut que tu fournisse l'id (le 412 de ma requete) au script, soit pas un formulaire soit directement dans l'url, tu utilisera quelque chose comme $_POST['id'] ou $_GET['id'] (par exemple) que tu concaténera à la requete (par exemple $sql = 'delete from message where id='.$_GET['id']; attention cette requete n'est pas utiliser ainsi, il s'agit d'un trou de sécurité. Il faut protéger les données avec des fonctions comme [url=http://www.php.net/mysql_real_escape_string]mysql_real_escape_string[/url si tu utilise mysql ou équivalent).



@+