Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2007, 15h43   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
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 :
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
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2007, 16h01   #2
Membre Expert
 
Avatar de guigui5931
 
guillaume defrain
Inscription : avril 2006
Messages : 1 667
Détails du profil
Informations personnelles :
Nom : guillaume defrain
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2006
Messages : 1 667
Points : 2 099
Points : 2 099
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']?
__________________
autant l'hiver éclate que l'hétéroclite
le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre
guigui5931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 09h00   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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 :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 09h28   #4
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à 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.

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 :
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");
__________________
Such is the situation in our Fallen Galaxy
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 09h36   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h36   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
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 :
	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. ..
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h38   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
un . et un ' en trop a la fin:
Code :
if(mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error());
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h43   #8
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
Code :
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 :
Citation:
Parse error: syntax error, unexpected T_LOGICAL_OR in C:\wamp\www\nimportequoi.com\validation.php on line 20
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h54   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 :
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());
}
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h57   #10
Membre Expert
 
Avatar de guigui5931
 
guillaume defrain
Inscription : avril 2006
Messages : 1 667
Détails du profil
Informations personnelles :
Nom : guillaume defrain
Âge : 25
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2006
Messages : 1 667
Points : 2 099
Points : 2 099
Il me semble qu'il manque encore des parenthèse
Code :
1
2
 
if((mysql_query($sql) !=false) or die ('echec lors de l\'envoi du message : '.$sql.' : '.mysql_error()));
__________________
autant l'hiver éclate que l'hétéroclite
le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre
guigui5931 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h59   #11
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
Code :
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 :
Citation:
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?
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h01   #12
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h05   #13
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
voici ma table :

Code SQL :
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
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h10   #14
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 :
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;
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h11   #15
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
ok merci je vais essayer de suite
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h14   #16
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h16   #17
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
Ca me refait le même problème qu'hier avec la table. Lorsque je mets auto_increment : il m'affiche ceci :

Citation:
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
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h20   #18
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 15h22   #19
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
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
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 16h13   #20
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 67
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2007
Messages : 67
Points : 11
Points : 11
Je viens d'essayer de mettre cette partie online sur mon site je voudrais savoir un truc :
Code :
$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)
lynxxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h21.


 
 
 
 
Partenaires

Hébergement Web