Paramètres $stmp et UPDATE

Répondre
jackbocar
le 13/07/2008 à 11:13
jackbocar
Bonjour,

Peux-on utiliser ses paramètres pour faire un UPDATE table SET :
<?php
$stmt = mysqli_prepare($db, "UPDATE table SET
?>


Si c'est possible, merci de me faire un exemple, je n'y parviens pas.

Mon code :

<?php

if (isset($_POST['auteur']) && isset($_POST['categorie']) && isset($_POST['image']) && isset($_POST['titre']) && isset($_POST['menu']) && isset($_POST['news']) && isset($_POST['isbn']) && isset($_POST['visible']) && is_numeric($_POST['visible'])) {

if ($db = @mysqli_connect('localhost', 'jackbocar', 'password')) {
mysqli_select_db($db, 'php5');
$stmt = mysqli_prepare($db, "UPDATE table SET (auteur, categorie, image, titre, menu, news, isbn, visible) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

$auteur = mysqli_real_escape_string($db, $_POST['auteur']);
$categorie = mysqli_real_escape_string($db, $_POST['categorie']);
$image = mysqli_real_escape_string($db, $_POST['image']);
$titre = mysqli_real_escape_string($db, $_POST['titre']);
$menu = mysqli_real_escape_string($db, $_POST['menu']);
$news = mysqli_real_escape_string($db, $_POST['news']);
$isbn = mysqli_real_escape_string($db, $_POST['isbn']);
$visible = intval($db, $_POST['visible']);

mysqli_stmt_bind_param($stmt, 'sssssssi', $auteur, $categorie, $image, $titre, $menu, $news, $isbn, $visible);
if (mysqli_stmt_execute($stmt)) {
echo 'Ouvrage sauvé.';
} else {
echo 'Erreur lors de l\'écriture du livre.';
}
mysqli_close($db);
} else {
echo 'Connection failed.';
}
}
?>


Merci

Jack Bocar
jackbocar
le 16/07/2008 à 13:32
jackbocar
Bonjour,

Merci de ta réponse, en farfouillant un peu partout, j'ai trouvé ceci :

<?php
include('connexion.php');

$titre = $_POST['titre'];
$nouvelle = $_POST['nouvelle'];
$id = $_POST['id'];

$query = sprintf("UPDATE MA BASE SET titre = '%s', nouvelle = '%s' WHERE id = '%s'",
mysql_real_escape_string($titre),
mysql_real_escape_string($nouvelle),
mysql_real_escape_string($id));

echo $query;

$db = NEW mysqli;
if ($db->requete($query)==true){
echo "<center>Modification réussi.</center>";
}
?>


Je test pour voir les résultats, mais si vous avez une autre idée, elle est la bien venue

Jack Bocar
moogli
le 16/07/2008 à 16:51
moogli
si j'ai bien tout lu je crois que tu ne peut pas utiliser le prépare pour un update, je conseil de bien relire la doc à se sujet la.

si non sur le principe ce que tu a mis en dernier code devrait fonctionner, sinon y a la simple utilisation de la concaténation ;)

@+
Il en faut peu pour être heureux !!!!!
jackbocar
le 16/07/2008 à 19:02
jackbocar
Bonjour,

Oui, tu as raison, pour "utilisation de la concaténation", c'est ce que j'utilise en ce moment.

Mais, je voudrais arriver à n'utiliser que du codage PHP5.

Et puis, j'ai passé des heures à rechercher dans des livres sur Internet et effectivement, je n'ai rien vu avec PREPARE. Je change pour le script de mon dernier poste. Et on verra bien si c'est fonctionnel.

Jack Bocar
LupusMic
le 17/07/2008 à 13:40
LupusMic
Je trouve les exemples de la documentation officielle très parlants. Tu devrais la relire.

<?php
$dbcon = new mysqli(/* ... */) ;
$stmt = $dbcon->stmt_init() ;
$stmt->prepare('update nouvelles set titre = ?, nouvelle = ? where id = ?') ;
// on a pas besoin de recourir à mysql_escape_string avec les statement
$stmt->bind_param('ssi', $_POST['titre'], $_POST['nouvelle'], $_POST['id']) ;
$stmt->execute() ;
if($stmt->affected_rows > 0)
/* modif effectuée */ ;
?>

Bien sûr, il faudra veiller au retour de chaque fonction utilisée.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 17/07/2008 à 18:39
jackbocar
Bonjour,

Merci des infos, je vais tester.

Donne moi l'adresse où tu trouves ces informations.

Je n'ai pas encore trouvé un site pas plus sur php.net qui donne les infos que tu viens de me donner.

Jack Bocar
LupusMic
le 18/07/2008 à 09:59
LupusMic
Toutes les informations sont dans la documentation. Bien sûr il faut lire la documentation des classes et des fonctions, mais aussi les commentaires qui sont souvent très intéressants.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 18/07/2008 à 11:49
jackbocar
Bonjour,

Merci du lien, je connaissais cette page et je l'ai parcourue des dizaines de fois.

J'avoue en recherchant d'après le modèle de code que tu m'as donné, j'ai trouvé :
http://fr.php.net/manual/fr/mysqli.prepare.php
Mais, je n'aurais jamais pensé à utiliser ce codage pour UPDATE SET.

Tu me dis : "mais aussi les commentaires qui sont souvent très intéressants". Oui, bien sûr, mais, à aucun moment sur cette page, j'ai vu que l'on pouvait utiliser ce code avec UPDATE.

De plus mille mercis pour ton aide, j'ai enfin réussi à me faire un codage PHP5 pour mon UPDATE, sans être obligé de passer la "concaténation".


Jack Bocar

PS, pense à me donner si tu en as des informations sur la construction des arbres, liens, livres à acheter, enfin tous ce qui pourrait m'être utile pour envisager un nouveau système de codage.
LupusMic
le 18/07/2008 à 15:46
LupusMic
Je comprends mieux ton soucis, c'était la syntaxe SQL de Update qui te perturbait. Pour ça il faut aussi utiliser la doc en ligne de MySQL. La description de la syntaxe n'y est pas des plus accessible, mais on s'en sort.

Si l'anglais n'est pas un problème, je peux te conseiller « php|architect's - Guide to PHP Design Pattern » isbn:0-9735898-2-5
Ce bouquin développe l'usage des design patterns appliqués au PHP, et donne pas mal d'idées intéressantes.

Ensuite, pour l'algorithmie, ça va être plus dur. Si tu n'as pas peur, tu peux regarder du côté des ouvrages Java ou C++ (voir C). Les meilleurs livres sont édités aux éditions O'Reilly. À savoir que, malheureusement, O'Reilly France ferme ces portes. Les livres en français risquent donc de devenir rare chez cet éditeur.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre
LoadingChargement en cours