(09-03-2009, 02:51 PM)Zamentur a écrit : Donc dans cette réponse je disais que je trouvais que la sémantique de ta classe n'était pas génial.
En effet rien que le nom de la classe, "sql", laisse entendre un genre de classe d'abstraction sql qui permet de manier la bdd.
Ici c'est pas le cas c'est une classe qui créer des objets table auquel sont lié des méthodes d'édition graphique et d'édition de la bdd.
:heu: data.class :cogne: adjugé et vendu
Citation :Ensuite je te conseille d'utiliser des commentaire de documentation automatique.
Ça permet notamment d'éviter de devoir commenter chaque méthode quand tu poste un message...
je travaille avec NotePad++ je sais pas si j'ai ça...
en tout cas, voici une deuxieme version qui tiens compte de la plupart des remarques reçues...
Code PHP :
<?php
class data
{
var $mysql ;
var $db ;
var $table;
var $champs ;
/*
* le constructeur avec en param les valeurs de config...
*/
public function __construct($bdd, $host, $username, $password)
{
$this->mysql = mysql_connect($host, $username, $password);
$this->db = mysql_select_db($bdd) ;
}
/**
* le desctructeur ferme la connecion à la base de donnée
**/
public function __destruct()
{
mysql_close($this->mysql);
}
/**
* la method ListEnum genere pour les champs de type ENUM un boite dse selection avec les valeurs reponses enregistrées...
**/
function listEnum($nom_enum , $selected)
{
$donnees =array();
$requete = mysql_query("show columns from ".$this->table." like '$nom_enum' ") or die("show columns from ".$this->table." like '$nom_enum' ".mysql_error());
while($donnees = mysql_fetch_array($requete))
{
if(preg_match('!enum(.+)!', $donnees['Type']))
{
$enum = preg_replace ('!^enum\((.+)\)$!', '$1', $donnees['Type']);
$enum = str_replace ("'", "", $enum);
$enum = explode (',', $enum);
$select .= '<select name="'. $nom_enum.'">';
foreach ($enum as $valeur){
if($selected==$valeur) $select .= ' <option selected value="' . $valeur . '">' . $valeur . '</option>';
else $select .= ' <option value="' . $valeur . '">' . $valeur . '</option>';
}
$select .= '</select>';
}
}
return $select;
}
function table($table )
{
$this->table = $table ;
$sql ="describe ".$this->table." ;" ;
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
while($donnees = mysql_fetch_array($infos))
$tab_donnees[] = $donnees;
foreach($tab_donnees as $data => $club)
{
$titre = $club["Field"];
$value = $club["Default"];
$this->champs->$titre = $value;
}
}
/**
* la methode get permet de recuperer l'objet specifique sur lequel on veut travailler...
**/
public function get($id , $field="")
{
$donnees = array();
if($field=="") $field = "id";
$this->$field = $id;
$sql ="SELECT * FROM `".$this->table."` WHERE $field='$id'" ;
//print "<p>$sql</p>";
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
$donnees = mysql_fetch_array($infos);
if(!empty($donnees))
{
foreach($donnees as $name => $value)
{
if(!is_numeric($name)) $this->champs->$name = $value ;
}
return true;
}
else return false ;
}
public function insert()
{
foreach ($this->champs as $name => $value)
{
if($name!="id" )
{
$into .= ",`$name`" ;
$values .= ",'$value'";
}
}
$into = ltrim($into,",");
$values = ltrim($values,",");
//on supprime les virgules en trop...
$sql = "insert into ".$this->table." ($into) values ($values)";
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
print "<p>$sql</p>";
return mysql_insert_id();//LAST_INSERT_ID() ;
}
public function update()
{
foreach ($this->champs as $name => $value)
{
if( $name!="id")$set .= ",`$name` = '$value'" ;
}
$set = ltrim($set, ",");
//on supprime les virgules en trop...
$sql ="update `".$this->table."` set $set where `id` = '".$this->id."' ";
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
return $this->id;
}
/**
* on doit aussi pouvoir effacer
**/
public function delete($id="")
{
if($id=="")$id = $this->id ;
$sql ="delete from `".$this->table."` where `id` = '".$id."' ";
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
}
/**
* la methode select ne porte pas sur un enregistrement mais sur un ou plusieurs.
* vous fixer la condition, comme une requete normale et on vous retourne les enregistrement sous un array.
**/
public function select($where="" , $order = '')
{
$donnees = array();
$result = array();
if($where != '')
$where = ' WHERE '.$where;
if($order != '')
$order = ' ORDER BY '.$order;
$sql ="SELECT * FROM `".$this->table."` $where $order " ;
//print "<p>$sql</p>";
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
while($donnees = mysql_fetch_array($infos))
{
//is_numeric
$result[] = $donnees ;
}
return $result ;
}
/**
*getChamps permet de controler l'existence d'un champs.
**/
public function getChamps($champs)
{
$retour = false;
foreach( $this->champs as $field => $val)
{
if($field == $champs ) $retour = true;
}
return $retour ;
}
/**
* set permet de modifier sa valeur via l'objet si vous ne preferez pas le faire en dur dans le code.
**/
public function set($champs, $value)
{
$this->champs->$champs = $value ;
}
}
class DataEdit extends data
{
var $table;
var $champs ;
function DataEdit($bdd, $host, $username, $password , $table )
{
parent::__construct($bdd, $host, $username, $password);
$this->table($table );
}
/****
* la fonction add retourne un tableau d'enregistrement. avec des champs de saisie formés selon le type des données.
* en param, le tableau $_POST pour l'insertion des valeur
****/
public function add( $post=null )
{
if(isset($post['add']))
{
foreach($post as $champs => $val )
{
if(getChamps($champs))$this->set($champs, $val);
}
$this->insert();
}
$array_edit = array();
$sql ="describe ".$this->table." ;" ;
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
$array_edit["form_init"] = '<form method="post" >';
$array_edit["table_init"] = '<table>';
$array_edit["caption"] = '<caption><h1>'.$this->table.'</h1></caption>';
while($donnees = mysql_fetch_array($infos))
{
if(eregi('varchar',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" name="'.$donnees["Field"].'" /></td>
</tr>';
if(eregi('int',$donnees["Type"]))
{
if($donnees["Field"]!="id")
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" size="2" name="'.$donnees["Field"].'" /></td>
</tr>';
}
if(eregi('decimal',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" size="2" name="'.$donnees["Field"].'" /></td>
</tr>';
if(eregi('text',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><textarea name="'.$donnees["Field"].'"></textarea></td>
</tr>';
if(eregi('enum',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td>'.$this->listEnum( $donnees['Field'] , '' ).'</td>
</tr>';
}
$array_edit["submit"] = '<tr><td></td><td><input type="submit" name="add" /></td></tr>';
$array_edit["table_close"] = '</table>';
$array_edit["form_close"] = '</form>';
return $array_edit;
}
/**
* la fonction edit retourne un tableau d'edition d'un enregistrement. avec des champs de saisie formés selon le type des données.
* en param, le tableau $_POST pour la modification des valeur
**/
public function edit($id, $post=null )
{
if(isset($post['mod']))
{
foreach($post as $champs => $val )
{
if(getChamps($champs))$this->set($champs, $val);
}
$this->update();
}
$array_edit = array();
$this->get($id);
$sql ="describe ".$this->table." ;" ;
$infos = mysql_query($sql)or die( $sql."\n<br />\n impossible d'executer la reqete : \n<br />\n ".mysql_error() ) ;
$array_edit["form_init"] = '<form method="post" >';
$array_edit["table_init"] = '<table>';
$array_edit["caption"] = '<caption><h1>'.$this->table.'</h1></caption>';
while($donnees = mysql_fetch_array($infos))
{
if(eregi('varchar',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" name="'.$donnees["Field"].'" value="'.$this->champs->$donnees["Field"].'" /></td>
</tr>';
if(eregi('int',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" size="2" name="'.$donnees["Field"].'" value="'.$this->champs->$donnees["Field"].'" /></td>
</tr>';
if(eregi('text',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td><td><textarea name="'.$donnees["Field"].'">'.$this->champs->$donnees["Field"].'</textarea></td>
</tr>';
if(eregi('enum',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td>'.$this->listEnum( $donnees['Field'] , $this->champs->$donnees["Field"] ).'</td>
</tr>';
if(eregi('decimal',$donnees["Type"]))
$array_edit[$donnees["Field"]] = '<tr>
<td>'.$donnees["Field"].'</td>
<td><input type="text" size="2" name="'.$donnees["Field"].'" value="'.$this->champs->$donnees["Field"].'" /></td>
</tr>';
}
$array_edit["submit"] = '<tr><td></td><td><input type="submit" name="mod" /></td></tr>';
$array_edit["table_close"] = '</table>';
$array_edit["form_close"] = '</form>';
return $array_edit;
}
/**
* la fonction inspect fourni un tableau des enregistrement avec un lien vers une page d'ajout/edition ou un mode de suppression
**/
function inspect($condition="" , $url)
{
$table = $this->select($condition);
$array_edit["table_init"] = '<table>';
$array_edit["caption"] = '<caption><h1>'.$this->table.'</h1></caption>';
$array_edit["th"] .= "<tr>";
foreach ($this->champs as $name => $value) $array_edit["th"] .= "<th>$name</th>";
$array_edit["th"] .= "</tr>";
foreach( $table as $ligne )
{
$array_edit[$ligne["id"]] .= "<tr>";
foreach ( $ligne as $i => $piks )
{
// on limite la taille des enregistrements et on y supprime les balise HTML...
$piks = ereg_replace("<[^>]*>", "", trim(strip_tags($piks)) ) ;
if(strlen($piks)>=50) $piks = substr($piks, 0, 50)."...";
if(!is_numeric($i)) // on enleve les doublons en clé numerique
$array_edit[$ligne["id"]] .= "<td>".$piks."</td>";
}
$array_edit[$ligne["id"]] .= "<td>
<a href='".$url."&ordre=edit&table=".$this->table."&id=".$ligne["id"]."' >
<img src='".$url."/images/admin/data/edit.jpg' alt='".$ligne["id"]."' />
</a>
</td>";
$array_edit[$ligne["id"]] .= "<td>
<a href='".$url."&ordre=delete&table=".$this->table."&id=".$ligne["id"]."' >
<img src='".$url."/images/admin/data/delete.gif' alt='".$ligne["id"]."' />
</a>
</td>";
$array_edit[$ligne["id"]] .="</tr>";
}
$array_edit["nouveau"] = "<tr><td>nouveau</td><td><a href='".$url."&ordre=edit&table=".$this->table."' ><img src='".$url."/images/admin/data/ajout.jpg' alt='".$ligne["id"]."' /></a></td></tr>";
$array_edit["table_close"] = '</table>';
return $array_edit;
}
}
?>