Modification de données

Résolu/Fermé
mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023 - Modifié par jordane45 le 27/04/2016 à 13:04
mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023 - 27 avril 2016 à 20:31
Bonjour,

Voila je me remets au PHP après quelques années et je suis rouillée, je souhaite dans la partie admin de mon site, permettre la modification de données, j'ai crée une première page qui permet via un formulaire de recenser les entrées d'une de mes tables,

<?php include("include/bdd.inc.php"); ?>
<?php 
$req = $bdd->prepare('SELECT * FROM fiches_pratiques WHERE id= ?') or die(print_r ($bdd->errorInfo()));
$req->execute(array($_GET['id']));
?>



<form action="modif_fp2.php" id="form" method="post" enctype="multipart/form-data" >
                    <table>
                    <?php
     while ($donnees = $req->fetch())
     {
     ?>

                 <tr>
                    <td width="119" class="tit_champ">NUMERO</td>
                    <td width="423"><input name="numero" type="text" id="nom" class="txt_champ" value="<?php echo $donnees['numero']; ?>" /></td>
                    </tr>
                 <tr>
                    <td  width="119" class="tit_champ">NOM</td>
                    <td width="423"><input name="nom" type="text" id="nom" class="txt_champ"  value="<?php echo $donnees['nom']; ?>"/></td>
                    </tr>
                    <tr>
                    <td  width="119" class="tit_champ">THEME</td>
                    <td width="423"><input name="theme" type="text" id="nom" class="txt_champ" value="<?php echo $donnees['theme']; ?>"/></td>
                    </tr>
                    <tr>
                    <td  width="119" class="tit_champ">ACTIF</td>
                    <td class="champfichier"><input name="actif"  type="checkbox" id="actif" <?php if($donnees["actif"]==1){echo "checked=\"checked\"";}?>/></td>
                    </tr>
                    <tr>
                    <td><input name="id_masque" type="hidden" value="<?php echo $donnees['id']; ?>" /></td>
                    <td><input name="envoyer" type="image" src="design/envoyer.png" value="envoyer" /></td>
                    </tr>
                  <?php
     }

$req->closeCursor();
?> 
               </table>
               </form>


jusqu'à la ça fonctionne, en revanche après avoir fait ma modification et cliqué sur envoyer je reviens vers ma page initiale sans aucune modification, bien entendu j'ai demandé la modification sur une page intermédiaire

<?php include("include/bdd.inc.php"); ?>


<?php 

$id=addslashes($_POST["id_masque"]);
$numero=addslashes($_POST["numero"]);
$nom=addslashes($_POST["nom"]);
$theme=addslashes($_POST["theme"]);
if(isset($_POST["actif"])){
 echo $actif=1 ;
} else {
echo $actif=0;
}



$req = $bdd->prepare('UPDATE fiches_pratiques SET numero = :numero, nom = :nom, theme = :theme, actif = :actif WHERE id = :id');
    $req->execute(array(
     'numero' => $numero,
     'nom' => $nom,
     'theme' => $theme,
     'actif' => $actif
     ));

    
    header("location:fiches_pratiques.php");
?>







mais ca ne fonctionne pas je ne vois l'erreur, si quelqu'un peut m'aider ce serait génial.

Merci


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


1 réponse

jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
27 avril 2016 à 13:09
Bonjour,


Prends l'habitude de séparer les requêtes ainsi que les variables associées de l'exécution de la requête.
Pense également à mettre ton code dans un bloc try/catch pour intercepter les éventuelles erreurs.

Par exemple :
$sql = 'UPDATE fiches_pratiques SET numero = :numero, nom = :nom, theme = :theme, actif = :actif WHERE id = :id';
$a_datas = array(
     'numero' => $numero,
     'nom' => $nom,
     'theme' => $theme,
     'actif' => $actif
     );

try{
    $req = $bdd->prepare($sql);
    $resultat =  $req->execute($a_datas);
}catch(Exception $e){
  echo "Erreur ! ".$e->getMessage();
  echo "Requete : ".$sql;
  echo "Variables : <br><pre>";
  print_r($a_datas);
  echo "'</pre>";
  exit(); // remplace le "die"
}


 if($resultat){
   //si pas de souci dans la requête... redirection !
    header("location:fiches_pratiques.php");
 }



pour "trapper" les éventuelles erreurs PHP tu peux aussi ajouter au début de tes pages PHP l'instruction :
error_reporting(E_ALL);


NB : on n'utilise plus le OR DIE ... mais on préfèrera les TRY/CATCH.

0
mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023 5
27 avril 2016 à 13:37
Bonjour,

Tout d'abord merci pour ta réponse, que j'ai mis en application, malheureusement voici le message que la page m'affiche.


( ! ) Notice: Undefined variable: numero in C:\wamp\www\crib\regent\modif_fp2.php on line 8
Call Stack
# Time Memory Function Location
1 0.0007 140448 {main}( ) ..\modif_fp2.php:0

( ! ) Notice: Undefined variable: nom in C:\wamp\www\crib\regent\modif_fp2.php on line 9
Call Stack
# Time Memory Function Location
1 0.0007 140448 {main}( ) ..\modif_fp2.php:0

( ! ) Notice: Undefined variable: theme in C:\wamp\www\crib\regent\modif_fp2.php on line 10
Call Stack
# Time Memory Function Location
1 0.0007 140448 {main}( ) ..\modif_fp2.php:0

( ! ) Notice: Undefined variable: actif in C:\wamp\www\crib\regent\modif_fp2.php on line 12
Call Stack
# Time Memory Function Location
1 0.0007 140448 {main}( ) ..\modif_fp2.php:0

( ! ) Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\crib\regent\modif_fp2.php on line 16
Call Stack
# Time Memory Function Location
1 0.0007 140448 {main}( ) ..\modif_fp2.php:0
2 0.0060 148808 execute ( ) ..\modif_fp2.php:16


j'ai copié/collé ton code et l'ai mis à la place du mien de cette façon :


<?php include("include/bdd.inc.php"); ?>


<?php

$sql = 'UPDATE fiches_pratiques SET numero = :numero, nom = :nom, theme = :theme, actif = :actif WHERE id = :id';
$a_datas = array(
'numero' => $numero,
'nom' => $nom,
'theme' => $theme,
'actif' => $actif
);

try{
$req = $bdd->prepare($sql);
$resultat = $req->execute($a_datas);
}catch(Exception $e){
echo "Erreur ! ".$e->getMessage();
echo "Requete : ".$sql;
echo "Variables : <br><pre>";
print_r($a_datas);
echo "'</pre>";
exit(); // remplace le "die"
}


if($resultat){
//si pas de souci dans la requête... redirection !
header("location:fiches_pratiques.php");
}



?>
0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651 > mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023
27 avril 2016 à 14:25
tu l'as mis où ce code exactement ?????
0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651 > jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024
27 avril 2016 à 14:28
Tu as oublié de remettre la récupération des variables .....

$id=addslashes($_POST["id_masque"]);
$numero=addslashes($_POST["numero"]);
$nom=addslashes($_POST["nom"]);
$theme=addslashes($_POST["theme"]);
if(isset($_POST["actif"])){
 echo $actif=1 ;
} else {
echo $actif=0;
}


A écrire comme ça de préférence :
$id= isset($_POST["id_masque"]) ? addslashes($_POST["id_masque"]) : NULL;
$numero= isset($_POST["numero"]) ? addslashes($_POST["numero"]) : '';
$nom= isset($_POST["nom"]) ? addslashes($_POST["nom"]) : '';
$theme=isset($_POST["theme"]) ? addslashes($_POST["theme"]) : '';
$actif = isset($_POST["actif"]) ? 1 : 0 ;
0
mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023 5
27 avril 2016 à 16:15
re,

Alors j'ai mis le nouveau code que tu m'as fourni avant le précédent et j'ai le message suivant qui apparait :


( ! ) Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\crib\regent\modif_fp2.php on line 21
Call Stack
# Time Memory Function Location
1 0.0008 143408 {main}( ) ..\modif_fp2.php:0
2 0.0054 152008 execute ( ) ..\modif_fp2.php:21


ci-dessous le code de la page "modif_fp2.php"


<?php include("include/bdd.inc.php"); ?>


<?php
$id= isset($_POST["id_masque"]) ? addslashes($_POST["id_masque"]) : NULL;
$numero= isset($_POST["numero"]) ? addslashes($_POST["numero"]) : '';
$nom= isset($_POST["nom"]) ? addslashes($_POST["nom"]) : '';
$theme=isset($_POST["theme"]) ? addslashes($_POST["theme"]) : '';
$actif = isset($_POST["actif"]) ? 1 : 0 ;

$sql = 'UPDATE fiches_pratiques SET numero = :numero, nom = :nom, theme = :theme, actif = :actif WHERE id = :id';
$a_datas = array(
'numero' => $numero,
'nom' => $nom,
'theme' => $theme,
'actif' => $actif
);

try{
$req = $bdd->prepare($sql);
$resultat = $req->execute($a_datas);
}catch(Exception $e){
echo "Erreur ! ".$e->getMessage();
echo "Requete : ".$sql;
echo "Variables : <br><pre>";
print_r($a_datas);
echo "'</pre>";
exit(); // remplace le "die"
}


if($resultat){
//si pas de souci dans la requête... redirection !
header("location:fiches_pratiques.php");
}


?>



Merci encore pour ton aide,
0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651 > mocoye Messages postés 76 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 28 septembre 2023
27 avril 2016 à 16:27
Dans l'array de datas... il manque la variable id
$a_datas = array(
     'numero' => $numero,
     'nom' => $nom,
     'theme' => $theme,
     'actif' => $actif
     );


Essayes avec :
$a_datas = array(
     ':numero' => $numero,
     ':nom' => $nom,
     ':theme' => $theme,
     ':actif' => $actif,
     ':id'=>$id
     );

</code>
0