Leçon 19 : Insérer des données dans une base de données

Dans cette leçon, nous examinons la manière d'insérer des données dans la base de données directement à partir de scripts PHP.

Insérer des données avec SQL

On utilise SQL pour insérer des données dans une base de données de la même façon qu'on le fait pour créer des bases de données et des tables. La syntaxe de la requête SQL est la suivante :


	INSERT INTO nom_de_la_table(colonne1, colonne2, ...) VALUES(valeur1, valeur2, ...)

	

Comme vous le voyez, on peut mettre à jour plusieurs colonnes dans la déclaration SQL en les indiquant en liste séparés par des virgules. Bien sûr, il est aussi possible d'indiquer une seule colonne et une seule valeur. Les colonnes non citées dans la déclaration SQL seront juste vides.

Exemple : Insérer une nouvelle personne dans la table

Dans cet exemple, nous utilisons la base de données de la leçon 18. Supposons que l'on veuille insérer une personne dans la base de données. La personne se nomme Gus Goose, son numéro de téléphone est 99887766 et sa date de naissance est 1964-04-20.

La déclaration SQL serait la suivante :


	$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES('Gus','Goose','99887766 ','1964-04-20')"; 
mysql_query($strSQL) or die(mysql_error());

Comme vous pouvez le constater, les déclarations SQL sont susceptibles de devenir très longues et rapidement vous faire perdre le fil. Ainsi, il peut être avantageux d'écrire la déclaration SQL autrement :


	strSQL = "INSERT INTO people(";

	strSQL = strSQL . "FirstName, ";
	strSQL = strSQL . "LastName, "
	strSQL = strSQL . "Phone, ";
	strSQL = strSQL . "birth) ";

	strSQL = strSQL . "VALUES (";

	strSQL = strSQL . "'Gus', ";
	strSQL = strSQL . "'Goose', ";
	strSQL = strSQL . "'99887766', ";

	strSQL = strSQL . "'1964-04-20')";

	mysql_query($strSQL) or die(mysql_error());

	

De cette façon, la déclaration SQL se construit en découpant la phrase en petits morceaux que l'on réunit ensuite dans la variable $strSQL.

En pratique, la méthode choisie ne fait aucune différence mais dès lors que vous travaillez avec des tables plus grandes, il est crucial de toujours garder la trace, donc choisissez la méthode qui vous convient le mieux.

Exécutez le code suivant afin d'insérer Gus Goose dans la base de données :


	<html>
	<head>
	<title>Insert data into database</title>
	</head>
	<body>
	<?php

	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// The SQL statement is built

	$strSQL = "INSERT INTO people(";

	$strSQL = $strSQL . "FirstName, ";
	$strSQL = $strSQL . "LastName, ";

	$strSQL = $strSQL . "Phone, ";
	$strSQL = $strSQL . "BirthDate) ";

	$strSQL = $strSQL . "VALUES(";

	$strSQL = $strSQL . "'Gus', ";

	$strSQL = $strSQL . "'Goose', ";
	$strSQL = $strSQL . "'99887766', ";

	$strSQL = $strSQL . "'1964-04-20')";

	// The SQL statement is executed
	mysql_query($strSQL) or die (mysql_error());

	// Close the database connection
	mysql_close();
	?>

	<h1>The database is updated!</h1>
	</body>
	</html>

	

Sauvegarder la saisie de l'utilisateur dans une base de données

Il arrive couramment que l'on veuille enregistrer la saisie d'un utilisateur dans une base de données.

Comme vous l'avez probablement deviné, cela se fait en créant un formulaire tel que décrit à la leçon 11, dans lequel les valeurs des champs du formulaire seront inscrites dans la déclaration SQL. Prenons un formulaire simple comme celui-ci :


	<form action="insert.php" method="post">
	<input type="text" name="FirstName" />
	<input type="submit" value="Save" />

	</form>

	

Le formulaire est soumis au fichier insert.php dans lequel, comme montré à la leçon 11, on peut récupérer la saisie de l'utilisateur en demandant le contenu du formulaire. Dans cet exemple particulier, la déclaration SQL ressemblerait à ceci :


	strSQL = "INSERT INTO people(FirstName) values('" . $_POST["FirstName"] . "')"

	

De même, il est possible de récupérer les données des cookies, sessions, chaînes de requête, etc.

Les erreurs courantes des débutants

Au début, vous obtiendrez probablement un tas de messages d'erreur lorsque vous mettrez à jour vos bases de données. Il n'y a aucune place pour la plus infime erreur quand on travaille avec les bases de données. Une virgule mal placée et la base de données n'est pas mise à jour, vous avez un message d'erreur à la place. Ci-dessous nous décrivons les erreurs les plus courantes commises par les débutants.

Mauvais type de données

La cohérence entre le type de données et la colonne est importante. À chaque colonne est affecté un type de données. La copie d'écrans ci-dessous montre les types de données de la table "people" dans notre exemple.

Specifying data types

Une erreur se produira si vous essayez, par exemple, d'insérer du texte ou des nombres dans un champ date. Ainsi, fixez les types de données aussi précisément que possible.

Les types de données les plus courants sont listés ci-après :

Paramètre Type de données Dimensions
CHR
Texte ou combinaisons de texte et de nombres. Peut aussi servir pour des nombres non utilisés dans des calculs (par exemple, numéros de téléphone). Jusqu'à 255 caractères, ou la longueur définit dans "Length"
TEXT
Morceaux de texte plus grand, ou combinaisons de texte et de nombres. Jusqu'à 65 535 caractères.
INT
Données numériques pour des calculs mathématiques. 4 octets.
DATE
Date au format AAAA-MM-JJ 3 octets.
TIME
Heure au format hh:mm:ss 3 octets.
DATETIME
Date et heure au format AAAA-MM-JJ hh:mm:ss 8 octets.

Déclarations SQL avec guillemets ou barre oblique inverse

Si vous essayez d'insérer du texte qui contient les caractères suivants, guillemet simple ('), guillemet double (") ou barre oblique (\), il n'y aura peut-être pas d'enregistrement dans la base de données. La solution consiste à ajouter des barres obliques inverses devant ces caractères dans les requêtes de base de données.

Cela peut se faire avec la fonction documentationaddslashes de cette manière :


	<?php

	$strText = "Is your name O'Reilly?";
	$strText = addslashes($strText);

	?>

	

Tous les guillemets simples ('), les guillemets doubles (") et les barres obliques inverses (\) recevront alors devant un caractère barre oblique inverse supplémentaire. Ça n'est que pour la mise en place des données dans la base de données, et le "\" supplémentaire ne sera pas inséré. Veuillez noter que, par défaut, PHP applique documentationaddslashes sur toutes les données issues de $_GET, $_POST et $_COOKIE. Il ne faut donc pas utiliser documentationaddslashes sur des chaînes qui auront déjà été traitées.

Dans la leçon suivante, nous apprendrez à récupérer les données de votre base de données. Mais avant, essayez d'ajouter plus de personnes dans votre base de données (comme Gus Goose précédemment).



<< Leçon 18 : Créer des bases de données et des tables

Leçon 20 : Récupérer des données dans une base de données >>