Post by jaunitBonjour
J'ai commencé hier à tenter de créer une petite appli php/mysql. Je vous
préviens, je suis une vraie quiche.
Dans ce cas là, on ne te mangera pas - "real programmers don't eat
quiche", parait-il !-)
Post by jaunitHistoire de démarrer sur de bonnes bases, pouvez-vous me dire si ce bout de
code vous semble correct
Déjà, est-ce que ça donne le résultat attendu ?
Post by jaunitet un minimum sécurisé svp ? Je me suis basé sur
quelques exemples trouvé çà et là, ainsi que sur un bouquin.
Désolé si je ne suis pas sur le bon groupe.
Attend... C'est bien de PHP que tu parles ? Oui ? Bon alors tu es à la
bonne adresse.
De rien !-)
Post by jaunit<div>
<?php
include('menu.htm');
<HS>
.htm est un peu non-standard. Généralement, on utilise plutôt .html
</HS>
Post by jaunit?>
</div>
<div>
<?php
include('menu_batiments.htm');
?>
</div>
<div>
<?php
include('connect_base.php');
$sql = 'SELECT id_batiment,designation_batiment,nombre_niveaux_batiment FROM
batiments';
$req = mysql_query($sql) or die('Erreur SQL !<br>'
$sql.'<br>'.mysql_error());
Tu affiche la requête dans ton message d'erreur ? Mauvaise idée. Utilise
plutôt une fonction de logging pour garder une trace de l'erreur, et
retourne un joli message à l'utilisateur final.
Post by jaunitwhile($data = mysql_fetch_assoc($req))
{
echo '<br />
Code du bâtiment ::: '.$data['id_batiment'].'<br />
Désignation du bâtiment ::: '.$data['designation_batiment'].'
<br />
Nombre de niveaux ::: '.$data['nombre_niveaux_batiment'].'<br /><br />
';
<HS>
En général, pour présenter des données tabulaires, on utilise une table
</HS>
Post by jaunit}
mysql_close();
?>
Bon, globalement, pour un débutant, c'est correct. Maintenant, il y a
certainement mieux à faire. Par exemple, séparer la partie SQL de la
partie présentation. Le plus courant est de distinguer:
1/ le "modèle", c'est à dire tout le code d'accès aux données. En
l'occurrence, avec par exemple un fichier modeles/batiments.php, dans
lequel tu aura uniquement les fonctions de gestions des bâtiments
(lister les bâtiments, retrouver un bâtiment particulier, ajouter un
bâtiment, supprimer un bâtiment etc). Ici, tu a déjà comme candidat une
fonction lister_batiments():
# modeles/batiments.php
<?php
include('connect_base.php');
function lister_batiments() {
results = Array();
$sql = "SELECT id_batiment, designation_batiment,"
. " nombre_niveaux_batiment "
. " FROM batiments";
$req = mysql_query($sql);
if (is_resource($req)) {
$donnees = Array();
while($data = mysql_fetch_assoc($req)) {
$donnes[] = $data;
}
$results["donnees"] = $donnees;
}
else {
results["erreur"] = mysql_error();
}
return $results;
}
?>
2/ La présentation - on parle généralement d'une "vue". Il s'agit d'une
partie qui sert à présenter le modèle. C'est bien sûr un mélange de html
et de php, mais la seule logique gérée est celle de la présentation:
# vues/liste_batiments.php
<table class="listing">
<thead>
<tr>
<th>id</th>
<th>désignation</th>
<th>nb de niveaux</th>
</tr>
</thead>
<tbody>
<?php foreach($donnees['batiments'] as $batiment) { ?>
<tr>
<td><?php echo $batiment['id'] ?></td>
<td><?php echo $batiment['designation_batiment'] ?></td>
<td><?php echo $batiment['nombre_niveaux_batiment'] ?></td>
</tr>
<?php } //foreach ?>
</tbody>
</table>
<ul class="actions">
<li><a href="ajouter_batiment.php">Ajouter un bâtiment</a></li>
<li><a href="supprimer_batiment.php">Supprimer un bâtiment</a></li>
</ul>
Note que cette vue est un fragment de html - le reste de la page est
construit plus loin...
3/ Le controlleur. C'est la page effectivement appelée par la requête
HTTP, et c'est elle qui est chargée d'appeller le modèle et la vue:
# liste_batiments.php
<?php
include "modeles/batiments.php";
$results = lister_batiments();
inclure "rendu/entete.php";
if (isset($results["donnees"]) {
$batiments = $results["donnees"];
inclure "vues/liste_batiments.php";
}
else {
$erreur = $results["erreur"];
inclure "rendu/erreur.php";
}
inclure "rendu/pied.php";
?>
Et voilà... Bon, après, c'est encore très perfectible. Par exemple:
1/ tu peux vouloir trier/filtrer/paginer la liste de documents
2/ il te faut une possibilité de sélectionner un bâtiment pour modif ou
suppression - en général, on met dans chaque ligne du tableau un lien
pour l'édition et une case à cocher pour sélectionner le batiment à
supprimer.
3/ il serait plus propre (et plus simple) d'avoir une fonction qui
"assemble" l'entete, la vue et le pied de page
Mais bon, si tu débute, tu a encore le temps avant d'en arriver là. Et
puis avant de réinventer la proverbiale roue carrée, autant s'intéresser
aux solutions existantes (genre CakePHP : simple et utilisable - pas une
horreur à la Java avec du XML partout). Mais AMHA, il est préférable
d'avoir quelques notions de développement web avant de venir à ce genre
de solutions - ne serait-ce que pour comprendre ce qu'elles apportent.
Post by jaunit<br />
<a href="nouveau_batiment.php">Ajouter un bâtiment</a> | <a
href="delete_batiment.php">Supprimer un bâtiment</a>
</div>
<HS>
Si tu précise l'encodage dans l'entête de ta page, tu n'a pas besoin de
ces &entitees; à la con.
</HS>
Mes deux centimes...