Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1783 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1241783
thiebo1237​5
Posté le 08-11-2005 à 21:41:01  profilanswer
 

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

mood
Publicité
Posté le 08-11-2005 à 21:41:01  profilanswer
 

n°1241802
naceroth
Posté le 08-11-2005 à 22:06:46  profilanswer
 

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)

n°1241805
thiebo1237​5
Posté le 08-11-2005 à 22:08:20  profilanswer
 

oui, mais header n'est pas possible puisque j'aurai envoyé des données au serveur : la requete sql qui s'est exécuté !

n°1241813
naceroth
Posté le 08-11-2005 à 22:14:07  profilanswer
 

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

n°1241820
thiebo1237​5
Posté le 08-11-2005 à 22:17:07  profilanswer
 

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 ?

n°1242125
leflos5
On est ou on est pas :)
Posté le 09-11-2005 à 12:54:07  profilanswer
 

ET si tu revoyais la structure de ton index.php pour pas avoir besoin de redirection??? ;)

n°1242315
DjMerguez
Posté le 09-11-2005 à 15:26:30  profilanswer
 

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.

n°1242433
thiebo1237​5
Posté le 09-11-2005 à 17:13:20  profilanswer
 

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
n°1242603
thiebo1237​5
Posté le 09-11-2005 à 20:10:52  profilanswer
 

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

n°1242852
leflos5
On est ou on est pas :)
Posté le 10-11-2005 à 03:21:32  profilanswer
 

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

mood
Publicité
Posté le 10-11-2005 à 03:21:32  profilanswer
 

n°1242867
thiebo1237​5
Posté le 10-11-2005 à 07:57:52  profilanswer
 

non, non, au contraire, ça confirme ce que tu as dit. Ton conseil était parfait !
 
Merci beaucoup !

n°1242908
thiebo1237​5
Posté le 10-11-2005 à 10:07:00  profilanswer
 

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

n°1243737
leflos5
On est ou on est pas :)
Posté le 11-11-2005 à 03:00:19  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Fonction commandbuttonscript de calendrier avec cases a cocher
est ce que je peux apprendre ASP avec VB script ?Création d'une Fonction
portabilité linux vers windowspb d'affichage sous FF avec un script JS
fonction mail()Comprendre la fonction ord en pascal [Résolu]
Comment inclure une fonction "spoilers" dans un script de news 
Plus de sujets relatifs à : rediriger vers un autre script après exécution d'une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR