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

PHP & Base de données Discussion :

insertion donnée saisi par HTML [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut insertion donnée saisi par HTML
    bonjour
    je voudrais faire une page php qui permet de faire l'insertion des données a partir d'une interface graphique
    ce que j'ai pensé a faire c'est de faire la lecture de donnée a insérer dans la table souhaiter a partir d'une interface HTML comme suit :
    Code html : 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
    <h2>nouveau etudient</h2>
    		<i>numero de carte :</i>
    		<form cible="saisi.php" method="post">
    		<input type="int(11)" name="carte" /> <input type="submit" value="valider"/>
    		</form>
    		<i>nom d'utilisateur</i>
    		<form cible="saisi.php" method="post">
    		<input type="text" name="prenom" /> <input type="submit" value="valider"/>
    		</form>
    		<i>adrsse</i>
    		<form cible="saisi.php" method="post">
    		<input type="text" name="adresse" /> <input type="submit" value="valider"/>
    		</form>
    		<i>classe</i>
    		<form cible="saisi.php" method="post">
    		<input type="int(11)" name="classe" /> <input type="submit" value="valider"/>
    		</form>
    		<i>specialite</i>
    		<form cible="saisi.php" method="post">
    		<input type="text" name="specialite" /> <input type="submit" value="valider"/>
    		</form>

    aprés avoir fait la saisi des données dans la page j'ai utiliser la commande insert pour insérer les données ainsi saisi dans la table etudient comme suit :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete='insert into etudient values ($_post['carte'],$_post['prenom'],$_post['adresse'],$_post['classe'],$_post['specialite'])';
    		mysql_query ($requete);

    le code que vous voyer ici déclanche une érreur au niveau de la commande php insert
    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\tests\saisi.php
    es ce que quelqu'un pourrais me dire la cause de la panne svp
    mais sinon y a t'il un moyen plus efficace de résoudre les choses
    merci

  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
    Par défaut
    Tu as a peu près tout faux
    - c'est "etudiant" pas "etudient"
    - c'est $_POST pas $_post
    - il faut encadrer tes mysql valeurs avec des guillemets
    - il faut utiliser mysql_real_escape_string() pour protéger tes chaines
    - les variables ne sont pas interpretées a l'intérieur d'une chaine à guillemets simples
    - il faut de toute facon sortir tes variables de la chaine que les guillemets de la clef du tableau ne font pas bon ménage avec ceux de ta chaine de requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete="insert into etudiant values ('" . mysql_real_escape_string($_POST['carte']) . "','" . mysql_real_escape_string($_POST['prenom']) . "','" ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    poff c'est moi qui a fait tous ces erreur ?!

    Citation Envoyé par sabotage Voir le message
    - il faut encadrer tes mysql valeurs avec des guillemets
    a vrai dire je comprend pas quand je doit utiliser les guillemets simples et quand je doit utiliser les doubles guillemets
    es ce que tu peux me donner une idée sur la différence d'utilisation entre les deux (guillemet et double guillemet)
    Citation Envoyé par sabotage Voir le message
    - il faut utiliser mysql_real_escape_string() pour protéger tes chaines
    que veux tu dire par protéger les chaines stp
    je veux dire es ce qu'il y as des cas précis ou on doit avoir recourt a la fonction escape_string()
    Citation Envoyé par sabotage Voir le message
    - les variables ne sont pas interpretées a l'intérieur d'une chaine à guillemets simples
    - il faut de toute facon sortir tes variables de la chaine que les guillemets de la clef du tableau ne font pas bon ménage avec ceux de ta chaine de requete
    c'est vrai ? mais ...
    comment je peux faire l'insertion des données alors ?
    merci

  4. #4
    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
    Par défaut
    es ce que tu peux me donner une idée sur la différence d'utilisation entre les deux (guillemet et double guillemet)
    En fait en PHP, on peut ecrire comme on le sent, même si les deux ne font pas la meme chose comme on le verra plus bas.

    Si je dois ecrire des ', je vais les mettre dans une chaine " et inversement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo 'ceci est "bien"';
    // ceci est "bien"
     
    echo "ceci est 'bien'";
    // ceci est 'bien'
    Et si on veut mettre les deux, on "echappe" avec \
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'ceci est "bien" et \'bon\'';
    // ceci est "bien" et 'bon'
    Le choix repose donc sur la norme de ce que tu écris :
    Par exemple le HTML utilise des ", tandis que SQL utilise des '

    bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="text" />';
    pas bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<input type='text' />";
    bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO table VALUES ('toto')";
    pas bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'INSERT INTO table VALUES ("toto")';
    Maintenant si je veux mettre une variable dans tout ça ?

    Il faut déjà se souvenir que les variables ne sont pas interpretés entre les guillemets simples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $a = 10;
    echo 'ma valeur est : $a';
    // affiche ma valeurs est : $a
     
    echo "ma valeur est : $a";
    // affiche ma valeurs est : 10
    On peut aussi sortir la variable de la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "ma valeur est : " . $a
    // ma valeur est : 10
     
    echo "ma valeur est : '" . $a . "'"
    // ma valeur est : '10'
    Mais alors ? si j'introduis une variable qui contient des ' dans une chaine à apostrophes, ca va être de la bouillie ?
    Et oui, démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $valeur = "c'est formidable";
    $sql = "INSERT INTO table VALUES ('" . $valeur . '");
    // INSERT INTO table VALUES ('c'est formidable')
    // on voit que le 'c' est encadré et donc consideré comme une chaine à lui tout seul, le reste de la chaine est orphelin
    On utilise donc des fonctions d'échappement, qui protégeront les signes pouvant poser problème.
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $valeur = "c'est formidable";
    $sql = "INSERT INTO table VALUES ('" . mysql_real_escape_string($valeur) . '");
    Il ne faut pas oublier que c'est en utilisant ce principe d'interruption de la chaine que des personnes malintentionné pirate les sites ; il est essentiel de protéger les chaines dans les requetes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    ok
    mais je ne comprends pas la différence entre ces deux manières de faire:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $valeur = "c'est formidable";
    $sql = "INSERT INTO table VALUES ('" . $valeur . '");
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $valeur = "c'est formidable";
    $sql = "INSERT INTO table VALUES ('" . mysql_real_escape_string($valeur).'")";
    j'ai vue que vous avez utilisé des guillemets triples dans la commande insert !!
    quand on doit utiliser ce genre de guillemet ?
    es ce que il vaut mieux utiliser la deuxième commande pour des besoins de sécurités on cas ou la variable $valeur contient trop d'apostrophe ?
    merci

  6. #6
    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
    Par défaut
    mais je ne comprends pas la différence entre ces deux manières re de faire:
    mysql_real_escape_string() ajoute les antislash sur les caractères qui doivent être protégées.
    es ce que il vaut mieux utiliser la deuxième commande pour des besoins de sécurités on cas ou la variable $valeur contient trop d'apostrophe ?
    En fait ce n'est pas ça : si la variable contient meme un seul guillemet et que tu ne l'echappes pas, la requête ne fonctionnera pas.
    La question de la sécurité c'est que quelqu'un peut utiliser ce manquement pour détourner ta requête.
    C'est ce qu'on appelle "injection SQL".

    j'ai vue que vous avez utilisé des guillemets triples dans la commande insert !!
    Ce n'est pas un guillemet triple c'est une chaine contenant un guillemet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo '"';
    // affiche "
    echo "'";
    // affiche '
    echo "'" . $a . "'";
    // affiche '10'
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/07/2011, 15h44
  2. Réponses: 11
    Dernier message: 07/02/2009, 01h31
  3. insertion de donnée saisie par le client dans la base de données du serveur
    Par modafine dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 22/09/2008, 12h46
  4. [Excel] Intégrer au fichier Excel des données saisies par formulaire
    Par drogba72 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 21/05/2008, 11h13
  5. [HTML] Récupérer données saisies par Utilisateur
    Par jacques13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/01/2007, 21h55

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