8791 sujets

Développement web côté serveur, CMS

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 :


/*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 :

<form method="post" action="insertion_table.php" name="formulaire1">


Un très grand merci pour votre aide.
Modifié par sam06 (07 Jun 2011 - 09:22)
déjà ta requête d'insertion est incohérente :
tu cites les colonnes mais tu ne respectes pas cet ordre dans les valeurs
$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) 
VALUES ("","'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")'; 

en effet il y a une valeur de trop au début
VALUES ("",

je pense que ce code ira mieux
$insertion='INSERT INTO livres(titre,auteur,editeur,genre,autre_genre,resume) 
VALUES ("'.$titre.'","'.$auteur.'","'.$editeur.'","'.$genre.'","'.$autre_genre.'","'.$resume.'")'; 


Ps : je me mélange toujours les pinceaux entre " et ' , or cela a une importance en php ...
Merci de m'avoir répondu ; le code que tu me donnes je l'ai essayé avant celui-ci, mais ça ne marche pas plus. La 1ere valeur "" n'est pas là pour rien : c'est le champ ID auto-incrémenté, et j'ai vu ce code sur des tutos. Est-ce que si je ne mets pas "" ça va quand même m'incrémenter mon ID ? Merci de me répondre.
Bonjour Iddsoft et merci de m'avoir répondu.

Ce n'est pas ce code-là qui m'a servi de modèle, c'est un autre dans le même genre. Oui ma base de données "bibliotheque" existe, ainsi que la table "livres" (vérifications dans phpmyadmin). Je ne comprends pas ce qui ne va pas ; en plus je n'ai aucun parse error. Une idée ? As-tu besoin d'autres codes (creation de la table, etc...) ?
Et si tu mettais des "or die ..." comme dans le script dont je te parlais. Cela te permettrait peut-être de mieux cerner le problème.

J'ai testé le script que je t'avais proposé : il fonctionne parfaitement.
Modifié par lddsoft (07 Jun 2011 - 11:22)
mets un echo $insertion avant la requête histoire de voir si tu as les bonnes valeurs
            /*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.'")'; 
// affichage chaine requete
echo "Chaine de requete : " . $insertion;
            /*On lance la requête :*/                 
            mysql_query($insertion); 


oui si tu mets rien pour le champ auto incrementé, ça s'incrémente tout seul, pas besoin de le mettre et si tu y tiens mets le nom de colonne alors ... ps : teste ton insertion sous phpmyadmin pour être sur de la syntaxe ...
Merci à vous 2 pour vos réponses.

@Iddsoft: merci pour le code, maintenant ça fonctionne.

Cependant, lorsque les données s'enregistrent dans la table, ça ne prend pas les caractères accentués (hiéroglyphes). Ma base de données s'est créée avec l'interclassement par défaut (utf8_general_ci), est-ce que ça vient de ça ? Et auquel cas quel interclassement faut-il mettre (j'ai pas trouvé pour le français) ? Merci d'avance pour votre aide.
ah il faut que tu sois cohérent entre l'encodage de tes fichiers php, de tes pages html et ta base de données .

Le plus simple est d'avoir le même encodage dans les trois.
utf8 te permet d'avoir tous les caractères du monde entier ... à condition d'avoir la bonne police bien sûr.

Sinon il faudra jouer des fonctions d'encodage/décodage utf8

Attention sous windows certains éditeurs enregistrent les fichiers en utf8 avec BOM , ce qui peut poser des problèmes. Il faut choisir utf8 sans BOM si l'éditeur le permet.

[Edit] Je viens de galérer toute la matinée à cause d'un fichu script php enregistré en utf8 avec BOM, pour les includes php c'est pas top ... gedit sous debian ne sait pas virer le BOM ...
Modifié par Arialia (07 Jun 2011 - 14:36)
Mes fichiers html sont encodés en utf8, et ma base de données aussi (utf8_general_ci). D'après ce que tu me dis, je ne devrais pas avoir de problème avec les caractères accentués ? Je ne comprends pas ce qui se passe.
Bon, puisque personne ne sait, je me réponds tout seul :

sam06 a écrit :

Cependant, lorsque les données s'enregistrent dans la table, ça ne prend pas les caractères accentués (hiéroglyphes). Ma base de données s'est créée avec l'interclassement par défaut (utf8_general_ci), est-ce que ça vient de ça ? Et auquel cas quel interclassement faut-il mettre (j'ai pas trouvé pour le français) ? Merci d'avance pour votre aide.


Ç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 +.
Modifié par sam06 (07 Jun 2011 - 16:29)