salut
un souci avec update je n'arrive pas à modifier une entrée dans ma base voici le script:
if(!empty($_POST'id']))
{
try
{
//connection au serveur
$db = new PDO('mysql:host=localhost;dbname=madb', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8'));
}catch(PDOException $e){
echo "Une erreur est survenue lors de la connexion a la BD!.";
echo '<br>'.$e->getMessage();
}
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE fmail SET nom='?', email='?', numero='?' WHERE id='?'";
$sql->setFetchMode(PDO::FETCH_ASSOC);
$d = array(
$_POST'nom'],
$_POST'email'],
$_POST'numero'],
$_POST'id']);
$sql->execute($d);
// $d = null;
}
?>
merci de m'aider je cherche mais :-((
ps
"pour insert et delete select pas de souci ça marche mais là perdu!!!"
Salut,
Je vais peut être dire une betise, mais je pense que tu n'as pas besoin de mettre des ' ' avec un id ( int ).
si tu numero et ton id sont des Int, enleve les guillemets.
et je pense aussi que tu devrais changer
if(!empty($_POST'id'])) => if(isset($_POST'id']))
re, je pense que ta methode n'est pas bonne. essai :
$sql = "UPDATE fmail SET nom='?', email='?', numero='?' WHERE id='?'";
$req = $this->db->prepare($sql);
$d = array($_POST'nom'], $_POST'email'],$_POST'numero'], $_POST'id']);
$req->execute($d);
le probleme viens peut etre du faite que tu n'utilise pas prepare.
tiens moi au courant.
Bonjour,
Je pense qu'il est préférable d'utiliser ce qu'on appel des requêtes préparées. En fait, lorsqu'on passe des variables de l'utilisateur, c'est toujours préférable de valider s'il n'a pas tenter de créer une injection SQL. PDO permet d'ailleurs d'effectuer ce genre de validation, du moins, c'est l'objet qu'il retourne lorsqu'on prépare la requête.
<?php
// Je considére que la variable $db a été initialiser plus haut et qu'il s'agit de l'object PDO.
//$db = new PDO(...);
$variableA = "variableA";
$variableB = 200;
// la méthode PDO::prepare(...) retourne un object PDOStatement. Il s'agit d'une requête préparée.
// D'ailleurs, nous allons initialiser une variable pour utiliser ce PDOStatement.
$PDOStatement = $db->prepare("UPDATE ma_table SET champsA = :variableA, champsB = :variableB");
// Édit: pense à inclure la clause WHERE. :D
// L'idée est de remplacer chaque mot préfixé par le caractère « : », par une valeur en utilisant
// bindParam(nomVariable, valeurVariable), une méthode contenu dans notre instance de PDOStatement.
$PDOStatement->bindParam(":variableA", $variableA); // Tu pourrais spécifier le type en 3ième paramètre,
// mais pour nous c'est inutile étant donné que le
// notre base de données (plutôt, le SQL) parle en
// chaîne de caractères... :-)
$PDOStatement->bindParam(":variableB", $variableB);
// Tu as d'ailleurs la possibilité de remplacer des nomDeVariable par le numéro du paramètre et en
// indiquant des points d'interrogation dans la chaîne de caractères de la requête.
// $PDOStatement = $db->prepare("UPDATE ma_table SET champsA = ?, champsB = ?");
// $PDOStatement->bindParam(1, $variableA);
// $PDOStatement->bindParam(2, $variableB);
// Ensuite, on peut exécuter cette requête préparer.
$PDOStatement->execute(); // Cette méthode retourne true ou false, indiquant si la requête a exécuté.
?>
La réponse de Darkney fait aussi partie de la solution proposé par PHP.net. Je te conseil de passer voir la document relative à PDO.
Edit: En fait, je réalise que c'est que tu as fait (la requête préparée, néanmoins, je laisse l'explication... :-) Cela dit, tu n'as pas besoin de changer le mode de récupération des données (PDOStatement::setFetchMode(...)) puisque ta requête UPDATE ne retourne pas de données.
http://php.net/manual/fr/book.pdo.php
http://php.net/manual/fr/class.pdostatement.php
Bonne chance,
Ramz.
je pense avoir compris ton erreur,
je pense que cela proviens de ton id.
pour chacun des champs tu fais $_POST'name du champ'],
or ton id se trouve sur le submit qui s'appelle submit et non pas id donc je pense que ton $_POST'id] dans ton tableau $d est vide car il n'existe pas.
après essai de faire un var_dump de $_POST pour voir si tu récupére bien toutes les données avant de faire ta requête update.
Moi je te conseillerai de faire un champ de type hidden pour stocker l'id et donc de mettre une bonne valeur a ton champ submit.
du genre :
<input type="hiddden" name="id" value="<?php echo $req'id']; ?>" >
Nom: <input type="text" name="nom" value="<?php echo $req'nom']; ?>"> <br>
...
Modifier : <input type="submit" name="submit" value="Modifier"><br><hr>
Pense à faire des var_dump ou print_r :-)
<?php var_dump($_POST); ?>
<pre>
<?php print_r($_POST); ?>
</pre>
Oui enleve $this désole c'est parce que moi je code en POO, toi utilise direct $db.
Donc ton formulaire récupère bien les données, et le var_dump en page d'update est bon, je comprend pas pourquoi ton update ne se fait pas
oui si tu veux choisir l'entrée a modifier, il faut que tu fasse une liste déroulante, ou une page avant ton formulaire pour sélectionner l'entrée.
car a l'heure actuelle, même si tu fais un "select * ..." , il va compléter ton form avec le dernier enregistrement.
bien merci pour tous tes conseils c'est ce que je pensais je vais faire ceci
merci aussi à Ramzz1994
salut j'ai essayé ta soluce Darkney ça ne marche pas rien ne change dans la base
j'ai pas d'erreur est ce que cela vient du formulaire:
PAGE FORMULAIRE
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=arbin', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8'));
}catch(PDOException $e){
echo "Une erreur est survenue lors de la connexion a la DB!.";
echo "<br>".$e->getMessage();
}
$bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
?>
<form method="post" action="pdo2.php">
<?php
try
{
$sql = "SELECT * FROM fmail";
$rep = $bdd->query($sql);
?>
Nom: <input type="text" name="nom" value="<?php echo $req'nom']; ?>"> <br>
Mail: <input type="text" name="email" value="<?php echo $req'email']; ?>"><br>
Numero: <input type="text" name="numero" value="<?php echo $req'numero']; ?>">
<br>
<br>
Modifier : <input type="submit" name="submit" value="<?php echo $req'id']; ?>"><br><hr>
<?php
}
}catch(PDOException $e){
echo "Un probleme avec la(es) requete(s)";
}
?>
</form>
et donc PAGE MODIF (changé):
<?php
if(isset($_POST'id']))
{
try
{
//connection au serveur
$db = new PDO('mysql:host=localhost;dbname=arbin', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8'));
}catch(PDOException $e){
echo "Une erreur est survenue lors de la connexion a la DB!.";
echo '<br>'.$e->getMessage();
}
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE fmail SET nom='?', email='?', numero='?' WHERE id='?'";
$req = $this->db->prepare($sql);
$d = array($_POST'nom'], $_POST'email'],$_POST'numero'], $_POST'id']);
$req->execute($d);
}
?>
merci encore pour votre aide
Voila var-dump et print-r
array (size=5)
'id' => string '50' (length=2)
'nom' => string 'toto' (length=4)
'email' => string 'trest@trest.fr' (length=14)
'numero' => string '123' (length=3)
'submit' => string 'Modifier' (length=8)
array (size=5)
'id' => string '50' (length=2)
'nom' => string 'toto' (length=4)
'email' => string 'trest@trest.fr' (length=14)
'numero' => string '123' (length=3)
'submit' => string 'Modifier' (length=8)
Array
(
[id] => 50
[nom] => toto
[email] => trest@trest.fr
[numero] => 123
[submit] => Modifier
)
c'est la derniere insert qui apparait mais j'ai inserer 4 autres
qui n'apparaissent pas.
$this provoque une erreur dons je l'ai enlevé
je suis dans le flou complet aussi je peux modifier que ma derniere entrée
mais pas les autres merci encore