Mini liste générique affichant une table mysql et permettant l'ajout ou la suppression, avec ou sans mot de passe, xhtml/css

Description

Grâce à une seule page de php/xhtml/css/javascript :
Le code va lire votre table (par exemple une liste de courses, une guest list,...) et va afficher ses données correctement formatées, avec une boite de login si vous l'avez décidé.
si vous êtes loggué ou bien si vous avez désactivé le logging, vous pourrez alors ajouter et supprimer des lignes.
une restriction cependant : la table mysql doit contenir comme premier champ une clé primaire de type int et auto_increment (c'est l'id)
voila :)

Source / Exemple :


<?php
/* ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' */
/*                   Script made by mOut on april 2005                   */
/*                         updated on june 2007                          */
/*                    www.mout.fr - mout85@gmail.com                     */
/*                                   ©                                   */
/* ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' */

/* =========================== CONFIGURATION =========================== */

//titre (et sous-titre) de votre page et adresse e-mail de contact :
$titre              = 'Titre';
$soustitre          = 'Sous-titre';
$email              = 'vous@domaine.com';
//largeur de chaque colonne (une largeur de 10 fait 70 pixels) :
$largeurcolonnes    = 20;
//colonne a trier (0 pour la clé, ou bien 1 ou 2 ou 3...) :
$orderby            = 0;

//----------------------------------------------------
//paramètres de votre base de données mysql :
$mysql['server']    = ''; //free: sql.free.fr
$mysql['login']     = '';
$mysql['password']  = '';
$mysql['database']  = ''; //free: votre login
$mysql['table']     = '';
//ATTENTION, votre table doit contenir une clé primaire en auto_increment 
//en premier champ de table (non affichée ensuite ici), les champs suivants
//constituant ceux affichés (donc au choix TEXT, VARCHAR, INT, etc.)

//----------------------------------------------------
//protégé par mot de passe (true/false) :
$pp                 = true;
//si true, alors indiquez le mot de passe :
$password           = 'motdepasse';

/* ====================== FIN DE LA CONFIGURATION ====================== */

error_reporting(0); //error_reporting(E_ALL); si vous avez des problèmes

$self = $_SERVER['PHP_SELF'];

@session_start();
$admin = false;
if(isset($_POST['pass']) && $_POST['pass']==$password)
    $admin = true;
elseif(isset($_SESSION['pass']) && $_SESSION['pass']===true)
    $admin = true;
$_SESSION['pass'] = $admin;

mysql_connect($mysql['server'],$mysql['login'],$mysql['password'])
    or die('Erreur lors de la connexion à la base MySQL : '.mysql_error());

mysql_select_db($mysql['database'])
    or die('Erreur lors du choix de la table MySQL : '.mysql_error());

$r = mysql_query('SELECT * FROM '.$mysql['table'])
     or die('Erreur lors de la lecture des données de la table : '.mysql_error());

$numfields = mysql_num_fields($r);

for($i=0;$i<$numfields;$i++)
    $fields[] = mysql_field_name($r,$i);

if(isset($_POST[$fields[1]])){
    if(!$pp || ($pp && $admin)){
        $q = "INSERT INTO ".$mysql['table']." (";
        for($i=1;$i<$numfields-1;$i++)
            $q.= $fields[$i].", ";
        $q.= $fields[$numfields-1].") VALUES (";
        for($i=1;$i<$numfields-1;$i++)
            $q.= "'".$_POST[$fields[$i]]."', ";
        $q.= "'".$_POST[$fields[$numfields-1]]."')";
        mysql_query($q) or die(mysql_error());
    }
    else
        exit("Erreur : vous n'avez pas les droits pour cette action.");
}

if(isset($_GET['delete'])){
    if(!$pp || ($pp && $admin)){
    	$req = 'DELETE FROM '.$mysql['table'].' WHERE '.$_GET['primary'].'='.$_GET['delete'];
    	mysql_query($req) or die('['.$req.'] '.mysql_error());
    }
    else
        exit("Erreur : vous n'avez pas les droits pour cette action.");
}

//on refait la requête de sélection pour actualiser la page :
$r = mysql_query("SELECT * FROM ".$mysql['table']." ORDER BY ".$fields[$orderby]." ASC")
     or die("Erreur lors de la lecture des données de la table : ".mysql_error());

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta http-equiv="Content-Language" content="fr" />
  <title><?php echo $titre; ?></title>
  <script type="text/javascript">
    function post(){
      if(document.getElementById('add_1').value!='')
        document.getElementById('flist').submit();
    }
  </script>
  <style type="text/css" media="screen,print">
    a { text-decoration: none; color: #048; }
    a:hover { color: red; }
    body { font-family: Helvetica, sans-serif; font-size: 12px; }
    th { border-bottom: 1px solid #888; background-color: #eee; }
    tr:hover { background-color: #eee; }
    input:focus { border: 2px solid #888; }
    td,th { height: 22px; }
    th { width: <?php echo $largeurcolonnes*8; ?>px; }
    #actualiser { font-size: 12px; }
    #lb { position: absolute; bottom: 18px; left: 20px; font-size: 10px; position: fixed; }
    #rb { position: absolute; bottom: 10px; right: 28px; position: fixed; }
    img { border: none; }
  </style>
  <style type="text/css" media="print">
    .noprint { display:none; }
    body,table,tr,td { font-size: 12px; }
    td,th { height: 16px; }
  </style>
</head>
<body>

<div style="text-align: center">
  <h1>
    <a href="<?php echo $self; ?>"><?php echo $titre; ?></a>
  </h1>
  <?php echo ( $soustitre!='' ? '<p>'.$soustitre.'</p>' : '' ); ?>
  <h3 id="actualiser" class="noprint">
    <a href="<?php echo $self; ?>">Actualiser la page</a>
  </h3>
</div>

<form method="post" id="flist" action="<?php echo $self; ?>">
<table style="margin-left: auto; margin-right: auto;">
  <?php
  //titres des colonnes :
  echo '<tr>';
  for($i=1;$i<$numfields;$i++)
      echo '<th>'.$fields[$i].'</th>';
  echo '</tr>'."\n";
  
  //lignes de la table :
  $count=0;
  while($l=mysql_fetch_array($r)){
      echo '<tr>';
      for($i=1;$i<$numfields;$i++)
          echo '<td>'.htmlspecialchars($l[$i]).'</td>';
      if(!$pp || ($pp && $admin))
          echo '<td class="noprint"><a href="'.$self.'?primary='.$fields[0].'&delete='.$l[0].'" onclick="return confirm(\'Etes-vous sûr de vouloir supprimer cette entrée ?\')">Del</a></td>';
      echo '</tr>'."\n";
      $count++;
  }
  
  //formulaire d'ajout d'une ligne :
  if(!$pp || ($pp && $admin)){
    if($count<30){
      echo '<tr class="noprint">';
      for($i=1;$i<$numfields;$i++)
          echo '<td><input type="text" size="'.$largeurcolonnes.'" name="'.$fields[$i].'" id="add_'.$i.'" /></td>';
      echo '<td style="height: 30px">';
      echo '<a href="javascript:void(0)" onclick="post()">Add</a>';
      echo '<input type="submit" style="display:none" />';
      echo '</td></tr>'."\n";
    }
    else
      echo '<tr class="noprint"><td colspan="3"><b>Liste pleine.</b></td></tr>'."\n";
  }
  ?>
</table>
</form>

<p class="noprint"> </p><p class="noprint" style="text-align:center"><?php echo $count; ?> total records | <a href="http://www.mout.fr/">made by mOut</a></p>

<div id="lb" class="noprint">Contact : <a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a>.</div>
<?php
if(!$admin && $pp){
    //attention pour xhtml, certains serveurs insèrent un input hidden pour le session_id, juste après le <form> :
    echo '<form method="post" id="fadmin" action="'.$self.'">';
    echo '<div id="rb" class="noprint"><p>';
    echo '<input type="password" name="pass" id="pass" size="10" /> ';
    echo '<a href="javascript:void(0)" onclick="document.getElementById(\'fadmin\').submit();">Admin</a>';
    echo '<input style="display:none" type="submit" />';
    echo '</p></div></form>';
    echo '<script type="text/javascript"> document.getElementById(\'pass\').focus(); </script>';
}
else
    echo '<script type="text/javascript"> document.getElementById(\'add_1\').focus(); </script>';
?>

</body>
</html>

Conclusion :


attention à l'encodage ! ici c'est spécifié ISO-8859-1, donc il faut enregistrer le fichier texte PHP en ANSI, mais si votre base est en UTF-8, enregistrez-le en UTF-8 et mettez à jour la balise META !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.