Cet article constitue un tutoriel simple et rapide montrant comment construire une base de données en utilisant les technologies PHP et MySQL. Cette base de données sera accessible depuis internet à l’aide d’un navigateur.
Nous allons aborder les points suivants:
-
Qu’allons-nous faire ?
Comment le faire ?
Etape 1: Créer la base de données.
Etape 2: Ajouter une entrée dans la base de données.
Etape 3: Afficher les entrées de la base de données.
Etape 4: Rechercher des entrées dans la base de données.
Etape 5: Modifier et supprimer une entrée dans la base de données.
Bonus: Sécuriser l’accès à la base de données.
Qu’allons-nous faire ?
Nous allons créer une base de données, et un logiciel permettant d’exploiter cette base de données. Une base de données stocke des informations remplissant certains critères. Elle permet de trier les informations qu’elle contient selon ces critères. Imaginez-vous un tableau Excel: des colonnes et des lignes. Une base de données fonctionne exactement sur le même principe.
En effet, si nous voulons stocker les informations “nom”, “prénom” et “âge” pour différentes personnes, il nous faudra créer 3 colonnes, une pour chaque information; et X lignes, une par personne.
Cette illustration représente la structure de la base de données que nous allons créer:
| Colonne 1 | Colonne 2 | Colonne 3 | |
| Nom | Prénom | Âge | |
| Ligne 1 | Martin | Pierre | 42 |
| Ligne 2 | Dupont | Pierre | 38 |
| Lignes n | … | … | … |
Vous l’aurez compris, le nombre de colonnes est fixe, tandis que le nombre de lignes est indéterminée: un nouvel enregistrement dans la base de données représente une ligne supplémentaire.
Pour comprendre les mécanismes de fonctionnement des bases de données, vous pouvez vous exercer à créer des feuilles de calcul sous Excel (ou un autre tableur) et à manipuler les données qu’elles contiennent. Excel se comporte en effet comme une base de données en stockant et manipulant les informations à la manière d’une base de données.
Dans le tableau ci-dessus, j’ai omis une colonne. Il s’agit de la colonne “identifiant” (nous l’appellerons “id”). A chaque ligne de cette colonne id est attribué un chiffre ou un nombre. Le premier enregistrement de la base de données aura ainsi l’identifiant 1, le second aura l’identifiant 2, et ainsi de suite. L’id permet par la suite de manipuler les lignes très facilement.
Une dernière précision importante: chaque colonne n’accepte qu’un type précis de données. Dans notre cas, la colonne id ne devra stocker que des nombres entiers, les colonnes nom et prénom des chaînes de texte (que nous appellerons dorénavant “string”), et la colonne âge un nombre entier (que nous appellerons “int” de l’anglais “integer”). Il est absolument nécessaire de bien déterminer dès le début de la conception d’une base de données le type de données stockées dans chaque colonne. En effet, si l’on veut trier les enregistrements suivant le critère “âge”, et qu’un enregistrement contient, pour cette colonne, un string au lieu d’un entier, le tri ne pourra pas avoir lieu correctement. “Dupont” est-il inférieur ou supérieur à 52 ? Impossible à dire, on ne peut comparer que des données du même type.
Comment le faire ?
Il existe de nombreuses manières de construire une base de données. En effet, chaque base de données repose sur un “serveur”, et il existe une multitude de serveurs différents. Parmi les plus célèbres: Oracle, Sybase, Access, FileMaker, PostgreSQL et MySQL. Les deux premiers sont des serveurs professionnels qui coûtent plusieurs centaines de milliers d’euro et qui sont destinés à stocker des millions d’enregistrements. Access et FileMaker sont des serveurs propriétaires qui ne fonctionnent que par le biais d’un logiciel que vous devez installer sur votre système. Enfin, les deux derniers sont gratuits et permettent une consultation par internet grâce à l’intégration du langage de requêtes (SQL, le langage permettant de donner ses instructions au serveur) à la technologie web PHP.
Nous allons donc voir dans un premier temps comment fonctionnent les échanges entre serveur et client, pour voir ensuite ce que sont MySQL, SQL et PHP et, enfin, comprendre comment tous ces éléments s’imbriquent les uns dans les autres.
Internet: dialogue entre un client et un serveur
Vous tapez une adresse dans la barre d’adresse de votre navigateur, et vous appuyez sur “Entrée”. La page se charge à l’écran. Cela paraît simple, mais il s’agit en réalité du résultat d’un dialogue entre client (votre navigateur) et serveur (l’ordinateur qui contient l’information que vous demandez).
Lorsque vous appuyez sur “Entrée”, votre navigateur contacte le serveur qui gère l’adresse que vous avez tapée. Le serveur vous envoie l’information demandée, et le navigateur l’affiche. Imaginez un fichier Word: vous double-cliquez dessus, il s’ouvre dans Word, et vous pouvez ainsi le lire. Dans notre cas, le client dit au serveur je veux voir tel document, ce qui correspond au double-clic. Le serveur envoie alors ce document au navigateur qui l’interprète et l’affiche à l’écran. Il l’interprète car, au même titre que votre fichier Word, c’est un fichier qui est envoyé du serveur au navigateur. Ce fichier est écrit dans un langage de programmation spécial que reconnaît le navigateur. Ce langage est le HTML.
Le navigateur reçoit par exemple l’information suivante: <i>Bonjour</i>. Il sait que tout texte compris entre la balise <i> et la balise </i> devra être affiché en italique. Il affichera donc: Bonjour !.
Il est particulièrement important pour la suite de comprendre ce mécanisme: le serveur émet un document rempli de texte (le code source définissant la mise en page et la présentation, et le contenu lui même), il ne traite pas ce texte. C’est le navigateur qui traite ce texte, et l’interprète pour afficher le résultat attendu.
MySQL, SQL, PHP ?
Le principe du PHP, un autre langage de programmation, est tout à fait différent. En effet, dans ce cas c’est le serveur qui exécute le code source et qui renvoit le résultat au navigateur. Le serveur ne se contente pas d’envoyer les données, il les analyse et leur applique un traitement avant de les envoyer. On dit que le PHP “s’éxécute côté serveur” alors que le HTML est traité côté client.
Vous remarquerez que je n’emploie pas le verbe “s’exécuter” pour parler du HTML. Il s’agit là d’une autre différence -majeure- entre le HTML et le PHP: le HTML n’est pas exécutable, il est purement statique. En d’autres termes, alors que le HTML se borne à décrire une situation de faits (tel mot est en italique, telle phrase est en gras, telle image doit être affichée, etc.), le PHP peut avoir des comportements qui produisent des effets sous certaines conditions. Par exemple: si le nom est Dupont, alors il devra être affiché en rouge.
Le PHP est le langage que nous allons utiliser pour le traitement du contenu de la base de données.
MySQL est le nom du serveur de base de données. C’est un logiciel installé sur le serveur qui interprête et exécute les requêtes qui lui sont soumises grâce au langage SQL. Par exemple, le code suivant permet de retenir, dans la base de données appelée “mabase”, tous les prénoms des personnes qui ont plus de 40 ans, en rejetant les prénoms des personnes qui ne remplissent pas ce critère: SELECT prenoms FROM mabase WHERE age > 40.
Conjonction de ces éléments
Si vous avez compris les explications ci-dessus, vous devriez comprendre les deux phrases suivantes: “Le contenu et la structure de la base de données seront stockés sur le serveur MySQL auquel accèderont des fonction PHP utilisant le langage SQL. La formation des requêtes SQL se fera grâce à des opérations logiques réalisées en PHP, et l’affichage des résultats de ces requêtes se fera grâce à un code HTML généré par d’autres fonctions PHP.”
Etape 1: Créer la base de données
Connexion au serveur de base de données
Je suppose que votre base de données existe déjà, mais ne contient aucune donnée. Lorsque vous activez MySQL chez un hébergeur Web, une base de données associée à votre compte est automatiquement créée. Cependant, elle ne contient aucune “table”. Une “table” est le conteneur d’un ensemble de colonnes et lignes. Nous allons nous connecter à la base de données, et créer la table utile à cet exercice.
Créez donc un fichier appelé connexion.php:
-
<?php
$host = "localhost"; /* L'adresse du serveur */
$login = ""; /* Votre nom d'utilisateur */
$password = ""; /* Votre mot de passe */
$base = ""; /* Le nom de la base */
function connexion()
{
global $host, $login, $password, $base;
$db = mysql_connect($host, $login, $password);
mysql_select_db($base,$db);
}
?>
La ligne 1 contient le “tag” ou “balise” en français qui permet de déterminer le type de script utilisé: il s’agit de PHP. La ligne 13 informe le serveur que le script est terminé.
Les lignes 2 à 5 définissent des variables. Par exemple, votre “login” ou nom d’utilisateur est “pierre_martin_128765b”. Vous assignez cette valeur à la variable $login pour qu’à chaque fois que vous fassiez référence à $login le serveur comprenne “pierre_martin_128765b”. De même pour les autres valeurs.
La ligne 7 marque la création d’une fonction. Une fonction regroupe une série d’instructions qui seront exécutées dès que cette dernière est appélée. Ainsi, au lieu d’écrire les lignes 9, 10 et 11, vous écrirez dorénavant connexion();. Les lignes 8 et 12 présentent des accolades qui délimitent la portée de la fonction: elle englobe toutes les lignes entre ces accolades.
Création de la table
Créez ensuite un autre fichier appelé installation.php:
-
<?php
include("connexion.php");
connexion();
$sql= "CREATE TABLE IF NOT EXISTS `mabase` (";
$sql .= "`id` int(11) NOT NULL auto_increment,";
$sql .= "`nom` text NOT NULL,";
$sql .= "`prenom` text NOT NULL,";
$sql .= "`age` int NOT NULL,";
$sql .= "PRIMARY KEY (`id`),";
$sql .= "UNIQUE KEY `id_2` (`id`),";
$sql .= "KEY `id` (`id`)";
$sql .= ") ENGINE=MyISAM';";
mysql_query($sql) or die(mysql_error());
?>
A la ligne 2, par l’instruction include(“connexion.php”);, nous incluons le contenu de ce fichier dans le fichier courant. Nous pourrons ainsi accéder à son contenu, notamment en appelant la fonction connexion() à la ligne 4.
Les lignes 6 à 14 contiennent les instructions de formation de la requête SQL. La requête est découpée et insérée dans la variable $sql. Notez que le symbole exmployé est .= qui signifie ajoutez ce qui suit à la fin de la variable, après ce qu’elle contient déjà.
A la ligne 6, nous créons la table, si elle n’existe pas déjà, et nous lui donnons le nom “mabase”. A la ligne 7, nous insérons dans la table la colonne “id” de type int (entier), qui ne peut pas être une valeur nulle et qui s’incrémente automatiquement à chaque nouvel ajout dans la base de données. Cet élément, id, sera la clé qui identifie chaque enregistrement (lignes 11 à 13). A la ligne 8 nous insérons la colonne “nom” de type “texte” et qui ne peut être nulle. La ligne 14 détermine le type de table, thème qui dépasse l’objet de cet article.
La ligne 16 soumet la requête formée à la base de données, et affiche une éventuelle erreur à l’écran.
Etape 2: Ajouter une entrée dans la base de données
Utilisation des variables et formation de la requête SQL
Quand on ajoute une entrée dans la base de données, une nouvelle ligne est créée. A chaque colonne de cette nouvelle ligne est assignée une valeur.
Nous allons donc utiliser une requête SQL pour attribuer une valeur à chaque colonne de la nouvelle ligne: INSERT INTO mabase(id,nom,prenom,age) VALUES(”,’Martin’,'Pierre’,’42′). En français, cela donnerait: Insérez dans la table appelée “mabase”, respectivement pour les colonnes “id”, “nom”, “prénom” et “age”, les valeurs “(vide)”, “Martin”, “Pierre” et “42″.
Nous avons vu que le langage PHP utilisait des variables. On peut donc remplacer les valeurs que l’on veut insérer par la nom des variables qui les contiennent.
Dans un premier temps, on assigne les valeurs aux variables:
-
$nom = 'Martin';
$prenom = 'Pierre';
$age = '42'
On pourra ainsi, dans un second temps, insérer ces variables au lieu des valeurs associées dans la requête SQL: INSERT INTO mabase(id,nom,prenom,age) VALUES(”,’$nom’,'$prenom’,'$age’).
Création du formulaire
Vous savez maintenant former la requête SQL d’ajout d’un enregisterment dans la base de données en utilisant des variables. Il nous faut à présent créer un formulaire pour récupérer les données à ajouter.
Un formulaire est un ensemble d’objets que manipule l’utilisateur -le visiteur de la page-. Il y a ainsi des champs de texte, des cases à cocher, des menus déroulants, des boutons, etc. Notre formulaire sera simple: 3 champs et 1 bouton.
Voici le code du formulaire:
-
<form name="formulaire" method="post" action="ajouter.php">
<table width="200" border="1">
<tr>
<td>Nom:</td>
<td><input name="nom" type="text" id="nom"></td>
</tr>
<tr>
<td>Prénom:</td>
<td><input name="prenom" type="text" id="prenom"></td>
</tr>
<tr>
<td>Age:</td>
<td><input name="age" type="text" id="age" size="3" maxlength="3"></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Envoyer">
</div></td>
</tr>
</table>
</form>
Et voilà le résultat:
Ce code mérite quelques explications. A la ligne 1 on crée le formulaire, et on lui donne un nom (ici: “formulaire”). Puis, on indique la méthode de transmission des données. Il en existe deux: POST et GET. Pour les formulaires, on utilise en règle générale POST. Ces deux méthodes sortent de l’objet de cet article. Enfin, on indique vers quel fichier le contenu du formulaire sera envoyé: “ajouter.php”.
La balise <table> sert à créer un tableau. Ici, il a les attributs suivants: largeur de 200 pixels, épaisseur de la bordure de 1 pixel.
Les balises <tr> et <td> servent, respectivement, à créer une ligne et une colonne.
Les champs de texte sont créés grâce à la balise <input>. Ainsi, à la ligne 5 on crée un objet de type input, qui est un champ de texte (type=”text”), et dont le nom et l’identifiant sont “nom”. A la ligne 13, il s’agit du champ pour la valeur âge: la taille maximale du texte entré sera de 3 caractères, la taille du champ sera de 3 caractères.
Pour finir, à la ligne 17, on crée un bouton qui servira à valider le formulaire, et à envoyer les valeurs des champs vers le fichier spécifié à la ligne 1 et avec la méthode spécifiée à cette même ligne.
Récupération des valeurs du formulaire
Nous avons créé le formulaire qui permet à l’utilisateur de saisir ses données, nous allons maintenant créer la page ajouter.php qui nous permettra d’ajouter les données soumises dans la base de données.
Créez donc le fichier ajouter.php et ajoutez le code qui suit, de manière à se connecter à la base de données:
-
<?php
include("connexion.php");
connexion();
Une fois connecté à la base de données, il nous faut récupérer les valeurs du formulaire. On utilise pour cela un tableau ou matrice qui peut contenir plusieurs valeurs différentes. Il s’agit du tableau $_POST. Dans notre formulaire, nous avons donné ces noms aux champs: nom, prenom, age. Pour récupérer les valeurs saisiez dans ces champs, il suffira d’écrire, respectivement: $_POST['nom'], $_POST['prenom'] et $_POST['age'].
Ce système nous permet de former la requête SQL très simplement: INSERT INTO mabase(id,nom,prenom,age) VALUES(”,’”.$_POST['nom'].”‘,’”.$_POST['prenom'].”‘,’”.$_POST['age'].”‘).
Ce qui donne, au final le code suivant (à la suite du début du fichier décrit plus haut):
-
$sql = "INSERT INTO mabase(id,nom,prenom,age) ";
$sql .= "VALUES('','".$_POST['nom']."','".$_POST['prenom']."','".$_POST['age']."')";
mysql_query($sql) or die(mysql_error());
?>
Contrôle des valeurs saisies
Le code présente ci-avant est parfaitement fonctionnel. Il présente cependant un gros défaut: les valeurs saisies par l’utilisateur ne sont pas contrôlées. Ainsi, un utilisateur pourrait omettre de donner son nom, ce qui aurait pour conséquence l’insertion d’un valeur vide dans la base de données.
Un programmeur PHP doit toujours se poser la question suivante: comment se comportera mon code s’il est appelé anormalement ou en dehors de son contexte ?. Dans notre cas, si on tape l’adresse du fichier ajouter.php dans un navigateur, si on appelle le fichier sans passer par le formulaire, on aura droit à un beau bug, et pour cause puisque le tableau $_POST n’existe que lorsqu’il y a un formulaire utilisant la méthode POST en amont !
Il nous faut donc contrôler deux choses: que POST existe bien, et que tous les champs ont été renseignés. Ces deux choses se réalisent en une seule opération, à l’aide d’une expression conditionnelle.
Les expressions conditionnelles permettent de déterminer quel comportement aura le programme, en fonction d’éléments et de conditions déterminés. La logique est la suivante: si A alors B sinon C.
En PHP, cela donne:
-
if ($POST['nom'] != '' AND $POST['prenom'] != '' AND $POST['age'] != '')
{ // c'est bon, on peut copier/coller ici le code vu ci-dessus
}
else
{
echo 'Erreur ! Vous devez remplir tous les champs !';
}
if signifie si, else signifie sinon.
La syntaxe est la suivante : if(la condition à remplir) {le code à exécuter si la condition est remplie} else { le code à exécuter si la condition n’est pas remplie }.
Dans notre cas la condition est simple. On prend le contenu de notre tableau et on vérifie qu’aucune des entrées n’est vide. Par exemple, pour le nom: d’un côté on a $POST['nom'] qui représente ce que l’utilisateur a saisi, d’un autre côté ” qui représente un contenu inexistant (une chaîne de texte vide), et enfin, au milieu != qui est un opérateur de comparaison signifiant différent de. On répète cela pour les champs prénom et âge, en mettant l’opérateur booléen AND qui signifie et.
La condition peut ainsi se lire: SI la valeur du champ NOM du formulaire N’EST PAS une CHAÎNE VIDE, ET SI la valeur du champ PRENOM du formulaire N’EST PAS une CHAÎNE VIDE, ET SI la valeur du champ AGE du formulaire N’EST PAS une CHAÎNE VIDE; alors exécuter le code qui suit…
L’instruction echo permet d’afficher quelque chose à l’écran. Dans notre cas, un message d’erreur indiquant que tous les champs n’ont pas été renseignés.
Le code final du fichier ajouter.php est le suivant:
-
<?php
include("connexion.php");
if ($POST['nom'] != '' AND $POST['prenom'] != '' AND $POST['age'] != '')
{
connexion();
$sql = "INSERT INTO mabase(id,nom,prenom,age) ";
$sql .= "VALUES('','$_POST['nom']','$_POST['prenom']','$_POST['age']')";
mysql_query($sql) or die(mysql_error());
}
else
{
echo 'Erreur ! Vous devez remplir tous les champs !';
}
?>
Etape 3: Afficher les entrées de la base de données
Principe: afficher des données tabulaires
Les données tabulaires s’affichent sous forme de tableaux à plusieurs dimensions, exactement comme elles sont stockées sur le serveur de base de données. Il est dont logique de les afficher dans des tableaux HTML.
Comme exposé plus haut, les tableaux HTML se construisent à l’intérieur de la balise <table>, les balises <tr> délimitant les lignes et les balises <td> les colonnes.
Voici un exemple:
-
<table>
<tr>
<td>Colonne 1 / Ligne 1</td>
<td>Colonne 2 / Ligne 1</td>
</tr>
<tr>
<td>Colonne 1 / Ligne 2</td>
<td>Colonne 2 / Ligne 2</td>
</tr>
<tr>
<td>Colonne 1 / Ligne 3</td>
<td>Colonne 2 / Ligne 3</td>
</tr>
</table>
Ce qui donne:
| Colonne 1 / Ligne 1 | Colonne 2 / Ligne 1 |
| Colonne 1 / Ligne 2 | Colonne 2 / Ligne 2 |
| Colonne 1 / Ligne 3 | Colonne 2 / Ligne 3 |
Mise en pratique: affichage en liste
Nous allons créer un fichier liste.php destiné à afficher la liste de tous les enregistrements de la base de données. Le début ne change pas:
-
<php?
include("connexion.php");
connexion();
Il nous faut ensuite écrire la requête SQL. Dans ce cas, elle est simple et elle dit Afficher TOUS les enregistrements de la table “mabase”: SELECT * FROM mabase.
-
$sql = ‘SELECT * FROM mabase’;
Nous envoyons ensuite la requête au serveur, le résultat de cette requête étant stocké dans la variable $req.
-
$req = mysql_query($sql) or die(mysql_error());
La variable $req stocke plusieurs éléments. Nous allons les extraire et les afficher un par un. Cela est possible grâce à l’instruction while() qui permet d’exécuter un certain code tant qu’une condition n’est pas remplie. Dans notre cas, la logique est la suivante: Etant donné qu’une ligne du tableau HTML représente un enregistrement de la base de donnée, créez une ligne et remplissez chacune de ses colonnes tant qu’il reste des enregistrements dans la base de données.
Les boucles while sont très intéressantes: il n’est pas nécessaire de savoir combien d’enregistrements il y a dans la base de données, puisque le même code sera exécuté tant qu’il en reste.
Voici donc le code:
-
echo '<table>';
while($data = mysql_fetch_assoc($req))
{
echo '<tr>';
echo '<td>$data["id"]</td>';
echo '<td>$data["nom"]</td>';
echo '<td>$data["prenom"]</td>';
echo '<td>$data["age"]</td>';
echo '</tr>';
}
echo '</table>';
Rappelez-vous, la commande echo permet d’afficher un élément à l’écran. Nous affichons ici des balises HTML et du contenu.
Affichage en liste: Tri par colonnes
Nous venons d’afficher les données de la base en liste, sous la forme d’un tableau: une colonne par propriété, une ligne par enregistrement. L’intérêt d’un tel affichage -données tabulaires- est de pouvoir effectuer des tris rapidement. Par exemple, classer les enregistrements en ordre croissant ou décroissant, par nom, prénom ou âge.
Pour effectuer un tel tri, il faudra passer une requête SQL de plus. Celle-ci est très simple: SELECT * FROM mabase ORDER BY xxx yyy où “xxx” représente le champ à prendre en considération, et “yyy” la méthode de tri. Par exemple, nous avons un champ “id” qui associe à chaque enregistrement de la base de données un numéro. Le premier enregistrement est “1″, le second est “2″, etc. Par défaut, lorsqu’on passe la requête pour afficher les données tabulaires, MySQL renvoie d’abord le premier enregistrement, puis le second, et ainsi de suite jusqu’au dernier. Le tableau se présentera donc de la façon suivante: le premier enregistrement -le plus vieux- en haut, le dernier -le plus récent- en bas. On appelle cela ordre “ascendant” ou croissant. Mais on peut vouloir l’inverse (et c’est fréquent dans ce cas): le dernier enregistrement, le plus récent, en haut, et le premier, le plus vieux, en bas. Dans ce cas, il faut trier les données par ordre “descendant” ou décroissant. L’instruction SQL sera: SELECT * FROM mabase ORDER BY id DESC. On écrit “DESC” pour ordre décroissant, et “ASC” pour ordre croissant.
Ne vous y trompez pas, ceci n’a rien à voir avec la commande SQL “WHERE”. Nous avons vu au début de cet article que la requête SELECT prenoms FROM mabase WHERE age > 40 affichait le prénom des gens qui ont plus de 40 ans. Cela implique que ceux qui ont moins de 40 ans seront ignorés. Si vous avez deux enregistrements dans votre base de données, l’un correspondant à une personne de 50 ans, et l’autre à une personne de 30 ans, alors seul le premier enregistrement sera affiché. Le second ne sera pas affiché, il sera ignoré. A l’inverse, la commande ORDER BY prend en compte tous les enregistrements: il ne s’agit pas de rechercher les enregistrements remplissant certains critères, en excluant ceux qui ne remplissent pas ces critères, mais de trier tous les enregistrements selon certains critères.
Vous pouvez intégrer tout cela à votre programme de manière très simple. Tout en haut de la page sur laquelle est affiché votre tableau -vos données tabulaires-, créez deux liens:
-
<a href="liste.php?orderby=asc">Trier par ordre croissant</a>
<a href="liste.php?orderby=desc">Trier par ordre décroissant</a>
Ensuite, dans votre fichier “liste.php”, adaptez votre vode. La requête SQL sera formée de manière différente, selon que l’utilisateur a cliqué sur le lien “Trier par ordre croissant” ou sur le lien “Trier par ordre décroissant”.
-
if($_GET["orderby"] == "asc") // si on veut un ordre croissant
{ $sql = "SELECT * FROM mabase ORDER BY id ASC";
}
elseif($_GET["orderby"] == "desc") // si on veut un ordre décroissant
{ $sql = "SELECT * FROM mabase ORDER BY id DESC";
}
else // si rien n'a été précisé
{ $sql = "SELECT * FROM mabase";
}
Le principe est le même pour les autres champs. Si par exemple vous voulez trier les personnes par âge croissant, les plus jeunes en haut et les plus vieux en bas, il vous suffira de passer la requête suivante: SELECT * FROM mabase ORDER BY age ASC.
Astuce: affichage par fiche
Nous venons d’afficher tous les enregistrements de la base de données. Peut-être que pour chaque enregistrement vous avez une trentaine de colonnes, et que ce n’est pas pratique pour vous de tout afficher en bloc. Dans ce cas là notre champ “id” va servir !
La solution est d’afficher la liste complète (comme dans l’exemple ci-dessus), en omettant par exemple les colonnes prenom et age. A la place, un lien de ce type: echo ‘<td><a href=”fiche.php?q=’.$data["id"].’>Voir la fiche</a></td>’;
Ce code produira un lien renvoyant vers la page fiche.php?q=XX, XX étant le contenu de la colonne id pour celle ligne.
On récupère ensuite, dans le fichier fiche.php, la valeur de XX grâce à la variable $_GET['q']. Nous avons utilisé la méthode POST pour le formulaire, et nous utilisons maintenant la méthode GET ! La valeur de XX ainsi récupérée, il ne nous reste plus qu’à former la requête SQL: $sql = “SELECT * FROM mabase WHERE id=’”.$_GET["q"].”‘”;.
Au final, cela donne:
-
$id = $_GET['id'];
$sql = "SELECT * FROM mabase WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
$data = mysql_fetch_assoc($req);
echo ' Id: '.$data['id'];
echo ' Nom: '.$data['nom'];
echo ' Prénom: '.$data['prenom'];
echo ' Âge: '.$data['age'];
Je vous laisse écrire le reste du code, notamment la méthode de connexion à la base de donné qui ne change pas ; et la méthode de vérification de l’existence et de la non-nullité de la variable $_GET, puisque la procédure avec if…else est la même pour la variable $_GET et pour la variable $_POST. Une astuce en passant : pour sécuriser l’acquisition des données, il est conseillé de contrôler le type de ces données. Ici, id est censé être un nombre, c’est-à-dire de type numérique. On peut donc encadrer le code dans un bloc if(is_numeric($_GET['id'])).
Etape 4: Recherche dans la base de données
Pour rechercher dans la base de données, il faut utiliser un peu toutes les notions que nous venons de voir. Comme il est inutile que je me répète, je ne fournirai pas de code complet.
La première étape est de créer un formulaire. La seconde étape est de créer un fichier PHP qui récupère les données de ce formulaire. La troisième étape est la formation de la requête SQL à partir des données récupérées.
La requête de recherche se construit exactement comme expliqué dans l’exemple ci-dessus. En effet, nous avons recherché tous les enregistrements dont l’id est XX. L’id étant une valeur unique, il n’y a forcément qu’un seul résultat !
La recherche exacte se construit ainsi: SELECT * FROM mabase WHERE nom_colonne = Y. Le caractère * implique que l’on veut toutes les colonnes dans les résultats. Si l’on ne veut que certaines colonnes, il suffira d’écrire leurs noms séparés de virgules. Y correspond à ce que l’on veut rechercher.
La recherche approximative se construit de cette manière: SELECT * FROM mabase WHERE nom_colonne LIKE ‘%S’. On recherche ainsi toutes les entrées qui finissent par S. Le symbole % est un marqueur générique. Par exemple, si j’écris Constit%, me seront renvoyés aussi bien Constitution que Constitutionnel ou Constitutionnellement.
La quatrième étape est l’affichage des résultats. Vous pouvez reprendre le code d’affichage en liste et remplacer la requête SQL de ce code par la nouvelle requête SQL de recherche que vous venez de générer.
Etape 5: Modifier et supprimer une entrée de la base de données
Encore une fois, les mécanismes sont les mêmes. Il vous faut récupérer l’id de l’enregistrement à modifier ou supprimer comme expliqué ci-avant, et construire la requête SQL correspondante.
Pour mettre à jour, le mot clé SQL est UPDATE: UPDATE mabase SET nom=’$nom’, prenom=’$prenom, date=’$date’ WHERE id=’$id’.
Pour supprimer une entrée, le mot clé SQL est DELETE: DELETE FROM mabase WHERE id=’$id’.
Bonus: Sécuriser l’accès à la base de données
Il existe de nombreuses méthodes pour sécuriser l’accès aux données, et notamment: les htaccess, le cryptage et les sessions PHP. Je vais développer ici les sessions PHP. Le principe est le suivant: l’administrateur de la base de données définit qui peut y accéder en définissant des couples login / mot de passe; et toute personne désirant utiliser la base de données devra saisir un des couples définis par l’administrateur.
Les sessions PHP sont très pratiques. Elles reposent sur un principe simple: le tableau $SESSION[] est créé et stocké sur le serveur. Il peut contenir n’importe quel type de données. De plus, il est statique. Cela signifie qu’il est accessible dans n’importe laquelle de vos pages (classes) PHP sans avoir à être redéclaré. Il n’est pas non plus réinitialisé d’une page à une autre. Pour le réinitialiser, deux méthodes: soit en écrivant $SESSION[] = array();, soit simplement en quittant votre navigateur !
Pour commencer, on crée les couples. Le premier login est Martin, et il est associé au mot de passe abc. De même pour les autres couples.
-
$admin_array = array('Martin' => 'abc', 'Dupont' => 'def', 'Robert' => 'ghi');
On ouvre ensuite la session en écrivant session_start(); au début de nos fichiers PHP.
On crée un formulaire, avec un champ de texte pour le login, un champ de texte pour le mot de passe, et un bouton pour envoyer les résultats avec la méthode POST. Puis, on récupère les valeurs soumises par le biais du formulaire dans une fonction qui les analyse et les compare aux valeurs de $admin_array. Cette fonction pourrait être construite ainsi:
-
foreach($admin_array as $logg => $passwd)
{ if($_POST['login'] == $logg AND $_POST['password'] == $passwd)
{ $_SESSION['identifie'] = 1;
return;
}
}
Il nous faut maintenant créer une autre fonction qui vérifie si l’utilisateur est enregistré, c’est-à-dire si $_SESSION['identifie'] est égal à 1. Si c’est le cas, la fonction renverra la valeur “true”, et elle renverra “false” dans tous les autres cas. A chaque fois que vous voudrez savoir si l’utilisateur est identifié, vous pourrez appeler la fonction suivante et vérifier la valeur qu’elle retourne.
-
function checkauth()
{ if($_SESSION['identifie'] == 1) return true;
else return false;
}
Dernière étape: on utilise la fonction checkauth() avant d’afficher un quelconque contenu, et avant d’exécuter une quelconque opération. Pour cela, on englobe les codes vus dans cet article dans une instruction if…else. Si la fonction renvoie “true”, on peut afficher les données, sinon non. A noter que if(checkauth()) est équivalent à if(checkauth() == true).
-
if(checkauth())
{
// n'importe quelle opération sur la base de donnée
}
else
{
// le code qui correspond au formulaire d'identification
}
A Ledenon, le 25/09/2005
Mis à jour à Montpellier le 21/12/2005
Mis à jour à Paris le 11/04/2009
{ 41 comments… read them below or add one }
Je suis dispo pour vos réactions et/ou questions, tout le support nécessaire sur le code source de ce tuto et sur sa mise en oeuvre. Ajoutez vos commentaires !
Salut et d’abord un grand merci pour tout ce boulot!!!
En revanche je bloque sur le passage concernant les boucles. Pour une boucle comme celle ci pas de problème, mais pour une sur plusieurs ligne? Je m’explique: mettons que je veuilles afficher les avatars des derniers membres inscrit sur 3 colonnes et 3 lignes. Chaque ligne comprend donc trois avatars. Mais si je me base sur l’exemple donné dans le tutorial, l’avatar portera par exemple le nom “id_avatar” et sera mis dans la première celulle de la première ligne. Du coup il ne peut pas être répliquer aprés non??? C’est moi qui n’est pas compris ou c’est une limite? (en gros je veux dire qu’avec l’exemple du tuto le tableau vas soit sur les coté soit vers le bas, mais pas les deux).
Merci
Oups, j’ai oublié de donné la solution trés trés “couteau suisse” que j’ai trouvé pour régler ça:
Mettre l’avatar dynamique dans la première celulle puis jouer avec les limites. Donc le premier contient seulement “order by desc”, le deuxième avatar a en plus “limit 1,1″, le deuxième “limit 2,2″…
Voila, je sais ça fait bq de requêtes mais c’est bien pour régler ça que je pose ma question précédente!
Encore merci et vive Valhalla!!!
Si je comprends bien, tu veux afficher des avatars stockés dans une base de données, avec une boucle. Et il faut 3 avatars par ligne.
Il y a une solution rapide pour faire cela. Il suffit d’imbriquer 2 boucles, l’une dans l’autre. La première boucle gère les lignes, la seconde gère les colonnes.
Ainsi, on aura:
- 1er passage de la 1ère boucle = 1ère ligne
– 1er passage de la 2ème boucle = 1ère colonne de la 1ère ligne
– 2ème passage de la 2ème boucle = 2ème colonne de la 1ère ligne
– 3ème passage de la 2ème boucle = 3ème colonne de la 1ère ligne
- 2ème passage de la 1ère boucle = 2ème ligne
– 1er passage de la 2ème boucle = 1ère colonne de la 2ème ligne
– 2ème passage de la 2ème boucle = 2ème colonne de la 2ème ligne
– 3ème passage de la 2ème boucle = 3ème colonne de la 2ème ligne
- etc.
Comment peut-on faire pour extraire tous les noms différents ?
Dans le meme style que votre exemple, je mets DUPOND Martin, DUPOND Yves et MACHIN Yves.
Comment peut-on faire pour que MySQL nous retourne que Martin et Yves.
Sinon, on peut peut-être faire ça via PHP…
Merci de votre aide d’avance
Il y a deux manières de faire cela. On peut en effet utiliser une requête SQL ou traiter les donner avec PHP. Je vais donner un exemple des deux méthodes, mais je conseille fortement d’utiliser la méthode SQL, sauf si un traitement avec PHP est indispensable.
Avec php:
$sql = “SELECT * FROM MaTable;”;
$data = mysql_fetch_assoc(mysql_query($sql));
foreach($data as $valeur)
if($valeur == “DUPOND”)
echo “Mon nom est $valeur et mon prénom “.$data['prenom'];
Avec ce code, on extrait tous les enregistrements de la table, et on ne retient que ceux qui satisfont à la condition qu’on a choisi de poser.
Mais il vaut mieux n’extraire que les données qui correspondent à ce que l’on veut rechercher. Et c’est possible de le faire avec SQL:
SELECT prenom FROM MaTable WHERE nom=’DUPOND’;
En français, cela donne : “sélectionner la colonne prénom dans la table MaTable pour toutes les lignes où ‘nom’ est ‘Dupond’ “.
Bonjour ,je voulais savoir comment faire pour verifier dans une base de donnée si un nom existe déja .Je m’explique, par exemple quelqun s’enregistre dans un forum avec un pseudo XXX et ce pseudo existe déja dans la base de donnée , comment on va verifier si ce pseudo existe déja , et ainsi lui demander de changer de pseudo.Merci d’avance.
Il faut tout simplement exécuter le code d’ajout du nouveau pseudo dans la base de données à l’intérieur d’un bloc if…else qui se chargera de vérifier si ce pseudo n’a pas déjà été enregistré.
// récupérer le pseudo choisi par l’utilisateur
$pseudo = $_POST['pseudo'];
// construire une requête SQL pour savoir si ce pseudo existe déjà
$sql = “SELECT * FROM matable WHERE pseudo=’$pseudo’;”;
$req = mysql_query($sql);
// compter le nombre de résultats renvoyés par la précédente requête
// si ce nombre est égal à 0, c’est que le pseudo n’est pas déjà utilisé
$match = mysql_num_rows($req);
// si le pseudo existe déjà…
if($match > 0)
{
echo “Pseudo déjà pris…”;
}
// si le pseudo est libre, insérer l’enregistrement dans la base de données
else
{
$sql = “INSERT INTO….
}
Il existe aussi une autre méthode, plus élégante, mais un peu plus difficile à manier. Il s’agit ici de compter le nombre de résultats, non pas avec PHP, mais directement avec MySQL. Pour cela, on utilisera la fonction COUNT.
$sql = “SELECT COUNT(*) FROM matable WHERE pseudo=’$pseudo’;”;
bonjour,je debute completement et j’apprend tout seul.
Mon probleme est que lorsque je clique sur “envoyer” ,j’ai mon fichier ajouter.php qui s’affiche..???
aucune donnée n’est entrée dans ma base .
J’ai un peu de mal à saisir le principe de include,car à mon avis c’est la que ça coince…
J’ai plus l’habitude de programmer avec windev ,le php et le html c’est nouveau pour moi.
Quel est l’erreur que j’ai commise???
merci
Bonjour,
Rien a voir avec le tuto, mais il me semble que le site comporte un bug au niveau du menu a gauche sous IE7: Le menu ne cesse de s’agrandir et finni par cacher tout le contenu du site !
A part ça bon boulot, continuez ainsi
C’est un problème au niveau du serveur web (probablement Apache), qui considère que les fichiers avec l’extension PHP sont des fichiers textes, et qui les affiche au lieu de les exécuter. Le problème se règle en configurant le fichier httpd.conf
Merci de l’avoir signalé
En fait, c’est plutôt un bug de IE7… le menu respecte les standards, il s’affiche correctement avec Safari (Webkit) et Firefox (Gecko). Bref… je rétablirai le menu classique dans la prochaine version de l’interface.
Bonjour,
Je trouve que la nature de l’article laisse à supposer qu’il s’adresse à des débutants, mais encore faut-il déjà maîtriser pour installer un serveur web “sur localhost” et que celui-ci veuille bien interpréter correctement les commandes pour ma part cela donne :
Parse error: syntax error, unexpected T_INCLUDE in /var/www/apache2-default/ajouter.php on line 2
Je crois déceler comme un ton de reproche dans le message précédent. Aurais-je dû expliquer dans cet article comment installer un serveur Web ? Je ne le crois pas, précisément car cela fait déjà l’objet d’un autre article, long, détaillé et maintes fois commenté, qui est publié ici même.
Quant au message d’erreur cité, il confirme mon propos. Il s’agit d’un message d’erreur généré par le logiciel de compilation et d’interprétation du code source PHP. C’est donc que, d’une part le serveur Web fonctionne correctement et, d’autre part, que l’erreur se situe dans le code source PHP. Il s’agit d’une simple erreur de syntaxe, comme l’indique le message.
Bonjour,
J’ai un petit probléme que je n’arrive pas à trouver de solution sur le net.
Je suis en traine de créer un site web avec PHP et Mysql.
Le probléme:J’ai une table qui contient un champ “fichier”. Mes questions:
1) Est ce je peux stocker des fichiers “file.php” dans cette table?
2) y’a t’il une methode qui me permet d’extraire un fichier.php de ma base de données et l’ouvrir directement en page Web?
Bien à vous.
Oui, il est possible de stocker des fichiers dans des tables MySQL. Pour les fichiers texte plain, la colonne doit être du type TEXT ; pour les fichiers binaires, elle doit être du type BLOB.
La table pourra contenir les champs suivants :
- id : primary key, auto_increment (INT)
- nom : le nom du fichier (VARCHAR)
- type : le type du fichier (nécessaire pour le télécharger) (VARCHAR)
- taille : la taille du fichier (idem) (VARCHAR)
- fichier : le contenu du fichier (BLOB)
On crée ensuite un formulaire HTML avec un champ d’importation de fichiers :
<input type=”hidden” name=”MAX_FILE_SIZE” value=”un nombre d’octets…”>
<input name=”monfichier” type=”file”>
sans oublier de préciser en en-tête du formulaire qu’il est destiné à traiter des donnés binaires : enctype=”multipart/form-data”
Il suffit ensuite de récupérer les données du fichiers avec PHP :
$Fnom = $_FILES['monfichier']['name'];
$FTMPnom = $_FILES['monfichier']['tmp_name'];
$Ftaille = $_FILES['monfichier']['size'];
$Ftype = $_FILES['monfichier']['type'];
ainsi que son contenu :
$Fcontenu = file_get_contents($FTMPnom);
On n’oublie surtout pas de protéger l’insertion…
$Fcontenu = addslashes($Fcontenu);
$Fnom = addslashes($Fnom);
Et on insère !
INSERT INTO matable (id,nom,type,taille,fichier) VALUES (”,’$Fnom’,'$Ftype’,'$Ftaille’,'$Fcontenu’)
—-
Pour récupérer le fichier, on commence par faire un SELECT classique, puis on peut soit le télécharger en l’appelant dans des headers PHP (fichier binaire), soit l’afficher à l’écran (fichier texte).
En revanche, si le fichier doit être exécuté comme du code PHP sur le serveur, il faudra procéder en 3 étapes :
- récupérer le fichier depuis MySQL
- créer un fichier sur le serveur
- inclure ce fichier
1) Pour le récupérer depuis MySQL
On éxécute la requête SELECT :
$sql = “SELECT * FROM matable where id = …”;
$data = mysql_fetch_assoc( mysql_query( $sql ) );
On enlève les slash du nom MAIS PAS DU CONTENU !!!
$monfichier = stripslashes($data['nom']);
$contenu = $data['fichier'];
2) Pour créer le fichier sur le système de fichiers :
$root = répertoire du serveur
$fichier = fopen(“$root/$monfichier”,”w”);
fwrite($fichier,$contenu);
3) Pour l’inclure, tout simplement
include_once(“$root/$monfichier”);
—-
NB 1 : ne pas oublier de supprimer le fichier après coup, avec unlink(“$root/$monfichier”)
NB 2 : ça me semble vraiment lourd de stocker un fichier PHP sur le serveur MySQL pour l’exécuter ensuite. Quoi que tu veuilles faire, il doit y avoir une meilleure solution. En plus, cette méthode constitue potentiellement une ENOOOOOORME faille de sécurité. Si tu utilises ça pour toi il n’y a pas de problème, mais n’autorise JAMAIS tes visiteurs à exécuter du code PHP sur ton serveur. Il suffit qu’un petit malin utilise la fonction unlink() à la racine de ton serveur, par exemple, pour en effacer le contenu…
Bonjour!
Apres suppression dans la base.Est-il possible de regulariser les ids automatiquement pourqu’il prennent de l’ordre normale:1,2,3 etc….mais non pas 1,2,3,5,6,7,8,9, puisqu’on supprimme le 4.Merci
Les clés primaires (id) dépendent de la table et non de chaque ligne.
Si vous avez les enregistrements 1,2,3,4,5 et que vous supprimez la ligne n°4, la prochaine ligne que vous insérerez sera la ligne n°6. Le n°4 ne sera plus jamais utilisé, sauf si vous spécifiez le contraire dans la requête SQL.
Les clés primaires ne sont en effet pas verrouillées en écriture. Vous pouvez donc exécuter un UPDATE ma_ligne_6 SET id=’4′. Mais cela ne résoudrait pas le problème pour autant, puisqu’à la prochaine insertion, l’id serait 7, MySQL considérant que l’enregistrement 6 a existé…
En revanche, si vous supprimez la table elle-même et que vous la recréez ensuite, les id seront normalisés : les “vides” seront “comblés”.
Si vous voulez “normaliser” les id de la table T1, vous pouvez procéder ainsi :
- créer une table vierge T2 (avec une clé primaire vierge, donc)
- copier les données de la table à normaliser T1 vers cette table vierge T2
- supprimer la table à normaliser T1 puis la recréer (elle sera alors vierge)
- copier les données dans l’autre sens, de la table T2 vers la table T1.
- supprimer la table T2.
En général, il n’est pas utile de faire cela. Si vous en éprouvez le besoin, c’est probablement que votre programme est mal structuré.
Dans tous les cas, cette méthode n’est pas utilisable si d’autres tables sont liées par des clés étrangères à la table dont vous voulez normaliser les id.
je veux afficiher des images a partire de la base des données mais de façon de division càd dans chaque pages je veux affichier 5 images avec un lien vers une autre page
tout en php
Bonjour,
Juste un petit coucou de passage pour dire MERCI.
Excellent travail.
Bonjour,
je viens de lire ce très bon tuto que je vais m’empresser d’utiliser pour mon propre site.
Un grand merci pour tout le temps passé à l’écrire et pour mettre ainsi à la dsipo de tous tes connaisances!
Steve.
Bonjour
voila est ce que vous pouvez m’aider comment on peut importer des données cimatiques dans la base sachant que c’est un fichier format ascii sans séparateur par des commandes sql.
salutations
mohamed
Bonjour cette méthode est elle toujours d’actualité car en modifiant juste les paramétres de bases je n’ai que des messages d’erreurs.
Cordialement
Fred
Oui, c’est toujours d’actualité.
Bonjour merci tout d’abord pour votre tuto qui est excellent.
Mais en fait je reste bloqué sur la premiere étape sur la création du fichier connexion
Dés le départ j’essaye de rentrer les codes suivant
$host = “db115.1and1.fr”; /* L’adresse du serveur */
j’utilise PHPedit qui m’indique une erreur.
et sur internet j’ai l’erreur suivante:
“Parse error: syntax error, unexpected T_DNUMBER in /homepages/17/d118857659/htdocs/php/connexion.php on line 2″
Cordialement
fred
Essayez en remplaçant les guillemets obliques (“ xxx ”) par des guillemets droits (” xxx “). Encore mieux, remplacez les par des apostrophes (‘ xxx ‘).
Merci beaucoup pour votre éfficacité et votre tuto
REbonjour
J’ai pu hier créer le fichier connexion.php, grâce à vos conseils.
Maintenant j’ai créee le fichier installation.php
j’ai eu cette erreur là
Fatal error: Call to undefined function: import() in /homepages/17/d118857659/htdocs/php/installation.php on line 2
import(“connexion.php”);
désolé pour toutes ces demandes
Remplacez “import” par “include” ou “require”.
Bonjour pouvez vous m’indiquer si votre code en fait est plus adapté sur un ancien format de php. Car les fichiers suivants fonctionnent:
Connexion.php
installation.php
Formulaire.Php
Mais en remplacant les ” par ” (droit)
et en remplacant import par “include”
Maintenant j’ai un message d’erreur sur le fichier ajouter.php
Voici le code aprés remplacement des guillemets
Et voici mon message d’erreur
Parse error: syntax error, unexpected ‘”‘, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /homepages/17/d118857659/htdocs/php/ajouter.php on line 4
Cordialement
Fred
L’utilisation d’import était une erreur dans l’article, qui a été corrigée.
Tous les autres problèmes que vous rencontrez viennent du fait que vous faites des copier/coller du code au lieu de le taper “à la main”. Cela ne peut pas fonctionner. Si vous tenez vraiment à faire du copier/coller, faites un collage spécial en plain text.
En l’occurrence, le message d’erreur indique qu’à la ligne 4 du fichier ajouter.php, vous avez un guillemet issu du copier/coller, qui n’est pas un guillemet droit.
La réponse n°34 ci-dessus réglera votre problème. Mais pour la suite, faites en sorte d’avoir le même encodage dans la base de données, dans le header html, pour les fichiers PHP.
Un éditeur digne de ce nom devrait vous permettre de choisir l’encodage de vos fichiers (fichier>enregistrer sous). Utilisez UTF-8 ou ISO-8859-1 (ISO-Latin-1) selon l’encodage de notre base de données (en général ISO-Latin-1 chez les hébergeurs français). Indiquez <meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″/> dans votre header html.
Probleme dans le fichier Ajouter.php:
Parse error: syntax error, unexpected T_STRING in /home/m/medialike/html/test/radio/ajouter.php on line 8
——————–
———————
Je ne sais pas ce qu’il y a à votre ligne 8. Si vous avez recopié à la main le code, notez que “VALUES(”,’”, s’écrit guillemets VALUES parenthèse apostrophe apostrophe virgule apostrophe guillemet.
Voici le code dans le fichier ajouter.php
include(”connexion.php”);
if ($POST['nom'] != ” AND $POST['urlflux'] != ”)
{
connexion();
$sql = “INSERT INTO radio(id,nom,urlflux) “; <=== c’est cette ligne qui pose problème.
$sql .= “VALUES(”,’$_POST['nom']‘,’$_POST['urlflux']‘)”;
mysql_query($sql) or die(mysql_error());
}
else
{
echo ‘Erreur ! Vous devez remplir tous les champs !’;
}
C’est le même problème que fred (ci-dessus, commentaires n°28 et 29). Vous utilisez des guillemets courbes ( “abcd” ) au lieu des guillemets droits ( "abcd" ). Cela est dû au copier-coller.
Il y a aussi une autre erreur (que l’on ne retrouve pas dans le texte de l’article) : les variables php peuvent être directement insérées dans un chaîne (exemple : $nom = “world”; echo “hello $nom”;), mais pas les tableaux. Il faut donc fermer la chaîne avant d’insérer $_POST['...'] et la réouvrir après (exemple : echo “hello “.$_POST['nom'].” !”;)
Remplacez vos deux lignes par celles-ci (vous pouvez copier-coller) :
$sql = "INSERT INTO radio(id,nom,urlflux) ";
$sql .= "VALUES('','".$_POST['nom']."','".$_POST['urlflux']."')";
Les guillemets ont été modifiés dans l’article, pour que le copier/coller du code ne cause plus ce problème.
Quel logiciel ?
Bonjour,
Je cherche à construire une base de donnée qui devrait contenir plusieurs centaines de milliers de données (expressions). Celles-ci sont classées en 8 catégories différentes.
A terme, l’idée est de pouvoir introduire une donnée et que celle-ci soit classée automatiquement dans une catégorie. Càd, la même donnée est déjà classée dans la base de donnée. Le logiciel trouve la donnée dans la base de donnée et associe à la donnée la catégorie.
Ex. “Faire du basket” est associé à “Sport” dans la base de donnée. J’entre “Faire du basket” dans une liste, puis l’expression reçoit automatiquement comme attribution “Sport”.
Quel logiciel puis-je utiliser pour faire cela ?
Borland Paradox; Filemaker; IBM DB2; Ingres; Interbase; Microsoft SQL server; Microsoft Access; Microsoft FoxPro; Oracle; Sybase; MySQL; PostgreSQL; mSQL; SQL Server 11 ?
Merci!
Bonjour,
tous les logiciels que vous citez permettez de faire ce que vous cherchez à faire. Cependant, il ne permettront pas tous de le faire comme vous voulez le faire.
Il vous faut une base de données relationnelle, avec 2 tables. La première table pourrait avoir le schéma suivant : id, activité. La seconde table serait ainsi : id, id_externe, nom_de_l’_activité.
Ces deux bases stockeraient les données et votre logiciel se contenterait d’associer l’id_externe de chaque enregistrement de la seconde table, à un l’id d’un enregistrement de la première table.
Pour reprendre l’exemple que vous donnez :
TABLE 1
id activité
1 Sport
2 Lecture
TABLE 2
id id_externe nom_de_l’_activité
1 1 Basket
2 1 Football
3 2 Romans policiers
4 2 Littérature scientifique
etc…
Pour l’association automatique des données, c’est assez simple. Schématiquement :
- SI table2.nom_de_l’_activité N’EXISTE PAS
– CRÉER table2.nom_de_l’activité
– ASSOCIER table2.id_externe À table1.id
- SINON
– ASSOCIER table2.id_externe À table1.id
Le “comment” est plus problématique. C’est ce qui déterminera le logiciel à utiliser.
Des logiciels comme FileMaker ou Access combinent un moteur de base de données avec l’interface graphique qui permet de créer le logiciel d’exploitation des données. C’est la bonne solution pour une base de données personnelle, de contenance moyenne, créée par quelqu’un qui ne connaît pas la programmation.
Des logiciels comme Oracle ou Sybase sont clairement destinés à un usage professionnel. Ils nécessitent une très solide maîtrise de leur fonctionnement, et une grande spécialisation de la personne qui construit le logiciel d’exploitation des données. Ils offrent en outre une très grande puissance, et des moyens de déploiement qui conviennent parfaitement aux grandes entreprises (pour créer une base de données internes sur leur réseau intranet, par exemple).
D’autres logiciels comme MySQL ou PostgreSQL sont plutôt destinés à être combinés aux technologies Web. Si vous voulez que votre base de données soit exploitable en ligne à moindre coût (ces logiciels sont gratuits pour un usage non commercial), c’est la solution à choisir. Mais vous devrez alors créer le logiciel d’exploitation des données “à la main”. Ce n’est pas forcément plus compliqué que maîtriser Oracle ou Sybase, mais cela nécessite tout de même un investissement personnel important.
Par ailleurs, si votre base de données est réellement destinée à contenir plusieurs centaines de milliers d’enregistrements, les logiciels “tout en un” tels que FileMaker ou Access sont à mon avis à exclure.
Le reste dépend du budget : entre Orale et MySQL, il y a vraiment un grosse différence du côté du prix -et c’est un euphémisme-. Voyez aussi les différentes licences d’utilisation qui existent, pour le logiciel serveur : le prix peut varier en fonction du nombre de clients autorisés.
En somme, il n’y a pas de réponse tranchée. Il faut d’abord déterminer comment vous voulez procéder, quel doit être votre résultat final, et quelles sont les contraintes. Ensuite, il sera assez facile de choisir le bon logiciel en procédant par élimination.
bonjour, c’est du très bon travail, continuez !!
j’ai un petit problème qui est facile pour vous, c’est pour mon projet qui s’appelle MANTIS, gestion des bogues..
dans la page d’ajout des beugs, j’ai deux ‘forms’ de type ‘Select’ le première a deux ‘options’ “correctif” et “évolutif” et dans le deuxième ‘Select’ il y aura un ensemble de ‘options’ qui dépend du premier choix, soi “correctif” (le dexième ‘Select’ contiendra des options relatif avec ce choix) ou “évolutif” (la meme chose..)
j’espère que j’ai bien éclairci les problème.. Merci d’avance
si vous voulez me répondre sur mon mail ça sera très gentil de votre part.. Merci
Ce n’est pas très clair, non, dans la mesure où vous ne dites pas ce que vous cherchez à faire :/
S’il s’agit de modifier le second select en fonction de l’option active du premier, cela peut se faire facilement en javascript :
var premier_select = document.getElementById(‘premier_select’).options[document.getElementById('premier_select').selectedIndex].value
if(premier_select == ‘mon choix’) document.getElementById(‘second_select’).selectedIndex = 2
{ 3 trackbacks }