Page 1 sur 1

Mon update n'en fait qu'à sa tête

Posté : 16 févr. 2011, 12:48
par mauvais
Bonjour,

Je débute totalement en php (1 semaine) et comme tout débutant j'ai un problème.

Le "truc" c'est que je ne souhaite faire aucun copier / coller de codes trouvés sur le web qui n'aideraient pas ma compréhenssion donc je fais tout selon ce que j'ai retenu pour vérifier mes légères connaissances et c'est pourquoi mon bout de code vous paraitra certainement "non conventionnel".

Donc : J'ai créé une page pour insérer des actus (ça, pas de problème) via une table "actu" dont les champs sont :

- id (ai / primaire)
- title (varchar)
- message (text)
- idate (datetime)
- signature (varchar)

Le code ci dessous :

Je me doute qu'il n'est pas très judicieux d'insérer mon UPDATE dans la boucle mais le fait est qu'au moins il me met à jour l'actu seulement il met toute la table à jour... logique je suis dans la boucle donc il boucle ma condition.
Lorsque je sors ma condition isset($_POST['update'] de la boucle, aucun message d'erreur mais la requète fonctionne pas et rien n'est à jour, c'est là que j'ai dû faire une erreur.

<?php

$name=$_SESSION['name']; // ça c'est juste la session de l'utilisateur connecté que j'ai fait hier, lors des ajout d'actu son nom devient la signature donc inutile ici.

try
{
	$pdo_actu[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION; $bdd_actu = new PDO('mysql:host=localhost;dbname=testbidon', 'root', '', $pdo_actu);
	$answer=$bdd_actu->query('SELECT * FROM actu ORDER BY idate DESC LIMIT 0,5');
	
	while($done=$answer->fetch())
	{
		?>
        <form method="post" >
        <input type="hidden" name="id" value="<?php $done['id']; ?>" />
        <p>
        <input type="text" name="title" id="textinput" value="<?php echo $done['title']; ?>" />
         posté par <strong><?php echo $done['signature']; ?></strong> le <?php echo $done['idate']; ?>
        </p>
        <?php echo '<img src="../../image_actu/'.$done['image'].'" width="126" height="126" />'; ?>
        <textarea name="message" id="textarea_gestion" ><?php echo $done['message']; ?></textarea>
        <br />
        <div id="message">
        <input type="submit" name="update" value="modifier" class="submit" title="modifier l'actu" /> <input type="submit" name="delete" value="supprimer" class="submit" title="supprimer l'actu" />
        <br />
        </div>
        </form>
        <?php
		
			if (isset($_POST['update'])) 
			{
				$answer_update=$bdd_actu->prepare('UPDATE actu SET title = :newtitle, message = :newmessage WHERE id = :id');
				$answer_update->execute(array('newtitle'=>strip_tags($_POST['title']), 'newmessage'=>$_POST['message'], 'id'=>$_POST['id']));
				echo 'l\'actu '.$_POST['id'].' a été modifié';
			}
		}
	
	
	$answer->closeCursor();
	
}	
	catch (Exception $e)
{
	die('Ca craint :' .$e->getMessage()); // en attendant de trouver un message super sympa...
}
?>

J'ai aussi essayé de placer l'update sur une autre page en mettant un header sur celle-ci mais là, j'ai eu des erreurs diverses :
Le but de la chose était d'intégrer aussi un header dans la page appelé pour revenir sur l'appelante. (j'invente des mots là non?)
Mais bon, j'ai abandonné cette idée.
<?php

if (isset($_POST['update']))  { header ('location : mon_update.php'); }
?>

Donc si l'un d'entre vous (voire plusieurs) a une idée du moment où j'ai loupé mon virage, n'hésitez pas: là j'ai besoin de vous.

Merci par avance

Re: Mon update n'en fait qu'à sa tête

Posté : 16 févr. 2011, 13:39
par xTG
Vois avec la fonction var_dump($_POST) pour vérifier que tu as bien ce que tu souhaites dans les données postées (notamment la variable update).

Pour le header() ce n'est pas possible de raisonner ainsi, les données POST ne seront pas transmises à la page et seront perdues.
On utilise en général header() à la fin de l'action afin de rediriger automatiquement l'utilisateur sur une page où il pourra s'évertuer à appuyer sur F5 sans lancer des requêtes d'update/Delete/insert loufoques.
Donc si tu souhaites aller sur une autre page c'est au HTML de changer. L'attribut action de la balise <form>. ;)

Re: Mon update n'en fait qu'à sa tête

Posté : 16 févr. 2011, 14:05
par mauvais
Merci pour ta réponse rapide et pour le var_dump : désormais je sais que mon $_POST['id'] est vide (lenght=0).
J'ai bien évidement sortie mon (isset ($_POST['update'])) de la boucle pour tester ça.

Et donc j'ai intégré un echo de l'id dans l'input "hidden" et maintenant ça marche sauf que :
Si je valide le submit "modifier" il insére bien la modification dans la table actu sans s'afficher sur ma page et si je click à nouveau dessus l'actu précédente revient dans la table en m'affichant celle que je viens de modifier... et tout ça en boucle.
Etrange tout ça :) Je vais donc me renseigner sur le sujet...

Concernant l'action du form, je vais tout de même essayer de rester sur la même page dans un premier temps même si je vais certainement tester les deux versions au final.
Quoi qu'il en soit merci pour les conseils.

Re: Mon update n'en fait qu'à sa tête

Posté : 16 févr. 2011, 14:24
par xTG
Si tu souhaites une modification effective dans la page de destination il faut que ta requête UPDATE se trouve avant ta requête SELECT qui affiche les données. ;)

Re: Mon update n'en fait qu'à sa tête

Posté : 16 févr. 2011, 14:34
par mauvais
Bas oui effectivement, j'update avant d'afficher le SELECT... y a des moments où je me demande si les connexion se font bien dans ma tête. :D
En tout cas merci à toi, tout fonctionne très bien désormais, j'ai plus qu'à tester différentes versions.
=D>