Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 07/06/2011, 10h03   #1
Invité de passage
 
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 0
Points : 0
Par défaut Insertion de données impossible et caractères spéciaux

Bonjour à tous,

Je suis en train de faire une petite application web qui référence les livres d'une bibliothèque privée. J'ai donc créé une base de données ("bibliotheque") qui contient une table ("livres") avec tous les champs nécessaires. Et évidemment ma page web est un formulaire avec tous ces champs pour entrer les données. Jusque-là pas de souci.
L'ennui, c'est que mon script PHP qui contient la commande SQL d'insertion automatique des données dans la table via le formulaire ne fonctionne pas (rien ne s'enregistre). Pourtant je n'ai pas de retour de "parse error". Je ne vois donc vraiment pas où peut se situer l'erreur. Je vous soumets donc mon code, si quelqu'un pouvait me dire ce qui ne va pas :

Script PHP :
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
32
33
34
35
36
37
38
 
<?php
/*On récupère les valeurs entrées par l'utilisateur :*/
$titre=$_POST['titre'];
$auteur=$_POST['auteur'];
$editeur=$_POST['editeur'];
$genre=$_POST['genre'];
$autre_genre=$_POST['autre_genre'];
$resume=$_POST['resume'];
 
/*Vérification de l'existence de la variable "$_POST[]" :*/
if (isset($_POST['Valider']))
{
	/*Connexion au serveur :*/
	$id_sql=mysql_connect("127.0.0.1","user","password");
	if($id_sql)
	{
		/*Connexion à la base de données "bibliotheque" :*/
		$ok=mysql_select_db("bibliotheque",$id_sql);
		if($ok)
		{
			/*Insertion des données dans la table "livres" :*/
			$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) VALUES ("","'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")';
			/*On lance la requête :*/				
			mysql_query($insertion);
		}		
		else 
		{
			echo 'Echec de connexion à la base "bibliotheque"';
		}
	}
	else 
	{
		echo "Echec de connexion au serveur";
	}
	mysql_close();
}
?>
Et l'appel dans la page web :
Code :
1
2
 
<form method="post" action="insertion_table.php" name="formulaire1">
Je veux juste préciser que dans le script, la valeur vide "" (VALUES("",.....)) est mise volontairement : c'est le champ ID auto-incrémenté (mais peut-être il ne faut pas le mettre ?).

Un très grand merci pour votre aide.
sam86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h29   #2
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 500
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 500
Points : 398
Points : 398
Idée comme ça,

Tu inséres des caractères spéciaux, par exemple dans "resumé" ?

Moi je passerais un coup de html_entities ou utf8_decode quand tu récupéres tes $_POST et éviter tout soucis de caractères spéciaux.
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h35   #3
Membre habitué
 
Avatar de Ozeil
 
Homme Léo LR
Étudiant
Inscription : juin 2011
Messages : 81
Détails du profil
Informations personnelles :
Nom : Homme Léo LR
Âge : 19
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 81
Points : 124
Points : 124
Code :
1
2
/*Insertion des données dans la table "livres" :*/
			$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) VALUES ("","'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")';
Pour ton champs auto incrémenté si tu ne le précise pas dans les parenthèse avant le values tu ne doit pas mettre les guillemets dans le VALUES:

Code :
$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) VALUES ("'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")';
Ozeil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h38   #4
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Bonjour,

Tu as une erreur au niveau de ta requête : tu fais une insertion sur 6 champs et tu précise 7 valeurs (même si la première est vide).
Vu que ton id est en auto-increment, pas besoin de lui donner une valeur.

Essaye ceci :

Code :
1
2
3
4
/*Insertion des données dans la table "livres" :*/
$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) VALUES ("'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")';
/*On lance la requête :*/				
mysql_query($insertion);

De plus, tu peux rajouter :

Code :
mysql_query($insertion) or die(mysql_error());
Tu pourras voir tes éventuelles erreurs SQL.
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 11h47   #5
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
L'erreur peur venir à mon avis des slashes...

Quote auparavant tes variables :

Code :
1
2
$titre=addslashes($titre);
....
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/06/2011, 14h23   #6
Invité de passage
 
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 0
Points : 0
Merci pour vos réponses. J'ai suivi vos conseils et modifié ma requête, et ça marche.
@bob633 : oui j'ai des caractères spéciaux dans mon textarea et dans mes champs texte. Donc maintenant mes données s'enregistrent dans la table, mais les caractères accentués ne sont pas pris en compte (hiéroglyphes). J'ai pas bien compris ce que tu me dis de mettre dans mon script pour faire reconnaître les caractères spéciaux (je débute en php). D'autre part, j'ai créé ma base de données avec l'enregistrement par défaut (utf8_general_ci), est-ce que ça vient de ça ? Et auquel cas quel enregistrement faut-il mettre ?
Merci d'avance pour vos réponses.
sam86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 14h44   #7
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 500
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 500
Points : 398
Points : 398
Doc pour html_entities et pour ut8_decode

Après il se peut qu'il convertisse déjà tes caractéres en HTML, ça dépend ce que tu appelles "caractères bizzare", ils sont vraiment bizzares ou du genre &eacute; ou autre ?

Si tu utilises seulement html_entities ça ira. En fait lorsqu'il va récupérer ton $_POST, il va automatiquement convertir les caractéres spéciaux en HTML
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 16h02   #8
Invité de passage
 
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 0
Points : 0
Citation:
Envoyé par bob633 Voir le message
Doc pour html_entities et pour ut8_decode

Après il se peut qu'il convertisse déjà tes caractéres en HTML, ça dépend ce que tu appelles "caractères bizzare", ils sont vraiment bizzares ou du genre &eacute; ou autre ?

Si tu utilises seulement html_entities ça ira. En fait lorsqu'il va récupérer ton $_POST, il va automatiquement convertir les caractéres spéciaux en HTML

Oui, ils étaient bizarres: tous les "é" par exemple étaient rendus par "é" dans ma base de données. Mais en fait ça venait bien de l'interclassement. J'ai mis l'encodage de mes fichiers html en ISO-8859-1, et changé l'interclassement par défaut de ma base de données pour le LATIN1_SWEDISH_CI, ET ÇA MARCHE IMPECCABLE. Donc pas besoin de se compliquer la vie avec un script. Je poste ma solution, au cas où ça pourrait servir à quelqu'un.

Merci encore d'avoir essayé de m'aider.
A +.
sam86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 09h25   #9
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 500
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 500
Points : 398
Points : 398
Citation:
Envoyé par sam86 Voir le message
Oui, ils étaient bizarres: tous les "é" par exemple étaient rendus par "é" dans ma base de données. Mais en fait ça venait bien de l'interclassement. J'ai mis l'encodage de mes fichiers html en ISO-8859-1, et changé l'interclassement par défaut de ma base de données pour le LATIN1_SWEDISH_CI, ET ÇA MARCHE IMPECCABLE. Donc pas besoin de se compliquer la vie avec un script. Je poste ma solution, au cas où ça pourrait servir à quelqu'un.

Merci encore d'avoir essayé de m'aider.
A +.
Sauf que la norme ISO est vraiment ...

Passe tout en UTF-8, ça t'évitera vraiment des mauvaises surprises par la suite

Et tu sais, ma solution c'est pas un script .. juste une fonction déjà toute faite à rajouter à ton code :
$var = $_POST['var2'] serait juste remplacer par $var = html_entities($_POST['var2'],param1, param2)
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h26.


 
 
 
 
Partenaires

Hébergement Web