phpInfo.netLes ArchivesLes éléPHPants

  
  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]

Synseo