Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Conseils et Astuces


Dans cette rubrique, je vous propose quelques Trucs et Astuces pour débutants et directement liés à PHP & Mysql

Les portions de code dans cette rubrique sont bien évidemment adaptables à vos propres applications et scripts

Dans le même ordre d'idée, nos méthodes ne sont pas les seules et vous pourrez trouver d'autres manières de parvenir à des résultats totalement similaires.

Vous êtes libre de choisir vos propres méthodes, sans tenir compte de notre manière de procéder. Nous pensons simplement que nos portions de code sont optimisées aux actions qu'elles traitent.

1) Vérifier si une valeur est déjà présente dans une table.

Simple, facile, rapide avec COUNT(*)

<?php
$req="select count(*) from la_table where le_champ='".$la_valeur_a_vérifier."'";
$res=mysql_query($req);
if(mysql_result($res,0)==0)
{
// la valeur n'existe pas -> action appropriée
}
else
{
// valeur existe -> action appropriée
}
?>
Il y a néanmoins une méthode plus simple : utiliser la contrainte UNIQUE sur le champ pseudo de la table ce qui empêchera tout enregistrement d'une pseudo identique.

2) Usage de !empty() vs isset()

Dans les codes des débutants on trouve trop souvent ce genre de syntaxe :
Exemple 1
<?php
if (isset($_POST['Commentaire']) AND isset($_POST['Auteur']))
{
if (!empty($_POST['Commentaire']) AND !empty($_POST['Auteur']))
{
...........
?>


Exemple 2
<?php
if(isset($_POST["typerech"]) and isset($_POST["keyword"]))
{
$typerech=$_POST["typerech"];
$keyword=$_POST["keyword"];
if(empty($keyword))
{
...........
?>

Bref isset et !empty utilisé l'un après l'autre sur les mêmes variables.
Double emploi, donc totalement inutile.

En prenant comme source le deuxième exemple ci-dessus, il suffit simplement de faire ceci :

<?php
if(!empty($_POST['typerech']) && !empty($_POST['keyword']))
{
// le script
}
else
{
// faut remplir les champs
}  
?>

A RETENIR
isset ne vérifie que si une variable est déclarée alors que !empty vérifie que :

    * le champ n'est pas vide
    * la valeur n'est pas égale à zéro
    * et donc, forcément, que la variable existe

3) Un copyright toujours à jour sur vos sites

Dans votre système de pseudo-frames, dans le fichier de bas de page nommé foot.php par exemple, il vous suffit d'écrire cette simple ligne :

<?php
$cop=2006;
echo '&copy; ',$cop,' ',($cop<date('Y')) ? '- '.date('Y') : '';
?>

Ou directement en dur, sans la variable $cop, comme ça :
<?php
echo '&copy; 2006 ',(2006<date('Y')) ? '- '.date('Y') : '';
?>

4) Sortez votre requête du mysql_query -> "Débuguer" facilement...

Dans vos phases de développement, je vous conseille vivement de sortir vos requêtes des query. Je m'explique :
Très souvent, pour ne pas dire tout le temps, je vois vos codes libellés comme ceci :
<?php
$result=mysql_query("INSERT INTO latable VALUES ('', '".$nom."', '".$prenom."', '".$age."');
?>

Oui et quoi... me direz-vous, c'est pas bon ?
Si, c'est bon, mais si la requête plante ou n'enregistre rien, vous ne saurez pas forcément pourquoi et vous chercherez parfois un moment avant de trouver.

Un bug, rien de plus énervant à trouver parfois !
Or vous le savez tous et celui qui l'ignore va l'apprendre, le meilleur débugueur de script c'est ECHO
Hé oui, un simple echo vous permet d'afficher vos variables et requêtes afin d'en vérifier le contenu.
Le problème avec la requête précédente c'est que si vous faites un echo $result; cela va vous afficher une ressource et non pas le contenu de la requête. Pour l'obtenir il faut modifier votre ligne comme ceci :
<?php
$requete="INSERT INTO latable VALUES ('', '".$nom."', '".$prenom."', '".$age."',... )";
$result=mysql_query($requete);

echo $requete;
?>

Et voilà, on a séparé la requête du mysql_query() ce qui permet en cas de bug de vérifier, via un echo $requete; que le contenu de la requête est correct et correspond bien à ce qui est attendu.

5) Un bête truc pour éviter les robots spammeurs

Simple et efficace !
Il vous suffit de créer un simple champ type="text" dans lequel une réponse à une question simple doit être entrée.
On vérifie que le champ contienne la bonne réponse et si oui, on valide le formulaire. Dans le cas contraire on fait autre chose.

<?php
if(!empty($_POST))
{
if(!empty($_POST['verif']) && $_POST['verif']=='12')
{
echo 'ok, on traite le formulaire';
}
else
{
echo '<a href="javascript:history.go(-1);">Répondez à la question svp</a>';
}
}
else
{
echo '<form method="post" action="#">
<table class="bord2">
<tr><td colspan="2" style="text-align:center;font-weight:bold;">Mon formulaire à vérifier</td></tr>
<tr><td>Nom :</td><td><input type="text" name="nom" /></td></tr>
<tr><td>Prénom :</td><td><input type="text" name="prenom" /></td></tr>
<tr><td colspan="2">
Question : combien font 3 multiplié par 4 ?
<input type="" name="verif" />
<br />
<input type="submit" value="Envoyer les données" /></td></tr>
</table>
</form>';
}
?>
ADAM Benjamin 2008 | Admin