envoi de données de form vers 2 fichiers php

envoi de données de form vers 2 fichiers php - PHP - Programmation

Marsh Posté le 08-12-2010 à 10:12:38    

Bonjour,
 
j'ai un petit problème pour récupérer des données de formulaire.
Je vous explique mon problème:
 
J'ai un formulaire (disons form.php) Qui envoi les données à une page cible qui les traites (disons cible.php)
Dans cette page cible, je souhaite y mettre 2 type de traitement : un calcule total, et une image faite sur mesure en fonction des données du formulaire.
Le problème est que pour créer une image gd en php, je doit créer une troisième page pour la création de cet image (photo.php).
Je n'arrive pas à envoyer les données du formulaire à cette troisième page.
mon traitement de donnés fonctionne si j'envoie les données à une page ou à l'autre page, mais comment faire pour envoyer les données à la page cible.php, et à photo.php.

Reply

Marsh Posté le 08-12-2010 à 10:12:38   

Reply

Marsh Posté le 08-12-2010 à 10:46:08    

Précisons la notion de "page" :
Il existe des pages HTML (côté client), mais il n'existe pas de page PHP (côté serveur), il existe des programmes PHP.
 
Quand un submit ou un appel Ajax est déclenché par l'utilisateur, cela envoie des données, en mode post ou get, à un programme PHP.
Le progamme PHP va lire les variables avec le classique if (isset($_POST[...])... ou if (isset($_GET[...])...
Puis le programme PHP va générer une page HTML, ou un fichier pour un flux Ajax, ou un fichier PDF, ou un fichier image.
 

Citation :

comment faire pour envoyer les données à la page cible.php,


cible.php n'est pas une page. C'est un programme. Ce programme récupère les données et crée ce qu'il veut. Certaines données peuvent sans doute être testées pour savoir s'il faut que le programme créé telle ou telle chose.

Reply

Marsh Posté le 08-12-2010 à 10:59:14    

ok mais comment le programme photo.php récupère les données du formulaire qui à été envoyé à cible.php?
 
 

Reply

Marsh Posté le 08-12-2010 à 11:07:48    

Sur le serveur, il n'y a qu'un seul programme qui tourne, soit photo.php, soit cible.php, soit un grand fichier qui contient les deux. C'est cette dernière solution que je recommande, et qui vous dérange peut-être, parce que vous n'avez peut-être pas l'habitude d'avoir un programme sur le serveur qui fasse plusieurs choses, ou bien vous craigneriez que cela fasse un programme trop grand.
Plus précisément, mon idée serait de garder les deux fichiers, cible.php et photo.php, mais d'avoir dans cible.php la ligne

require_once("photo.php" );

photo.php est ainsi une espèce de sous-programme de cible.php. Les variables sont récupérées au début de cible.php via les  $_POST[], par exemple :  

$CD_DATA1 = ""; if (isset($_POST['CD_DATA1'])) $CD_DATA1 = $_POST['CD_DATA1'];

Puis, dans photo.php, on utilise ces données, soit parce qu'elles sont passées en paramètres de fonction, soit parce qu'elle sont déclarée avec le mot-clé global.

Reply

Marsh Posté le 08-12-2010 à 16:32:19    

Je met déja le code que j'ai fait sur ces 3 fichiers.
 
form.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
 
<body>
 
<form action="cible.php" method="post" name="ventill_chauff" id="ventill_chauff" >
<p>Type de vantillation :</p>
<p>
  <select name="ventillation">
    <option value="1" selected="selected">VMC 2 flux</option>
    <option value="2">VMC simple flux</option>
      </select>
</p>
<p>Type de chauffage :</p>
<p>
  <select name="chauffage" onchange="submit">
    <option value="1">poêle à bois</option>
    <option value="2">chaudière gaz</option>
  </select>
</p>
 
<P><input type="submit" value="Valider"</P>
</form>
 
 
 
</body>
</html>


 
cible.php

<?php require_once("photo.php" );?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
 
</head>
 
<body>
<?php  
$prix_vmc2flux = 3200;
$prix_vmc1flux = 855;
$prix_poele = 9500;
$prix_chau_gaz = 4500;
?>
<p>Ventillation choisi :  
<?php if ($_POST["ventillation"] ==1 )
{echo "ventillation Double flux";
$ventil = 3200; }
elseif ($_POST["ventillation"] ==2 )
{echo "ventillation simple flux";
$ventil = 855;}
else
{echo "pas de vmc sélectionné";}
?>.
</p>
<p>chauffage choisi :  
<?php if ($_POST["chauffage"] ==1 )
{echo "Poele à bois";
$chauf = 5000;}
elseif ($_POST["chauffage"] ==2 )
{echo "Chaudière gaz";
$chauf = 9000;}
else
{echo "pas de chauffage sélectionné";}
?>.
</p>
 
<p>Total =  
<?php  
$total = $ventil + $chauf;
echo $total; ?>
</p>
<p>Voila ce que ca va donner</p>
<p>
 <img src="photo.php" />
</p>
</body>
</html>


 
photo.php

<?php
header ("Content-type: image/jpeg" ); // L'image que l'on va créer est un jpeg
$corps = imagecreate(400,300);
if ($_POST["ventillation"] ==1 )
{$source1 = imagecreatefromgif("vmc2.gif" ); }
elseif ($_POST["ventillation"] ==2 )
{$source1 =imagecreatefromgif("vmc1.gif" );}
if ($_POST["chauffage"] ==2 )
{$source2 =imagecreatefromgif("chaud.gif" );}
elseif ($_POST["chauffage"] ==1 )
{$source2 =imagecreatefromgif("poele.gif" );}
imagecopymerge($corps, $source1, 0, 0, 0, 0, 400, 300, 100);
imagecopymerge($corps, $source2, 0, 0, 0, 0, 400, 300, 100);
imagejpeg($corps);
?>


 
Si j'ai bien compris, je met dans cible

require_once("photo.php" );


 
Pour l'instant, si je fait juste ca, j'affiche uniquement l'image mais pas le calcul


Message édité par mico35 le 08-12-2010 à 16:33:00
Reply

Marsh Posté le 08-12-2010 à 17:34:36    

Ok, je comprends beaucoup mieux.
Excusez-moi, ma solution ne marche pas dans ce cas de figure.
 
Peut-être que la solution suivante marcherait :
- Garder form.php
- Modifier légèrement cible.php pour enlever mon require_once, et pour remplacer

<img src="photo.php" />


par :

<?php print("<img src=\"photo.php?v=".$_POST['ventillation']."&c=".$_POST['chauffage']."\" />" ); ?>


- Modifier photo.php :

<?php  
header ("Content-type: image/jpeg" ); // L'image que l'on va créer est un jpeg  
$corps = imagecreate(400,300);  
if ($_GET["v"] =="1" )  
{$source1 = imagecreatefromgif("vmc2.gif" ); }  
elseif ($_GET["v"] =="2" )  
{$source1 =imagecreatefromgif("vmc1.gif" );}  
if ($_GET["c"] =="2" )  
{$source2 =imagecreatefromgif("chaud.gif" );}  
elseif ($_GET["c"] =="1" )  
{$source2 =imagecreatefromgif("poele.gif" );}  
imagecopymerge($corps, $source1, 0, 0, 0, 0, 400, 300, 100);  
imagecopymerge($corps, $source2, 0, 0, 0, 0, 400, 300, 100);  
imagejpeg($corps);  
?>


Message édité par olivthill le 08-12-2010 à 17:51:40
Reply

Marsh Posté le 08-12-2010 à 17:36:10    

Non c'est pas ça.
 
photo.php est une image que le browser va appeler comme suit :
 
<img src="photo.php" />  comme indiqué dans cible.php
 
C'est donc normal que les variable POST ne contiennent rien dans photo.php puisque c'est un autre script. Le php n'a pas de contexte d’exécution hormis les sessions. Ca serait bien que tu commences par apprendre ça.
 
Pour procéder correctement, il faut générer l'image dans un répertoire de cache et faire un lien vers cette image dans le tag img
 
(ceux qui te conseilleront de passer les param en GET ont gagné le droit de se taire)

Reply

Marsh Posté le 09-12-2010 à 10:53:29    

smaragdus a écrit :

Non c'est pas ça.
 
photo.php est une image que le browser va appeler comme suit :
 
<img src="photo.php" />  comme indiqué dans cible.php
 
C'est donc normal que les variable POST ne contiennent rien dans photo.php puisque c'est un autre script. Le php n'a pas de contexte d’exécution hormis les sessions. Ca serait bien que tu commences par apprendre ça.
 
Pour procéder correctement, il faut générer l'image dans un répertoire de cache et faire un lien vers cette image dans le tag img
 
(ceux qui te conseilleront de passer les param en GET ont gagné le droit de se taire)


Ça marche impeccable !
Merci pour l'info. Je cherchais un solution compliqué alors que c'était très simple.

Reply

Sujets relatifs:

Leave a Replay

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