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() :
<?
@mysql_connect("serveur","login","pass");
@mysql_select_db("ta_base");
// nombre d'éléments à extraire aléatoirement
$a = 5;
$requete = mysql_query("SELECT * FROM ta_table ORDER BY rand() LIMIT ".$a);
while ($row = mysql_fetch_row($requete))
{
echo $row[0]."<br>";
}
?> |
|
|
[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]
|
|
|