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

Langage PHP Discussion :

Insertion de données impossible et caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    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.

  3. #3
    Modérateur
    Avatar de Kreepz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 681
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) VALUES ("'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")';
    Pensez à regarder nos cours et tutoriels PHP ainsi que notre FAQ PHP avant de poser votre question!
    Un message vous a aidé, n'oubliez pas le

  4. #4
    Membre chevronné Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($insertion) or die(mysql_error());
    Tu pourras voir tes éventuelles erreurs SQL.

  5. #5
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut
    L'erreur peur venir à mon avis des slashes...

    Quote auparavant tes variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre=addslashes($titre);
    ....

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    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.

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    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

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    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 +.

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    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)

Discussions similaires

  1. Lecture de données avec des caractères spéciaux
    Par Softdaemon dans le forum Administration
    Réponses: 0
    Dernier message: 08/07/2011, 11h27
  2. insertion de données impossible
    Par fripette dans le forum Requêtes
    Réponses: 7
    Dernier message: 02/07/2008, 16h18
  3. [MySQL] Insertion des données avec les caractères spéciaux
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/05/2008, 12h16
  4. [Oracle] Insertion de données comportant des caractères accentués
    Par elzebore dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/11/2007, 20h44
  5. [SQL2]Insertion de caractères spéciaux
    Par willowII dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/10/2004, 16h33

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