IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Transmission de paramètres de page en page [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de nounouuuuu201186
    Femme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2011
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 169
    Points : 107
    Points
    107
    Par défaut Transmission de paramètres de page en page
    Bonjour,
    Je veux modifier les coordonnées d'un client donné. En effet, en cliquant sur le bouton "modifier" dans la page index.php, il me renvoie vers un formulaire pour saisir les nouvelles coordonnées. En envoyant le formulaire, les données seront mise à jour dans la base de données.
    Mon problème est la perte du paramètre envoyé à partir de la page index.php dès l'envoie du formulaire.
    Voici ma page index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <title>Update-Delete</title>
             <meta charset="utf-8" />
            <link href="style.css" rel="stylesheet" type="text/css" />
     
        </head>
        <body>
     
            <table  class="tab">
      <tr >
        <th class="tab1">CIN</th>
        <th class="tab1">Nom</th>
        <th class="tab1">Prénom</th>
        <th class="tab1">Email</th>
        <th class="tab1">Date naissance</th>
        <th class="tab1">Action</th>
      </tr>
     
    <?php
        // Connexion à la base de données
         include("connexion.php");
         $req_sel="SELECT id, cin, nom, prenom, email, date_n FROM client";
         $rep= $bdd->query($req_sel);
         while ($donnees = $rep->fetch())
         {
    ?>
     
     
     <tr>
        <td class="tab2"><?php echo $donnees['cin']; ?></td>
        <td class="tab2"><em> <?php echo $donnees['nom']; ?></em></td>
        <td class="tab2"><em> <?php echo $donnees['prenom']; ?></em></td>
        <td class="tab2"><?php echo $donnees['email']; ?></td>
        <td class="tab2"><?php echo $donnees['date_n']; ?></td>
        <td class="tab2"><a href="supprimer.php?delete=<?php echo $donnees['id'];?>" class="bouton_rouge" onclick="return confirm('Êtes-vous sûre de vouloir supprimer ce client ?');">Supprimer</a> <a href="modifier.php?id=<?php echo $donnees['id'];?> " class="bouton_rouge">Modifier</a></td>
      </tr>
     
     <?php
            } // Fin de la boucle des clients
             $rep->closeCursor();
    ?>
     
    </table>
     
     
        </body>
    </html>
    et voici ma page modifier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <title>Modifier</title>
             <meta charset="utf-8" />
          <!-- IMPORT Feuilles de styles -->
    	<link rel="stylesheet" type="text/css" href="style.css" media="all"/>
        </head>
        <body>
     
     
        <?php
     
            if (!isset($_POST['cin']) && !isset($_POST['nom']) && !isset($_POST['prenom']) && !isset($_POST['email']) && !isset($_POST['date_n']))
        {
            # $id=$_GET['id']; 
            # echo $id;
     
            ?>
    	<form method="post" action="modifier.php" >
    		<fieldset>
     
    				<p class="error"></p>
                <label for="cin">CIN</label> 
            		<input type="number" name="cin" id="cin"  required/>
            	<label for="nom">Nom</label> 
            		<input type="text" name="nom" id="nom"  required/>
                <label for="prenom">Prenom</label> 
            		<input type="text" name="prenom" id="prenom"  required/>
            	<label  for="email">Email</label>
            		<input type="email"  name="email" id="email"   required/>
                <label for="date_n" >Date naissance</label>
                    <input type="date"  name="date_n" id="date_n"   required/><br />
            		<button type="submit">Modifier</button>
          		</fieldset>
    	</form>
        <?php
           } 
           else{
     
        $id=$_GET['id'];
        $new_nom= $_POST['nom'];
         include("connexion.php");
         $req="UPDATE client SET nom=$new_nom WHERE id=$id";
         $rep=$bdd->exec($req);
           }
        ?>  
    </body>
    </html>
    Le problème est:
    ( ! ) Notice: Undefined index: id in C:\wamp\www\UpdateDelete\modifier.php on line 42

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Remets l'id en champs caché dans le formulaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier Avatar de nounouuuuu201186
    Femme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2011
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 169
    Points : 107
    Points
    107
    Par défaut
    C'est une très intelligente idée.
    Voici ma nouvelle page modifier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <title>Modifier</title>
             <meta charset="utf-8" />
          <!-- IMPORT Feuilles de styles -->
    	<link rel="stylesheet" type="text/css" href="style.css" media="all"/>
        </head>
        <body>
     
     
        <?php
     
            if (!isset($_POST['cin']) && !isset($_POST['nom']) && !isset($_POST['prenom']) && !isset($_POST['email']) && !isset($_POST['date_n']))
        {
            # $id=$_GET['id']; 
            # echo $id;
     
            ?>
    	<form method="post" action="modifier.php" >
    		<fieldset>
     
    				<p class="error"></p>
                <label for="cin">CIN</label> 
            		<input type="number" name="cin" id="cin"  required/>
            	<label for="nom">Nom</label> 
            		<input type="text" name="nom" id="nom"  required/>
                <label for="prenom">Prenom</label> 
            		<input type="text" name="prenom" id="prenom"  required/>
            	<label  for="email">Email</label>
            		<input type="email"  name="email" id="email"   required/>
                <label for="date_n" >Date naissance</label>
                    <input type="date"  name="date_n" id="date_n"   required/><br />
                <input type="hidden" name="id" value=<?php echo $_GET['id'];?> />
            		<button type="submit">Modifier</button>
          		</fieldset>
    	</form>
        <?php
           } 
           else{
     
        $id=$_POST['id'];
        #echo  $id ; 
        $new_nom= $_POST['nom'];
       #  echo  $new_nom ; 
         include("connexion.php");
         $req="UPDATE client SET nom=$new_nom WHERE id=$id";
         $rep=$bdd->exec($req);
        # header('Location: index.php');
           }
        ?> 
     
     
     
    </body>
    </html>
    La modification au niveau de la base de données ne se fait pas. Pourquoi?

  4. #4
    Membre régulier Avatar de nounouuuuu201186
    Femme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2011
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 169
    Points : 107
    Points
    107
    Par défaut
    Il s'avère que le problème provient de la requête.
    J'ai réglé le problème avec les requêtes préparées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
           } 
           else{
     
         include("connexion.php");
         $req="UPDATE client SET nom=? WHERE id=?";
         $rep=$bdd->prepare($req);
         $rep->execute(array($_POST['nom'],$_POST['id']));
        header('Location: index.php');
           }
        ?>

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il te manque des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="id" value="<?php echo $_GET['id'];?> "/>
    Pense à protéger tes requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      else{
         include("connexion.php");
         $req="UPDATE client SET nom=:nom WHERE id=:nom";
         $rep=$bdd->prepare($req);
         $rep->execute(array(':nom'=> $_POST['nom'], ':id'=>$_POST['id']));
         // header('Location: index.php');
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour, je suis débutant en PDO ; avant, j'utilisais que _MySQL puis _mySQLi. Je cherche à comprendre ce que veut dire "protéger" ; et lorsqu'on m'avait initié à PDO, les requêtes (préparées) étaient de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            $req="UPDATE client SET nom=:nom WHERE id=:nom";
    	$st=$this->prepare($req);
            $st->bindValue(":nom",$_POST['nom']);
            $st->bindValue(":id",$_POST['id']); 
    	$res=$st->execute();
    un brin d'explication ?
    Et y a-t-il un rapport avec cette fonction : mysql_real_escape_string() ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Membre régulier Avatar de nounouuuuu201186
    Femme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2011
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 169
    Points : 107
    Points
    107
    Par défaut
    Je suis encore débutante avec PDO mais je vais essayer de vous répondre selon mes connaissances et aux autres membres de me corriger.
    C'est bien de se familiariser avec PDO. Pour la connexion à la base de données, entre PDO et MySQL_connect, PDO est conseillé car:
    1)PDO est prévue de devenir un standard.
    2)Mysql_connect est obsolète et est amené à disparaître.
    3)PDO est flexible en permettant la migration d’une base de données à une autre rapidement.
    4)PDO, avec son système de requêtes préparées, assure la sécurité du contenu contre les injections SQL.
    Pour ce quatrième point, il ne faut jamais faire confiance aux données qui transitent de page en page ($_GET,$_POST).
    Par exemple $_POST['nom'] peut être un code JavaScript injecté par le visiteur. Pour éviter cette faille (injection SQL), il faut penser à protéger les variables.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les 3 écritures sont similaires et la finalité rejoinds effectivement celle de mysql_real_escape_string().

    Cela permet d'insérer tout type de chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chaine = 'ceci est un "chat"';
    $sql = 'INSERT INTO table VALUES ("' . $chaine . '")';
    // INSERT INTO table VALUES ("ceci est un "chat"")
    // la chaine est cassée au deuxième "
    et également d'empecher l'injection de contenu SQL
    http://fr.wikipedia.org/wiki/Injection_SQL
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Autrement dit :
    La fonction équivalente de mysql_real_escape_string pour pdo est la fonction "quote".

    Il se trouve que les requêtes préparées permettent de par leur abstraction d'avoir un degré de sécurité supérieur. Et donc on utilise souvent des requêtes préparées en liant les valeurs soit avec un bind, soit en passant un tableau dans execute(), pour avoir des requêtes plus sécurisées.

    (mais on utilise l'une ou l'autre des fonctions et pas les deux, je veux dire qu'on utilise pas la fonction "quote" dans une requête préparée.)

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Je résume ce que j'ai compris ; merci de me corriger si nécessaire :
    pour éviter les injections SQL, il faut protéger ses requêtes. Pour faire cela, le plus sécuritif est d'utiliser des requêtes préparées, et donc dans ce cas soit de faire un bind, soit de passer un tableau à la méthode "execute" (mais pas les 2 !) (Et si on fait ça, inutile de recourir à la méthode pdo "quote").
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui c'est ça.

  12. #12
    Membre régulier Avatar de nounouuuuu201186
    Femme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2011
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 169
    Points : 107
    Points
    107
    Par défaut
    Remets l'id en champs caché dans le formulaire.
    On peut procéder aussi comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form method="post" action="modifier.php?id=<?php echo (int) $_GET['id']; ?>" >

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 104
    Points : 4 454
    Points
    4 454
    Par défaut
    Citation Envoyé par nounouuuuu201186 Voir le message
    On peut procéder aussi comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form method="post" action="modifier.php?id=<?php echo (int) $_GET['id']; ?>" >
    Oui en effet ca marche bien

    Il est tellement plus simple d'utiliser 2 méthodes pour transmettre des données qu'une seule
    il est tellement plus sécurisé de passé l'id par l'url au lieu de la cacher( un peu)
    $moi= ( !== ) ? : ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Passer paramètre sur une autre page
    Par lafmart dans le forum Langage
    Réponses: 1
    Dernier message: 04/02/2007, 16h29
  2. Réponses: 11
    Dernier message: 07/09/2006, 10h10
  3. Paramètre qui indique la "page" actuelle
    Par micanti dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 19h01
  4. Passage de paramètre de page en page
    Par canabral dans le forum Langage
    Réponses: 2
    Dernier message: 24/11/2005, 01h05
  5. [FLASH MX2004] Récuperer paramètres GET de la page
    Par CUCARACHA dans le forum Flash
    Réponses: 8
    Dernier message: 04/10/2005, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo