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 :

[SQL] Insertion ds Bdd


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut [SQL] Insertion ds Bdd
    Bonjour chers développeurs,

    je me permets de poster un message sur le forum car je ne trouve pas la réponse a mon probleme.

    Voici le code, je souhaiterais juste qu il rentre le message ds ma bdd mais il rentre a chaque fois dans le else :s, si vous avez une idéee, n'hésitez pas
    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
    <?php 
     
     
    	if (empty($_POST['nom']))
    		die ("Veuillez remplir le champ nom");
     
    	if (empty($_POST['prenom'])) 
    		die ("Veuillez remplir le champ prenom");
     
    	if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$_POST['mail']))
    		die("adresse email non valide");
     
    	if (empty($_POST['message']) )
    		die ("Veuillez remplir le champ message");
     
     
    	$liendb= mysql_connect("localhost","root","");
    	mysql_select_db ("toutetni");
    	$sql ="INSERT INTO contact (nom, prenom, mail, message) VALUES 
    	('".$_REQUEST['nom']."','".$_REQUEST['prenom']."','".$_REQUEST['mail']."','".$_REQUEST['message']."')";
     
     
    	if(mysql_query($sql) !=false)
    		print ("Votre message à bien été envoyé");
    	else
    		print("echec lors de lenvoi du message");
     
    mysql_close($liendb);
     
     
    ?>
    Merci d'avance

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Je ne sais pas si ça un lien mais tu teste que $_POST['nom'] n'est pas vide et tu essaye d'inserer $_REQUEST['nom'], ça ne devrait pas être $_POST['nom']?

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Il ya des fortes chances pour que guigui ait raison : si tu testes $_POST['nom'] et que tu insères $_REQUEST['nom'], il y a un truc qui cloche.

    Pour plus de précisions sur le problème utilise or die(mysql_error()) à la place de ton if/else :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($sql) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Pourtant c'est étonnant parce que REQUEST c'est une global qui réunit les POST, GET et COOKIE. Donc à moins d'un conflit ça ne devrait pas poser de problème.

    Par contre tu devrais effectivement utilisé après ton mysql_query un or die(mysql_error()) , donc faire quelque chose dans ce genre :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql ="INSERT INTO contact (nom, prenom, mail, message) VALUES 
    	('".$_REQUEST['nom']."','".$_REQUEST['prenom']."','".$_REQUEST['mail']."','".$_REQUEST['message']."')";
     
    $ret = mysql_query($sql) or die(mysql_error());
     
    if( $ret )
    	print ("Votre message à bien été envoyé");
    else
    	print("echec lors de lenvoi du message");

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par Asmodean
    Pourtant c'est étonnant parce que REQUEST c'est une global qui réunit les POST, GET et COOKIE. Donc à moins d'un conflit ça ne devrait pas poser de problème.
    Je l'ignorais, mais c'est bon à savoir.
    N'empêche, à la place de lynxxx, si les variables sont passées par post, j'utiliserais $_POST dans la requête aussi, juste au cas où
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut Merci
    Bonjours tout le monde, tout d'abord je vous remercie pour vos réponses, c'est très aimable d'aider un petit débutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if(mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error().');
    J'ai bien mis le or die mais maintenant il me met une parse error... je cherche je cherche. ..

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    un . et un ' en trop a la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    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
    <?php 
     
    	if (empty($_POST['nom']))
    		die ("Veuillez remplir le champ nom");
     
    	if (empty($_POST['prenom'])) 
    		die ("Veuillez remplir le champ prenom");
     
    	if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$_POST['mail']))
    		die("adresse email non valide");
     
    	if (empty($_POST['message']) )
    		die ("Veuillez remplir le champ message");
     
    	$liendb= mysql_connect("localhost","root","");
    	mysql_select_db ("toutetni");
    	$sql ="INSERT INTO contact (nom, prenom, mail, message) VALUES 
    	('".$_POST['nom']."','".$_POST['prenom']."','".$_POST['mail']."','".$_POST['message']."')";
     
    	if(mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
     
    mysql_close($liendb);
     
     
    ?>
    et l'erreur :
    Parse error: syntax error, unexpected T_LOGICAL_OR in C:\wamp\www\nimportequoi.com\validation.php on line 20

  9. #9
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    graaa pardon mal lu, si tu mets un "or die" tu mets pas de if justement, et si tu mets un if() tu mets pas le mot clé "or"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mysql_query($sql) die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
     
    // ou
    if(mysql_query($sql) ==false)
    {
    die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
    }

  10. #10
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Il me semble qu'il manque encore des parenthèse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error()));

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    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
    <?php 
     
    	if (empty($_POST['nom']))
    		die ("Veuillez remplir le champ nom");
     
    	if (empty($_POST['prenom'])) 
    		die ("Veuillez remplir le champ prenom");
     
    	if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$_POST['mail']))
    		die("adresse email non valide");
     
    	if (empty($_POST['message']) )
    		die ("Veuillez remplir le champ message");
     
    	$liendb= mysql_connect("localhost","root","");
    	mysql_select_db ("toutetni");
    	$sql ="INSERT INTO contact (nom, prenom, mail, message) VALUES 
    	('".$_POST['nom']."','".$_POST['prenom']."','".$_POST['mail']."','".$_POST['message']."')";
     
    if(mysql_query($sql) ==false)
    {
    die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
    }
     
    mysql_close($liendb);
     
     
    ?>
    A présent voici mon code mais il me dit ca :
    echec lors de l'envoi du message : INSERT INTO contact (nom, prenom, mail, message) VALUES ('Bloblo','Nico','bloblo@hotmail.com','bloblo blabla') : Duplicate entry '' for key 1
    j'ai mal fais ma bdd?

  12. #12
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Quelle est la structure de ta table?

    j'ai l'impression que tu as un champ que tu ne mets pas a jour dans ton INSERT, est ce que ce champ est bien en autoincrement?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    voici ma table :

    Code SQL : 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
    -- phpMyAdmin SQL Dump
    -- version 2.9.2
    -- http://www.phpmyadmin.net
    -- 
    -- Serveur: localhost
    -- Généré le : Lundi 25 Juin 2007 à 15:04
    -- Version du serveur: 5.0.27
    -- Version de PHP: 5.2.1
    -- 
    -- Base de données: `toutetni`
    -- 
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `contact`
    -- 
     
    CREATE TABLE `contact` (
      `id` varchar(50) NOT NULL,
      `nom` varchar(50) NOT NULL,
      `prenom` varchar(30) NOT NULL,
      `mail` varchar(30) NOT NULL,
      `message` varchar(200) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `contact`
    -- 
     
    INSERT INTO `contact` (`id`, `nom`, `prenom`, `mail`, `message`) VALUES 
    ('', '', '', '', '');

    peut être a cause du ID :s

  14. #14
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Exactement, tu as un champ ID dans ta table mais tu ne l'utilises pas lors de l'insertion donc ça crée une valeur identique pour deux lignes ce qui est interdit (a moins de préciser que tu peux)
    je suppose que tu veux le champ en autoincrement, et pour ca il faut indiquer
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `contact` (
      `id` varchar(50) NOT NULL AUTO_INCREMENT,
      `nom` varchar(50) NOT NULL,
      `prenom` varchar(30) NOT NULL,
      `mail` varchar(30) NOT NULL,
      `message` varchar(200) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    ok merci je vais essayer de suite

  16. #16
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Autant pour moi (la pause déjeuner m'a fait du mal ) ton ID est un varchar donc une chaine de caractère il ne peut pas être de type AUTO_INCREMENT en fait.

    Pourrais-tu donner plus de précision sur le sens du champ ID ? S'il est optionnel il faut enlever le NOT_NULL de sa description qui permet d'avoir un champ vide, sinon il faut que tu dises clairement a quoi il va servir.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    Ca me refait le même problème qu'hier avec la table. Lorsque je mets auto_increment : il m'affiche ceci :

    requête SQL:

    ALTER TABLE `contact` CHANGE `id` `id` VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL AUTO_INCREMENT

    MySQL a réponduocumentation
    #1063 - Incorrect column specifier for column 'id'
    En fait le ID va servir juste a mettre un nombre devant les personnes
    Mais c'est pas super utile, je fais ce site pour m'entrainer et m'améliorer en php ... Y a encore du boulot .
    C'est pas varchar alors?


    EDIT : En int ça passe ^^ Merci

  18. #18
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En règle générale, on utilise que identifiant unique (id) un nombre qu'on place en auto-incrément pour éviter qu'il y en ait 2 identiques (ce qui est quand même le but d'un identifiant unique )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    VOila c'est résolu !! ca s'écrit ds la bdd huhu .
    Un gros merci à koopajah, celira , guigiu et asmoedan pour cette aide . Ca serait sympa de faire bénéficier d'un bonus les personnes aidant les newbe comme moi .
    Encore merci

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 67
    Par défaut
    Je viens d'essayer de mettre cette partie online sur mon site je voudrais savoir un truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liendb= mysql_connect("Nomdemonsite","nomUser","Pass");
    Est ce bien les bonnes valeurs? ou dois-je mettre Nomdemonsite/phpMyadmin/
    J'ai essayé les deux et il me dit :
    echec lors de l'envoi du message : INSERT INTO contact (nom, prenom, mail, message) VALUES ('fsdfsdffs','fsdfsdf','fdsfdsf@fdsfdsf.fds','fsdfsdf') : Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. sql.Date date du jour pour insertion en BDD
    Par vince29 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 08/06/2012, 11h53
  2. SQL insertion en bdd d'une documentation ou video ?
    Par silverfab34 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/05/2010, 09h24
  3. [sql Flash] Lecture BDD dans Flash , INSERT ou UPDATE
    Par Keroik dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/08/2007, 11h20
  4. [VB.NET 2005][SQL SERVER 2005] Pb d'insertion en BdD
    Par jhary07 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/01/2006, 08h53
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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