rediriger vers un autre script après exécution d'une fonction

rediriger vers un autre script après exécution d'une fonction - PHP - Programmation

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 :
 

Code :
  1. //d'abord la requete d'insertion :
  2. $requete = sprintf("INSERT INTO table
  3.     foo,
  4.     bar),
  5.                            VALUES (%s, %s)",
  6.   $sql->add_smart($foo),
  7.   $sql->add_smart($bar));
  8. //en ensuite l'exécution de la requete :
  9. $insert = $sql->execrequete ($requete);
  10. // et là, j'aurais aimé un bout de code qui pointe vers index.php
  11. // faut-il simplement un require('index.php'); ????


 
MERCI d'avance
 
Thiebo

Reply

Marsh Posté le 08-11-2005 à 21:41:01   

Reply

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)

Reply

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é !

Reply

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).

Reply

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 ?

Reply

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??? ;)

Reply

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 ?  
 
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 ?


 
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.

Reply

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 :
  1. <?php
  2. session_start();
  3. ob_start();
  4. //et puis le reste de mon code, sauf que c'est le même fichier php qui commence par
  5. // if empty $_POST => afficher le formulaire
  6. // else : vérifier que $_POST est valable  
  7. // si $_POST est valable : exécuter la requête mysql
  8. // quand la requete mysql est exécuté :
  9. header ("http://www.monsite.com/dir/index.php" );
  10. exit;
  11. //puis le code pour réafficher le formulaire avec les messages d'erreur si $_POST n'est pas valable
  12. ?>


Message édité par thiebo12375 le 09-11-2005 à 17:21:22
Reply

Marsh Posté le 09-11-2005 à 20:10:52    

Pour info :
 
même sans ob_start();
 
ca marche DU FEU DE DIEU !!!!!
 
Merci tous !

Reply

Marsh Posté le 10-11-2005 à 03:21:32    

Ca change pas ce que j'ai dit... :D

Reply

Marsh Posté le 10-11-2005 à 03:21:32   

Reply

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 !

Reply

Marsh Posté le 10-11-2005 à 10:07:00    

leflos5 a écrit :

Ca change pas ce que j'ai dit... :D


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 ???

Reply

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 :D 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 ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed