Aide pour une CLASS PHP PDO

Répondre
jackbocar
le 07/07/2014 à 09:43
jackbocar
Bonjour

J'ai trouvé sur un site spécialisé en PHP et PDO, une CLASS CRUD qui est très bien faite et rapide pour l'affichage des données.

J'ai réussi à utiliser sans problème du SELECT et de l'INSERT INTO.

Je n'arrive pas à utiliser la fonction UPDATE.

Je vous donne d'adresse du site en question, si quelqu’un a le temps d'essayer cette CLASS CRUD, et la faire fonctionner correctement dans toutes ses fonctions, merci de nous faire part de ses conclusions avec son code pour UPDATE et DELETTE.

L'adresse du site pour le CODE est : http://www.phpro.org/tutorials/Easy-Access-With-PDO-CRUD.html

L'adresse du site pour la CLASS est : http://www.phpro.org/classes/PDO-CRUD.html


Je vous fournis mes informations pour SELECT et INSERT INTO.
<?php
include_once 'crud.class.php';
$crud = new crud();

$crud->dsn = "mysql:dbname=BASE-DONNEES;host=localhost";
$crud->username = 'USENAME';
$crud->password = 'PASSWORD';

$records = $crud->rawSelect('SELECT * FROM TABLE');

$rows = $records->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {
//code pour affichage des données
print '
<span>'.$row['col_name'].'</span>
<span>'.$row['col_name'].'</span>
<span>'.$row['col_name'].'</span>
<span>'.$row['col_name'].'</span>
<span>'.$row['col_name'].'</span>
';
}
?>


AJOUT DE DONNEES
<?php
include 'crud.class.php';
$crud = new crud();

$crud->dsn = "mysql:dbname=BASE DONNEES;host=localhost";
$crud->username = 'USERNAME';
$crud->password = 'PASSWORD';

$values = array(
array("col_name"=>"".$_POST['col_name']."", "col_name"=>"".$_POST['col_name'].""),
);
$crud->dbInsert('tbl_name', $values);
header('Location: index.php');
exit();
?>


Je vous remercie par avance de votre aide et de vos conclusions.

Jackbocar
LupusMic
le 08/07/2014 à 11:37
LupusMic
Tu es certain de "col_name" ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 08/07/2014 à 13:14
jackbocar
Bonjour LupusMic

col_name, c'est juste pour dire colonne, comme si tu avais
$values = array(
array("nom"=>"".$_POST['nom']."", "prenom"=>"".$_POST['prenom'].""),
);

Cette classe est a mon avis excellente, rapide et efficace.

Mon seul problème est que je n'ai jamais réalisé de class, donc je ne sais pas comment faire fonctionner la function $crud->dbUpdate()

Voici ce que j'ai fait dernièrement pour essayer de modifier des données, cela ne fonctionne pas !!!

edit_films.php
<?php
include 'crud.class.php';
$crud = new crud();

$crud->dsn = "mysql:dbname=xxxxxxxxxxxxxxxxxxxxxx;host=localhost";
$crud->username = 'xxxxxxxxxxxxxxxxxxxxxxx';
$crud->password = 'xxxxxxxxxxxxxxxxxxxxx';

$records = $crud->rawSelect('SELECT * FROM films');
$rows = $records->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {

print '<form method="post" action="edit_films.php">
<fieldset>
<p>
<label for="id">ID</label><br />
<input type="text" id="id" name="id" size="1" maxlength="1" value="'.$row['id'].'">
</p>
<p>
<label for="titre">Titre</label><br />
<input type="text" id="titre" name="titre" size="60" maxlength="200" value="'.$row['titre'].'">
</p>
<p>
<label for="menu">Menu</label><br />
<input type="text" id="menu" name="menu" size="60" maxlength="180" value="'.$row['menu'].'">
</p>
<p>
<label for="sortie">Sortie</label><br />
<input type="text" id="sortie" name="sortie" size="20" maxlength="50" value="'.$row['sortie'].'">
</p>
<p>
<label for="realisateur">realisateur</label><br />
<input type="text" id="realisateur" name="realisateur" size="50" maxlength="100" value="'.$row['realisateur'].'">
</p>
<p>
<label for="acteurs">Acteur</label><br />
<input type="text" id="acteurs" name="acteurs" size="80" maxlength="200" value="'.$row['acteurs'].'">
</p>
<p>
<label for="genre">Genre</label><br />
<input type="text" id="genre" name="genre" size="30" maxlength="60" value="'.$row['genre'].'">
</p>
<p>
<label for="nationalite">Nationalite</label><br />
<input type="text" id="nationalite" name="nationalite" size="30" maxlength="60" value="'.$row['nationalite'].'">
</p>
<p>
<label for="news">Synopsis</label><br />
<textarea id="news" name="news" cols="60" rows="10">'.$row['news'].'</textarea>
</p>
<p>
<label for="casting">Casting</label><br />
<textarea id="casting" name="casting" cols="60" rows="10">'.$row['casting'].'</textarea>
</p>
<p>
<label for="visible">Visible</label><br />
<input type="text" id="visible" name="visible" size="1" maxlength="1" value="'.$row['visible'].'">
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</form>';
}
$crud->dbUpdate('films');
?>




Je te joins le tutoriel
<?php
include 'crud.class.php';
$crud = new crud();

$crud->dsn = "mysql:dbname=xxxxxxxxxxxxxxxxxxxxxx;host=localhost";
$crud->username = 'xxxxxxxxxxxxxxxxxxxxxxx';
$crud->password = 'xxxxxxxxxxxxxxxxxxxxx';


/*** array of values to insert ***/
$values = array(
array('animal_name'=>'bruce', 'animal_type'=>'dingo'),
array('animal_name'=>'bruce', 'animal_type'=>'wombat'),
array('animal_name'=>'bruce', 'animal_type'=>'kiwi'),
array('animal_name'=>'bruce', 'animal_type'=>'kangaroo')
);
/*** insert the array of values ***/
$crud->dbInsert('animals', $values);

/*** select all records from table ***/
$records = $crud->rawSelect('SELECT * FROM animals');

/*** fetch only associative array of values ***/
$rows = $records->fetchAll(PDO::FETCH_ASSOC);

/*** display the records ***/
foreach($rows as $row)
{
foreach($row as $fieldname=>$value)
{
echo $fieldname.' = '.$value.'<br />';
}
echo '<hr />';
}

/*** update the kiwi ***/
$crud->dbUpdate('animals', 'animal_name', 'troy', 'animal_id', 3);

/*** delete the second record ***/
$res = $crud->dbSelect('animals', 'animal_id', 3 );

/*** show the results ***/
foreach($res as $row)
{
echo $row['animal_name'].' = '.$row['animal_type'].'<br />';
}
?>
LupusMic
le 08/07/2014 à 17:36
LupusMic
J'ai posé la question à tout hasard, au cas où tu avais une clé définie plusieurs fois, PHP ne râle pas.

Es-tu certain que PDO se connecte en autocommit ? Le problème que tu rencontres est assez classique : les update et insert ne sont pas envoyés tant que tu ne le requiert pas explicitement ; même en fin de programme. Du coup, il faut appeler la fonction membre commit sur l'objet PDO (ou s'assurer que PDO est en mode auto-commit).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 08/07/2014 à 18:16
jackbocar
Bonjour

Je ne sais pas du tout, vois si ce que tu me dis se trouve dans la CLASS
<?php
class crud{
private $db;

/*----------------------------------------------------------------------------*/
public function __set($name, $value){
switch($name){
case 'username':
$this->username = $value;
break;

case 'password':
$this->password = $value;
break;

case 'dsn':
$this->dsn = $value;
break;

default:
throw new Exception("$name is invalid");
}
}


/*----------------------------------------------------------------------------*/
public function __isset($name){
switch($name){
case 'username':
$this->username = null;
break;

case 'password':
$this->password = null;
break;
}
}

/*----------------------------------------------------------------------------*/
public function conn(){
isset($this->username);
isset($this->password);
if (!$this->db instanceof PDO){
$this->db = new PDO($this->dsn, $this->username, $this->password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
}

/*----------------------------------------------------------------------------*/
public function dbSelect($table, $fieldname=null, $id=null){
$this->conn();
$sql = "SELECT * FROM `$table` WHERE `$fieldname`=:id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}


/*----------------------------------------------------------------------------*/
public function rawSelect($sql){
$this->conn();
return $this->db->query($sql);
}

public function rawQuery($sql){
$this->conn();
$this->db->query($sql);
}


/*----------------------------------------------------------------------------*/
public function dbInsert($table, $values){
$this->conn();
/*** snarg the field names from the first array member ***/
$fieldnames = array_keys($values[0]);
/*** now build the query ***/
$size = sizeof($fieldnames);
$i = 1;
$sql = "INSERT INTO $table";
/*** set the field names ***/
$fields = '( ' . implode(' ,', $fieldnames) . ' )';
/*** set the placeholders ***/
$bound = '(:' . implode(', :', $fieldnames) . ' )';
/*** put the query together ***/
$sql .= $fields.' VALUES '.$bound;

/*** prepare and execute ***/
$stmt = $this->db->prepare($sql);
foreach($values as $vals){
$stmt->execute($vals);
}
}


/*----------------------------------------------------------------------------*/
public function dbUpdate($table, $fieldname, $value, $pk, $id){
$this->conn();
$sql = "UPDATE `$table` SET `$fieldname`='{$value}' WHERE `$pk` = :id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->execute();
}


/*----------------------------------------------------------------------------*/
public function dbDelete($table, $fieldname, $id){
$this->conn();
$sql = "DELETE FROM `$table` WHERE `$fieldname` = :id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->execute();
}
} /*** end of class ***/
?>
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours