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 :

insertions vides dans formulaire


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut insertions vides dans formulaire
    Bonjour tout le monde, et j'espere que je poste au bon endroit.
    un truc me rend dingue et fou, ca fait des semaines que j'essaie de reperer l'erreur mais rien a faire.
    j'ai mis en ligne un formulaire de 5 champs en utilisant jquery/Ajax. quand je regarde la base pour voir s'il y a eu des nouvelles inscription, je vois de nouveaux enregistrement mais vide!!
    voici a quoi ressemble le formulaire: moroccan-arts.fr
    la verification de la saisie se fait avec javascript. si javascript est desactivé, le formulaire ne peut etre soumis!
    j'ai testé avec safari, firefox sur Mac, et ie6/7/8, chrome et firefox sur windows et ca marche bien...
    voici les parties essentielles de mon code:
    page html:
    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
    <html>
    ...
     
    <script type="text/javascript">
    	// Form validator & registration
    	$("#form_register").validator({ 
    		lang: 'en',
    		position: 'top left', 
    		offset: [1, 30],
    		message: '<div><em/></div>' // em element is the arrow
    	}).submit(function(e) {
    		if (!e.isDefaultPrevented()) { // client-side validation OK.
    			return form_insert(this, "/account/ajax/register-home.php");			
    		}
    	});
    });
    </script>
     
    <form id="form_register" method="post">
    	<p><input type="text" name="f_name" size="40" maxlength="40" required="required"></p>
    	<p><input type="text" name="l_name" size="40" maxlength="40" required="required"></p>
     
    	<p><button type="submit" class="btn"><span>Valider</span></button></p>
    </form>
     
    ...
    </html>
    la fonction js form_insert():
    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
    function form_insert(form, url) {
    	$('button').attr('disabled','true'); //desactiver le bouton pour eviter une double saisie
     
    	form = $(form).fadeTo(300, 0.6);//appliquer un fade pdt la requete
     
    	$.post(url, form.serialize(), function(msg) {
    		if(msg == "ok") { // si OK
    			Afficher message
    		}
    		else { // si requete echoue
    			Afficher messsage d erreur
    		}
    	});
    	return false; // empecher la soumission du formulaire
    }
    le ficher 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
    <?php
    require_once($_SERVER['DOCUMENT_ROOT']."/inc/con-db.php");
     
    $civility = $_POST['civility'];
    $f_name = strip_tags(trim($_POST['f_name']));
    $l_name = strip_tags(trim($_POST['l_name']));
    $email = trim($_POST['email']);
    $id_country = intval($_POST['id_country']);
    $iso_lang = $_POST['iso_lang'];
     
    $ins = $dbh->prepare("INSERT INTO directory (civility, f_name, l_name, email, id_country, iso_lang) VALUES (?, ?, ?, ?, ?, ?)");
    if($ins->execute(array($civility, $f_name, $l_name, $email, $id_country, $iso_lang))) echo "inserted"; // if the INSERT succeeded
    else {
    	echo "msg d erreur";
    	$db_error = $ins->errorInfo();
    	report_mysql_error(__FILE__, __LINE__, $db_error[2]);
    	exit();
    }
     
    ?>
    dites moi svp ce qui ne va pas
    merci infiniment

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Et t'as essayé de faire simple, sans le Ajax pour le moment, afin de cerner l'origine du pb ?

    si javascript est desactivé, le formulaire ne peut etre soumis!
    C'est normal puisque c'est ton JS qui fait le submit à la bonne page.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    MErci pour ta reponse.

    Et t'as essayé de faire simple, sans le Ajax pour le moment, afin de cerner l'origine du pb ?
    Non j'ai pas essayé, et ca m'embete un peu de devoir mettre Ajax de conté!!
    sinon, tu ne vois pas ce qui peut clocher au niveau de mon script??

    C'est normal puisque c'est ton JS qui fait le submit à la bonne page.
    oui je sais, c'etait pour eviter qu'on me dise que peut etre le client a desactiver javascript.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    Par défaut
    Citation Envoyé par redah75 Voir le message
    Non j'ai pas essayé, et ca m'embete un peu de devoir mettre Ajax de conté!!
    Séb. t'a dit "pour le moment"

    Pour débugguer un script la meilleure solution est souvent de le décomposer en blocs distincts pour mieux voir où chercher...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Bonsoir ABCIWEB, j'allais justement envoyer un message et t'as ete plus rapide que moi
    je voulais juste vous informer que j'ai rajouter ce bout de code tout au debut du fichier php afin d'essayer de déceler l'erreur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(empty($_POST['civility']) || empty($_POST['f_name']) || empty($_POST['email']) || empty($_POST['id_country']) || empty($_POST['iso_lang'])) {
    	echo "Un problem est survenu...";
    	send_email(); // un mail m'est envoyé
    }
    j'attends pour voir ce que cela donne

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    j'attends pour voir ce que cela donne
    Tiens-nous au courant ;-)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Tiens-nous au courant ;-)
    biensur

    mais sinon mon code vous parait correct??

    une autre petite question, devrais je toujours mettre strip_tags() pour le traitement des variables ou est ce inutile?

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par redah75 Voir le message
    mais sinon mon code vous parait correct??
    Pas d'erreur évidente repérée.

    devrais je toujours mettre strip_tags() pour le traitement des variables ou est ce inutile?
    Perso je mets un msg d'erreur si des caractères interdits sont saisis, et j'échappe les éventuels caractères spéciaux à l'affichage.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    Par défaut
    Citation Envoyé par redah75 Voir le message
    une autre petite question, devrais je toujours mettre strip_tags() pour le traitement des variables ou est ce inutile?
    Tu devrais n'utiliser cette fonction qu'en cas de besoin, et là je ne vois pas à quoi elle sert. En même temps elle ne devrait pas déranger car à priori il ne devrait pas y avoir de balises php ou html dans un nom ou prénom.

    Mais en général, comme l'a dit Seb., on protège les variables à l'affichage, ce qui permet d'éviter de limiter les possibilités d'expression lors de la saisie.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Perso je mets un msg d'erreur si des caractères interdits sont saisis, et j'échappe les éventuels caractères spéciaux à l'affichage.
    Comment le ferais tu? je veux dire, comment detecteras tu les caracteres interdits?

    Tu devrais n'utiliser cette fonction qu'en cas de besoin, et là je ne vois pas à quoi elle sert. En même temps elle ne devrait pas déranger car à priori il ne devrait pas y avoir de balises php ou html dans un nom ou prénom.
    je les mets pour eviter qu'un mal veillant mette le code d'une image par exemple (<img src="http://site.com/img.gif") au lieu de mettre son prenom et aussi afin de garder une base propre.
    jutilise aussi toujours la fonction trim()

  11. #11
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par redah75 Voir le message
    Comment le ferais tu? je veux dire, comment detecteras tu les caracteres interdits?
    Plusieurs méthodes : strpos( ), preg_match( ), etc.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    d'accord, merci
    vous tiens au courant du formulaire...

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    Par défaut
    Citation Envoyé par redah75 Voir le message
    je les mets pour eviter qu'un mal veillant mette le code d'une image par exemple (<img src="http://site.com/img.gif") au lieu de mettre son prenom et aussi afin de garder une base propre.
    jutilise aussi toujours la fonction trim()
    Oui mais si comme dit plus haut tu protège le code à l'affichage avec htmlspecialchars ou htmlentities aucune image ne pourra être affichée mais simplement le texte qui est rentré ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom = '<img src="mon_image.jpg" />';
    echo htmlspecialchars($nom);
    S'il n'y avait pas cette fonction en place dans ce forum je ne pourrais pas écrire la ligne qui suit : "en html on insert une image avec le code suivant : '<img src="mon_image.jpg" />'"

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    eh ben ce que je craignais le plus s'est produit! j'ai encore eu un autre enregistrement vide et ca me fait ch*e*!! ca en fait un peu trop!
    la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(empty($_POST['civility']) || empty($_POST['f_name']) || empty($_POST['email']) || empty($_POST['id_country']) || empty($_POST['iso_lang'])) {
    	report_mysql_error(...);
    }
    a été executée et j'ai recu un mail. je ne vois vraiment pas ce qui cloche avec mon formulaire. c'est ca mon javascript/ ajax qui foire, autant le rectifier tout de suite car ca foutra en l'air tout le site web....
    please help!

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    ahhhh! une revelation! ne serait il pas les robots re referencement google ou autres qui executent le fichier php????

    pour info, j'ai placé un fichier robots.txt à la racine du site avec ces 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    User-agent: *
    Disallow: /chemin/ajax

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    oh lalaaa, c'est deprimant, j'ai recu 3 mails ce matin. ou bien le robots.txt ne fonctionne pas bien, ou bien c'est un petit malin qui essaie de reperer des failles sur mon site...
    vous n'avez aucune idee de ce que cela peut etre??

  17. #17
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Montre-nous le script PHP mis à jour stp.

  18. #18
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    la verification de la saisie se fait avec javascript. si javascript est desactivé, le formulaire ne peut etre soumis!
    Suffit qu'un robots à spam est can ta page et est trouvé ton adresse d'enregistrement (/account/ajax/register-home.php) ou simplement qu'un petit malin s'amuse.
    JS ou pas je peux appeler la page PHP d'inscirption.

    Plusieurs choses à faire :

    Pour tout appel ajax , tu devrais mettre en place un token , pour te protéger des failles csrf. Dans le principe à partir du moment ou tu affiche un formulaire , tu génères un id unique aléatoire que tu enregistres en session. Au moment du traitement de ce formulaire , si le token fournit en paramètre n'est pas le même que celui en session tu refuses le traitement.
    Voir ici pour un exemple

    Au début de chaque traitement tu vérifies que tu as des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST) && !empty($_POST)) {
        //DO
    }
    Si tous tes champs sont obligatoires tu peux utiliser array_map pour vérifier que tous les champs $_POST sont bien remplis

    Avant de lancer ton execute() vérifie que le tableau de paramètre n'est pas vide. C'est redondant avec le test précédent mais ca tepermettra de vérifier que la boulette ne vient pas de toi.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Montre-nous le script PHP mis à jour stp.
    mon script PHP est toujours le meme, je n'ai rien changé mis a part le test pour verifier si toutes les variables existent...

    Suffit qu'un robots à spam est can ta page et est trouvé ton adresse d'enregistrement (/account/ajax/register-home.php) ou simplement qu'un petit malin s'amuse.
    JS ou pas je peux appeler la page PHP d'inscirption.
    j'ai justement du nouveau a vous annoncer.
    j'ai verifié les fichiers log, j'ai reperé 2 adresses ip au moment de l'insertion vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    66.249.66.202 - - [06/Nov/2010:17:46:06 +0100] "GET /account/ajax/register-home.php HTTP/1.1" 200 209 www.moroccan-arts.com "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"
     
    66.249.71.217 - - [01/Nov/2010:06:00:29 +0100] "GET /inc/ajax/account/register-home.php HTTP/1.1" 200 143 www.moroccan-arts.co.uk "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"
    comme vous pouvez le constater, ca correspond au robot crawl de google
    une whois de ces 2 adresses ip confirme que ca vient de google

    Pour tout appel ajax , tu devrais mettre en place un token...
    tu as raison et merci beaucoup pour ce conseil tres tres precieux.
    je vais revoir mes scripts afin de les ameliorer, heureusement que c'est le debut et que j'ai que quelque pages...
    j'aurais 2 questions a te poser stp:
    1- apres avoir verifier le token et proceder a l'insertion des donnees, devrais-je supprimer la variable de session apres?
    2- dois je utiliser un token uniquement pour les appels ajax qui contiennent un INSERT? car j'ai d'autres appels avec des UPDATES ou SELECT

    Mille merci

  20. #20
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 347
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 347
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par redah75 Voir le message
    mon script PHP est toujours le meme, je n'ai rien changé mis a part le test pour verifier si toutes les variables existent...
    Ah Ok, et bien bon courage !

Discussions similaires

  1. Insertion PDF dans Formulaire
    Par jeff1196 dans le forum IHM
    Réponses: 14
    Dernier message: 03/03/2008, 22h55
  2. insertion pdf dans formulaire
    Par pkrvz dans le forum VBA Access
    Réponses: 0
    Dernier message: 02/03/2008, 21h33
  3. Réponses: 0
    Dernier message: 08/11/2007, 20h09
  4. Insertion GIF dans formulaire
    Par STANDBOY dans le forum IHM
    Réponses: 1
    Dernier message: 26/12/2006, 16h56
  5. Clé étrangère vide dans formulaire
    Par Shekhmet dans le forum Access
    Réponses: 6
    Dernier message: 29/05/2006, 21h15

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