Signaler

Petit problème sur une requête PHP [Résolu]

Posez votre question Esperance - Dernière réponse le 15 mai 2017 à 10:16 par esperance
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 !
Utile
+1
plus moins
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);

Cette réponse vous a-t-elle aidé ?  
jordane45 18474Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 23 octobre 2017 Dernière intervention - 12 mai 2017 à 02:13
requête que tu pourras (devras...) tester directement dans ta bdd en passant par phpmyadmin par exemple ...
Répondre
Donnez votre avis
Utile
+1
plus moins
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?
Cette réponse vous a-t-elle aidé ?  
Esperance- 12 mai 2017 à 11:50
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.
Répondre
Donnez votre avis
Utile
+1
plus moins
Donc.. si tu fais du PDO .. il faut activer la gestion des erreurs dans la connexion
comme ceci : http://www.commentcamarche.net/faq/46512-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.
Cette réponse vous a-t-elle aidé ?  
Esperance- 12 mai 2017 à 14:53
Bon même avec tes requêtes, ça ne fonctionne pas.
Je ne sais pas pourquoi. :(
Répondre
jordane45 18474Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 23 octobre 2017 Dernière intervention - 12 mai 2017 à 17:24
Montres ton code corrige ainsi que le résultat des echo print demande par yg_be
Répondre
esperance- 15 mai 2017 à 09:23
Merci de ton aide ça fonctionne !

Mon problème est résolut !

Encore merci
Répondre
jordane45 18474Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 23 octobre 2017 Dernière intervention - 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.
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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.')');
}

Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !