Modification de données

Résolu
mocoye Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -  
mocoye Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 73 Date d'inscription   Statut Membre Dernière intervention   6
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mocoye Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
tu l'as mis où ce code exactement ?????
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 73 Date d'inscription   Statut Membre Dernière intervention   6
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > mocoye Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
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