rediriger vers un autre script après exécution d'une fonction - PHP - Programmation
Marsh Posté le 08-11-2005 à 22:06:46
Si tu veux faire une redirection, c'est header("Location: ..." );, en suivant bien les régles d'utilisation de l'instruction (e.a. aucun envoi de données au navigateur avant le header)
Marsh Posté le 08-11-2005 à 22:08:20
oui, mais header n'est pas possible puisque j'aurai envoyé des données au serveur : la requete sql qui s'est exécuté !
Marsh Posté le 08-11-2005 à 22:14:07
Faut revoir les bases, un header est envoyé par le serveur web au navigateur, une requête sql est envoyée (grossièrement) par le serveur web vers le serveur sql, le navigateur n'a rien à voir la-dedans, donc pas de soucis de ce côté.
Par contre, si tu affiches un résultat, où un message "insertion réussie", là; oui, y a un problème (de bon sens d'ailleurs).
Marsh Posté le 08-11-2005 à 22:17:07
mais mon header entrera bien en conflit avec le session_start(); que j'ai en début du script non ?
je peux faire un header après l'exécution de la requete simplement après $insert = $sql->execrequete ($requete);
dans mon exemple ci-dessus ?
Marsh Posté le 09-11-2005 à 12:54:07
ET si tu revoyais la structure de ton index.php pour pas avoir besoin de redirection???
Marsh Posté le 09-11-2005 à 15:26:30
thiebo12375 a écrit : mais mon header entrera bien en conflit avec le session_start(); que j'ai en début du script non ? |
Grosso modo, la réponse HTTP est en deux phases : d'abord les en-têtes (headers), puis le HTML. session_start ne fait qu'envoyer un en-tête HTTP (typiquement, pour définir un cookie), elle ne te fait donc pas sortir du "mode" envoi des en-têtes HTTP. Tu pourras donc mettre une instruction header après.
Je te conseille juste de pense aux cas d'erreur : classiquement, tu envoies la redirection si tu n'as eu aucune erreur SQL. Sinon, tu affiches un message d'erreur sans faire le redirect.
Marsh Posté le 09-11-2005 à 17:13:20
génial, merci pour vos réponses. Je vais essayer tout cela ce soir : faire en sorte que mysql ne renverra pas de message d'erreur et coller mon header après l'exécution de la requete...
d'ailleurs, ça me fait penser, je peux donc faire ceci :
Code :
|
Marsh Posté le 09-11-2005 à 20:10:52
Pour info :
même sans ob_start();
ca marche DU FEU DE DIEU !!!!!
Merci tous !
Marsh Posté le 10-11-2005 à 07:57:52
non, non, au contraire, ça confirme ce que tu as dit. Ton conseil était parfait !
Merci beaucoup !
Marsh Posté le 10-11-2005 à 10:07:00
leflos5 a écrit : Ca change pas ce que j'ai dit... |
excuse-moi, je vais encore trop vite. Tu pense que je devrais revoir la structure même de mon index.php ?
Comment veux tu faire ?
si post est vide : afficher la liste des entrées de la base mysql + le formulaire d'ajout sur la même page et si post n'est pas vide, exécuter la requete et re-mettre le code d'affichage de la liste des entrées ???
Marsh Posté le 11-11-2005 à 03:00:19
C'est juste une hypothèse sur ce que tu sembles vouloir faire Les redirections si on peut s'en passer c'est toujours bon
JE serais même encore plus taliban que ça Ton affichage c'est ton affichage, ton traitement c'est ton traitement et faut un truc qui gère les deux
Et toujour header() pas de JS, et à la limite pourquoi ne pas vouloir être moins rapide? Genre pourquoi ne pas confirmer avant de rebalancer direct?
Le plus simple et logique pour moi serait de différencier les traitements de l'affichage et donc plus de souci
Ou alors utiliser des tampons de sortie comme ça si erreur tu balances, sinon t'es tranquille et header()
Enfin juste pour dire que ce genre de problématiques sont plutot conceptuelles que purement techniques
Marsh Posté le 08-11-2005 à 21:41:01
Bonjour,
J'ai un fichier index.php qui va chercher les entrées dans une table mysql pour les afficher. Dans le navigateur on voit alors une table avec les entrées de la table mysql et un lien pour dire "ajouter une entrée".
Ce lien pointe vers un fichier ajout.php qui affiche le formulaire d'ajout si $_POST est vide et qui exécute le mysql_query("INSERT INTO //bla bla
Ca marche. Seulement, quand la nouvelle entrée est ajoutée et que ajout.php a donc fini son travail, j'aimerais que ajout.php "envoit" l'exécution du script sur index.php, dont $_POST est par définition vide et qui va donc chercher les entrées de mysql. Quelque chose du genre :
MERCI d'avance
Thiebo