Accueil
Trucs & Astuces
Scripts
Regex
Annuaire
Articles
.
|
Astuces PHP MySQL
Fonction affichage des pages d'une requête | [15-03-2002] |
Posté par Kaltigore
Voici la fonction permettant d'afficher le nombre de pages d'une requête MySQL.
- $nb_res est le nombre de résultats de la requête sans LIMIT dans cette requête. - $mess_pages est le message qui s'affichera devant le nombre de pages. - $debut est la variable qui est dans l'url définissant les affichages des résultats. - $nbppage est la variable définissant le nombre de messages par page.
<?php
function pages($nb_res,$mess_pages,$debut,$nbppage) { $res_page = $nb_res/$nbppage; $res_page = ceil($res_page); print($mess_pages); $d = 0; while($d != $res_page) { $page = $d+1; $link = $d*$nbppage; if($debut != $link) print "<a href=?&debut=".$link.">".$page."</a> "; else print $page." "; $d++; } }
if (!isset($debut)) $debut = 0;
pages(50, 'Pages: ', $debut, 8);
?> |
|
|
Connexion MySQL + sélection base | [18-01-2002] |
Posté par Lorenzo
Voici la fonction que j'utilise dans tous mes scripts pour me connecter à une base de données.
Attention : toutes les variables doivent être définies en utilisant define(). Pour le nom de la base vous pouvez AUSSI le passer dans les paramètres de la fonction.
<? define('MY_SERV', 'serveur mysql'); // localhost ou autre define('MY_LOG', 'login'); define('MY_PASS', 'mot_de_passe'); define('MY_BD', 'nom_de_la_base'); ?> |
|
<? function my_connec($er_connec=1, $my_bd='', $bd=1, $er_bd=1) { $my_connec=@mysql_connect(MY_SERV,MY_LOG,MY_PASS); if( $my_connec==0 && $er_connec==1 ) { $msg = "CONNECTION MYSQL IMPOSSIBLE : serveur coupé ou mauvais login"; die ("<br><br><b><font size='3' color='red'>$msg</b></font>"); }
if( $bd ) { $my_bd == '' ? $my_bd=MY_BD : $my_bd; if( mysql_select_db($my_bd)==0 && $er_bd==1 ) { $msg = "BASE MYSQL \"$my_bd\" NON TROUVÉ"; die ("<br><br><font size='3' color='red'><b>$msg</b></font>"); } } return $my_connec; } ?> |
|
Comment elle fonctionne ?
1. Aucun des paramètres de la fonction est obligatoire : my_connec(); // fonctionne et va utiliser les 4 vars define() + renvoit les erreurs concernant la connection ou la selection de la base .
my_connec(1,'Base_données',1,1); // -->>
1er paramètre = (0|1) renvoit et coupe (die) le script si la connexion n'est pas réussie. Le mettre à 0 pour désactiver cette fonction.
2eme paramètre = le nom d'une base de données. Si vous laissez vide ('') alors MY_BD sera utilisé.
3eme paramètre = (0|1) active ou désactive la selection d'une base par la fonction y compris celle qui est define().
4eme paramètre = (0|1) active ou désactive le retour d'erreur qui coupe le script quand la base n'est pas valide.
|
Renvoyer le message d'erreur de la dernière action MySQL | [18-01-2002] |
Posté par Lorenzo
<? function my_error($echo=1) { $erreur='N°= '.mysql_errno().' -->> '.mysql_error()."<br>n"; if( $echo ) echo $erreur; else return $erreur; } ?> |
|
En utilisant la fonction comme ca : my_error(); my_error(1); Elle affiche par un echo le N° + texte de la dernière erreur MySQL.
ou alors : $erreur = my_error(0); Ici la fonction stocke dans $erreur la chaine contenant le N° + texte de la dernière erreur MySQL.
|
Combler les trous d'un auto_increment | [26-08-2001] |
Posté par Tom
Je passais par hasard sur le forum (j'préfère quand même le chan :o) et j'ai pas pu m'empêcher de répondre à la question. Voilà pour la p'tite histoire, voilà le truc maintenant ;p Donc :
<? function get_id($champ, $table) { $results = @mysql_query('SELECT ' . $champ . 'FROM ' . $table ); while($id = @mysql_fetch_row($results)) $ids[] = $id[0]; for($i = 1, reset($ids); $id = pos($ids) ; next($ids), $i++) { if($i != $id) I return $i; } return count($ids) + 1; } ?> |
|
On appelle la fonction : $id_libre = get_id('idx', 'table');
Voilà, ça a aidé une fois, j'espère que ça aidera d'autres fois :o)
|
Parser des ENUM | [25-07-2001] |
Posté par jissai
Pour afficher toutes les valeurs d'un champ de type ENUM dans un formulaire, il faut utiliser la requête :
SHOW COLUMNS FROM <table> LIKE '<nom_colone_enum>'
Cette requête retourne un tableau dont seul le champ type est intéressant :
$resultat['Type'] = "enum('valeur1','valeur2',...)"
Voici une fonction qui permet de ranger valeur1, valeur2, ... valeurn dans un tableau pour pouvoir l'utiliser directement avec les scripts trouvés dans la rubrique formulaire.
<? function parse_enum($str) { $reg = "^enum\('(.*)'\)$"; $str = ereg_replace($reg,'\1',$str); return split("[']?,[']?",$str); }
// appel $tablo = parse_enum($resultat['Type']); ?> |
|
|
[1 commentaire]
|
Recherche avec MySQL | [15-07-2001] |
Posté par Frédéric Bouchery
Si vous voulez proposer à vos utilisateurs une recherche avec des caractères génériques du genre "*" et "?", il faut les transformer en "%" et "_" pour que MySQL puisse travailler convenablement avec la commande "like". Voici une astuce pour transformer la recherche :
<? $in = array('|\\\|', '|%|', '|_|', '|\*|', '|\?|'); $out = array('\\', '\%', '\_', '%', '_' ); $where = " champ like '".preg_replace($in,$out,$recherche)."'"; $query = "SELECT ... FROM la_table WHERE " . $where." LIMIT 0,10"; // ... ?> |
|
|
Sélection aléatoire dans la table ... | [11-04-2001] |
Posté par Raphael Ankierman
Pour prendre aléatoirement des enregistrements d'une table utiliser la fonction MySQL RAND() :
|
[1 commentaire]
|
Faire une recherche accentuée dans MySQL | [05-03-2001] |
Posté par Frédéric Bouchery
Pour faire une recherche accentuée dans MySQL :
<? function Conversion($txt) { $in = array ( '/[aàáâãäå]/s', '/[eèéêë]/s', '/[oòóôõöø]/s', '/[cç]/s', '/[iìíîï]/s', '/[uùúûü]/s', '/[yÿý]/s', '/[nñ]/s' ); $out = array ( '[aàáâãäå]', '[eèéêë]', '[oòóôõöø]', '[cç]', '[iìíîï]', '[uùúûü]', '[yÿý]', '[nñ]' ); return preg_replace($in, $out, strtolower($txt)); }
$le_mot = Conversion($le_mot); $query = "SELECT * FROM la_table WHERE LCASE($le_texte) REGEXP '$le_mot'";
// et le reste de votre code ! // [...] ?> |
|
|
Tester si une requête a abouti | [29-01-2001] |
On affiche une ALERTE Javascript si la requête a échoué et on retourne au formulaire de départ, pratique non ? ;)
<? $req = mysql_query("...la requete..."); if (!$req) { echo "<script language=\"Javascript\">\n"; echo "alert('Ooops, la requête a échoué !');\n"; echo "history.back();\n"; echo "</script>\n"; } ?> |
|
|
Tirer un enregistrement au hasard | [15-01-2001] |
Posté par Frédéric Bouchery
Si vous voulez tirer un enregistrement au hasard dans votre base de données, utilisez l'astuce suivante :
1) Faire une requête SELECT COUNT(*) FROM la_table pour connaître le nombre d'enregistrements total de la table qui sera placé dans $count
2) Faire srand((double)microtime()*1000000); pour initialiser le générateur aléatoire
3) Faire $rand = rand(0,$count - 1); pour avoir le nombre aléatoire
4) Enfin, faire une requête : SELECT * FROM la_table LIMIT $rand,1
|
[2 commentaires]
|
Tester ses requêtes MySQL | [07-01-2001] |
Posté par Perrich
Pour pouvoir savoir à tout les coups d'où vient le problème lorsque l'on a une erreur avec MySQL du style Warning : 0 is not a MySQL result :
<? $requete = "SELECT * FROM matable WHERE champ='toto'"; $query = mysql_query($requete) or die ('ERREUR '.$requete.' '.mysql_error()); ?> |
|
Vous aurez ainsi la requête qui pose problème et l'erreur réelle renvoyée par MySQL. Ensuite la correction est plus facile.
|
[4 commentaires]
|
|
|