Petit problème sur une requête PHP

Résolu/Fermé
Esperance - Modifié le 11 mai 2017 à 16:44
 esperance - 15 mai 2017 à 10:16
Bonjour tout le monde !

J'essaie de pouvoir supprimer et modifier ma BDD à partir de mon Back Office mais cela ne fonctionne pas --' et je n'ai pas d'erreur qui s'affiche.

Voici le bout de code qui correspond à mes requêtes :


if(isset($_POST['Sup'])){
$id=$_POST['id'];
$supprimer = $_POST['Sup'];
$supprimer=$bdd->query("DELETE FROM ".$table. " WHERE id_".$table. "=".$id);
} // Ceci est l'action pour supprimer la ligne d'une table



if(isset($_POST['Modif'])){
$id=$_POST['id'];
$modifier = $_POST['Modif'];
$preparation="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){
$preparation=$preparation.$clef.'="'.$value.'",';
}// Ceci est l'action pour modifier la ligne d'une table

}
$preparation = substr($preparation, 0, -1);
$modifier=$bdd->query("UPDATE ".$table. " SET ".$preparation. " WHERE id_".$table. "=".$id);
}


Est-ce que quelqu'un pourrait gentiment m'aider?

Merci à toutes les personnes qui pourront m'aider !
A voir également:

5 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 mai 2017 à 18:57
Bonjour,

Déjà .. peux tu nous dire si tu utilises PDO ou mysqli ?

Ensuite, sorts les "requêtes" de leurs exécutions et fais en des echo
par exemple :
 //récupération "propre" des variables
 $id= !empty($_POST['id']) ? $_POST['id'] : NULL;
 
 $sql = "DELETE FROM $table WHERE id_".$table. "='$id'";
 echo "<br>Requete :<br>".$sql;
 $supprimer=$bdd->query($sql);

1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
12 mai 2017 à 02:13
requête que tu pourras (devras...) tester directement dans ta bdd en passant par phpmyadmin par exemple ...
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 mai 2017 à 20:08
bonsoir, je vois que tu fais (deux fois):
" WHERE id_".$table. "=".$id

je me demande si tu ne devrais pas plutôt faire:
" WHERE ".$table."id_ =".$id

qu'en penses-tu?
peux-tu faire
print_r($_POST);
, et ajouter des
echo 
pour vérifier si tes
if
et tes
foreach 
se comportent comme tu l'imagines?
1
Bonjour yg_be,

bonsoir, je vois que tu fais (deux fois):
" WHERE id_".$table. "=".$id1

je me demande si tu ne devrais pas plutôt faire:
" WHERE ".$table."id_ =".$id1
qu'en penses-tu?

Je vais essayer la deuxième solution pour voir. J'avoue que la première je l'ai repris d'un exo de cours. Donc j'ai fait comme on m'a montrer.


peux-tu faire print_r($_POST); , et ajouter des echo
pour vérifier si tes if et tes foreach se comportent comme tu l'imagines?

Quand je fais tout ca, tout me semble correcte.
J'ai bien mes lignes qui s'affiche.

Ce que je ne comprends pas c'est que je peux ajouter une ligne mais pas la supprimer n'y la modifier.

Merci de ta réponse.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
12 mai 2017 à 11:49
Donc.. si tu fais du PDO .. il faut activer la gestion des erreurs dans la connexion
comme ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


try{
$bdd =new PDO('mysql:host=localhost;dbname=ville; charset=utf8', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


puis au niveau de tes requêtes ajouter des try/catch et passer par les requêtes préparées :
 $id= !empty($_POST['id']) ? $_POST['id'] : NULL;
 
//preparation de la requête et des variables
 $sql = "DELETE FROM $table WHERE id_".$table. "=:id";
 $datas = array(':id'=>$id);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}



Quand je fais un echo il m'affiche mon echo et rien de plus même pas une erreur.

NB: Quand tu as, dans ma réponse précédente, fais le ECHO de la requête .. c'était pour
1 - Nous la montrer en la postant sur le forum
2 - Que tu La testes, DIRECTEMENT, dans ta bdd via phpmyadmin.
1
Bon même avec tes requêtes, ça ne fonctionne pas.
Je ne sais pas pourquoi. :(
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Esperance
12 mai 2017 à 17:24
Montres ton code corrige ainsi que le résultat des echo print demande par yg_be
0
Merci de ton aide ça fonctionne !

Mon problème est résolut !

Encore merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > esperance
15 mai 2017 à 09:41
Il serait bien dans ce cas :
- d'indiquer la solution ou le message ayant aidé ( au cas où d'autres visiteurs consulteraient ce message.... le forum étant là pour "partager" )

- de marquer la discussion comme RESOLU (lien se trouvant sous le titre de ta question).

Bonne journée.
0
Bonjour jordane45
Déjà .. peux tu nous dire si tu utilises PDO ou mysqli ?

J'ai fait la BDD sur MySQL et mon BDD est connecté de la façon suivante :
$bdd = new PDO('mysql:host=localhost;dbname=ville;port=3306;charset=utf8', 'root', '');

Quand je fais un echo il m'affiche mon echo et rien de plus même pas une erreur.

Merci de ta réponse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mon problème a été résolut, rappel de mon problème, je n'arrivais pas à supprimer ou modifier une ligne de ma BDD en passant par un Back Office.
j'ai changer plusieurs fois mon code et celui la est le bon.

Erreur que j'ai corrigé le nom de mes tables (erreur bête mais qui change tout, erreur de code pas au bonne endroit, et il me manquait un morceau de code) ces erreurs faisait que je ne pouvais pas avoir de réponse.

En faisant les var_dump et echo j'ai pu trouver mes erreurs et égalment grâce à l'aide se forum.



Voici mon code corriger:

<?php

if(isset($_POST['valider'])){
$_SESSION['table']=$_POST['valider'];


$table = $_SESSION['table'];

if(isset($_POST['Sup'])){
$id=$_POST['id'];
$supprimer = $_POST['Sup'];
try{ $bdd->query("DELETE FROM ".$table. " WHERE id_".$table. "=".$id);
}catch(PDOException $e ){
echo "Error: ".$e;
}
}


if(isset($_POST['Modif'])){
$id=$_POST['id'];
$modifier = $_POST['Modif'];
$preparation="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){
$preparation=$preparation.$clef.'="'.$value.'",';
}

}
$preparation = substr($preparation, 0, -1);
$modifier=$bdd->query("UPDATE ".$table. " SET ".$preparation. " WHERE id_".$table. "=".$id);
}
if(isset($_POST['Envoyer'])){
$preparation="";
$insert="";
foreach ($_POST as $clef => $value) {
if ($clef !='valider' && $clef != 'Modif' && $clef !='id' && $clef !='Envoyer' && $clef !='"_$j_"' ){
$insert=$insert.$clef.",";
$preparation=$preparation."'".$value."',";
}
}
$preparation = substr($preparation, 0, -1);
$insert = substr($insert, 0, -1);
$ajouter=$bdd->query('INSERT INTO '.$table.'('.$insert.') VALUES('.$preparation.')');
}

0