Php suppression resultat SQL de plusieurs lignes

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 : Php suppression resultat SQL de plusieurs lignes

Re: Php suppression resultat SQL de plusieurs lignes

par robin21081993 » 27 juil. 2012, 18:25

Bonsoir,

Moogli, merci de ta réponse.

J'ai essayé d'appliquer ce que tu m'as répondu.
J'ai tout de même encore des soucis... ça ne fonctionne pas encore...

Voilà ma page Suppression.php (traitement de suppression) :

<?php
//connection au serveur:
$cnx = mysql_connect( "xxxxxxx", "xxxxxxx", "xxxxxxx" );

//sélection de la base de données:
$db = mysql_select_db( "xxxxxxx" );

//récupération de la variable d'URL,
//qui va nous permettre de savoir quel enregistrement supprimer:
$message = $_GET["zone_texte"];
$id = $_GET['numero'];

//requête SQL:

$sql = 'DELETE FROM texte WHERE numero='.$id;

echo $sql;


//exécution de la requête:
$requete = mysql_query($sql, $cnx);
// $requete = mysql_query( $sql, $cnx );

//affichage des résultats, pour savoir si la suppression a marchée:
if($requete)
{
echo("<br/>La suppression à été correctement effectuée<br/><a href='xxxxxxx.php'>Retour</a>");
}
else
{
echo("<br/>La suppression à échouée");
}
?>


Est-ce que la requête te paraît correct ?

Ensuite, voici la page de l'admin dans laquelle il supprime (ça vous aidera sûrement mieux à comprendre mon soucis) :

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

<?php
//$result = ($_POST['zone_texte']);

//connection au serveur:
$cnx = mysql_connect("xxxxxxxx", "xxxxxxxx", "xxxxxxxx") ;

//sélection de la base de données:
$db = mysql_select_db( "xxxxxxxx" ) ;

//requête SQL:
$sql = "SELECT *
FROM texte" ;

//exécution de la requête:
$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->numero."<br/>".$result->zone_texte."<br/><a href=\"#\" onClick=\"confirme('".$result->numero."')\" >Supprimer</a></td><br>\n") ;

}
?>
</table>


(Il y a une petite partie de javascript qui permet de redemander confirmation de la suppression à l'admin)

Re: Php suppression resultat SQL de plusieurs lignes

par moogli » 15 juil. 2012, 12:18

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



@+

Re: Php suppression resultat SQL de plusieurs lignes

par robin21081993 » 14 juil. 2012, 14:49

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

par xTG » 11 juil. 2012, 09:10

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

par robin21081993 » 10 juil. 2012, 23:35

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

par Mazarini » 10 juil. 2012, 20:55

Parce que pour effacer un message, il faut le saisir ?

Re: Php suppression resultat SQL de plusieurs lignes

par robin21081993 » 10 juil. 2012, 20:50

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

par Mazarini » 10 juil. 2012, 16:15

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

par xTG » 10 juil. 2012, 14:20

AUTO_INCREMENT sur le champ. ;)

Re: Php suppression resultat SQL de plusieurs lignes

par robin21081993 » 10 juil. 2012, 12:09

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

par Mazarini » 03 juil. 2012, 13:18

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

par xTG » 03 juil. 2012, 13:13

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

par robin21081993 » 03 juil. 2012, 09:56

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

par Mazarini » 29 juin 2012, 09:10

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

par Xartrick » 29 juin 2012, 05:20

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