Aller au contenu

Sujets conseillés

Posté

Bonjour,

J'ai une page avec un formulaire pour recueillir un nombre (une quantité). Je voudrais récupérer le résultat de ce formulaire et aller l'intégrer dans un autre formulaire situé sur la même page, au milieu d'autres données, qui elles ne proviennent pas d'un formulaire mais je n'y parviens pas.

J'ai l'impression qu'après divers essais infructueux, je me suis mélangé complètement les pattes...

Donc, le voudrais envoyer le résultat de ce formulaire (la quantité "qte") qui devra "alimenter" mon panier :

<form action="$_SERVER['PHP_SELF']" method="POST">
<b>Quantité :</b> <input type="text" name="qte" value="1" size="3">
<input type="image" name="image" value="ok" src="images/panier_bleu_plein.png" align="absmiddle" border="0" height="35" width="35">
</form>

dans celui-là, situé dans la même page :

 <a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?> onclick=  window.open(this.href, '', 'toolbar="no " location="no " directories="no " status="yes " scrollbars="yes " resizable="yes " copyhistory="no " width="600 " height="350');  return false;"</a>

J'ai donc écrit ceci :

<form action="$_SERVER['PHP_SELF']" method="POST">
<b>Quantité :</b> <input type="text" name="qte" value="1" size="3">
<input type="image" name="image" value="ok" src="images/panier_bleu_plein.png" align="absmiddle" border="0" height="35" width="35">
</form>
<?
if (isset($_POST['image']) && $_POST['ok']=="Envoyer!" && $_POST['qte']=="1")
{
?>
<a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?> onclick= window.open(this.href, '', 'toolbar="no " location="no " directories="no " status="yes " scrollbars="yes " resizable="yes " copyhistory="no " width="600 " height="350'); return false;"</a>
<?
}

et comme le résultat est une redirection vers une page d'erreur... j'ai besoin de votre aide.

Je sais que mon second formulaire (celui qui alimente le panier) fonctionne car je l'ai testé sans y mettre de donnée concernant la quantité.

Merci par avance de votre coup de main...

Posté

Patricia il se fait tard et je ne serai peut être pas très clair ...

Tout d'abord je ne vois qu'un seul formulaire dans ton code, je ne comprends donc pas bien ta question.

Ensuite tu as un double quote de mal placé dans ton lien de retour :

<a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?> onclick= window.open(this.href, '', 'toolbar="no " location="no " directories="no " status="yes " scrollbars="yes " resizable="yes " copyhistory="no " width="600 " height="350'); return false;"</a>

il faut écrire : guillemet avant onclick, s'interroger sur la présence de return false qui n'est attaché à aucune fonction

<a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?>" onclick= window.open(this.href, '', 'toolbar="no " location="no " directories="no " status="yes " scrollbars="yes " resizable="yes " copyhistory="no " width="600 " height="350'); ></a>

Maintenant quant à la logique de ton processus;

tu disposes de plusieurs outils : le javascript, la redirection,les sessions, l'ajax, les champs cachés.

la solution javascript :

transférer la variable par java script:

a l'ancienne du type : document.form[X].element.value=document.form[y].element.value

ici X et Y étant la position des formulaires dans l'ordre d'appartion : 0,1,2 etc.

element étant le nom du champ de formulaire concerné.

à la DOM en appelant la fonction GetElementByid : document.GetElementById('chose').value = document.GetElementById('qte').value

ce transfert doit s'opérer sur un déclenchement javascript, ici cela pourrait être un: onblur(document.form[.....); placé dans le champ "qte", si le visiteur est censé le remplir.

la redirection

tu fais un aller retour sur ta page via une page intermèdiaire. page1 vers PageTemp où la variable sera traitée et renvoyée à la page1 par une redirection

A l'arrivée une boucle conditionnelle permute les affichages.

les sessions

C'est le complément du jeu expliqué au dessus qui en soit était un peu bête, mais plus rusé si la PageTemp à instancier la session('qte') qui deviendra la valeur à intègrer dans le deuxième formulaire que je n'ai pas vu ,hihihi

l'ajax

La c'est pour faire super W2bees. mais imaginons que ton deuxième formulaire (le fantôme bouhhhh) soit prévu dans un div nommé. tu envoies ta quantité en post via le process Ajax et tu lui demandes en retour de te mettre ton joli formulaire fantôme dans le div prévu à cet effet. Après à toi de t'amuser avec les déclenchements d'événements sur les div retournés par Ajax

Champ cachés

Reste la vraie solution des fainéants, notre magique champ caché. et là ta réponse serait du style:

<form action="paniertemp.php" method="GET" >
<b>Quantité :</b> <input type="text" name="qte" value="1" size="3" />
<input type="hidden" name="l" value="<?php echo $nom; ?>" />
<input type="hidden" name="f" value="<?php echo $fournisseur; ?>" />
<input type="hidden" name="p" value="<?php echo $price; ?>" />
<input type="hidden" name="g" value="<?php echo $gain; ?>" />

<input type="image" value="ok" src="images/panier_bleu_plein.png" align="absmiddle" border="0" height="35" width="35">
</form>

et dans le gentil fichier paniertemp.php de réception tu déclenches la pop-up (on est en quelle année ????) et tu rediriges sur la page de ton choix.

Voilà ce que je peux en dire à cette heure tardive. Un petit conseil cherche des sources un peu plus actuelles, pop up et compagnies sont remplacés par les DIV, la fonction innerHTML('lediv') qui permet de modifier le contenu d'un calque à la volée, ici ton panier, en javascript direct ou via ajax

Bon courage

Posté

Bonjour,

MDEDTRONCHIN, merci de cette réponse "nocturne" mais qui n'aide pas vraiment la débutante en php que je suis.

Parce que je voulais pas vous infliger, dans ma question" la lecture de données qui vous seraient inutiles, je n'ai mis que les deux "formulaires" concernés et qui sont dans la même page (mais peut-être que j'appelle formulaire une partie du script qui ne s'appelle pas ainsi...) :

- celui qui "demande" la quantité (le premier code de ma question), qui commence par "<form action="$_SERVER['PHP_SELF']"... et

- celui dans lequel je devrais placer le résultat pour l'envoyer à mon panier, via une page fonctions qui commence par "<a href="panier.php?action=ajout&l=..."

puis le code que j'ai réalisé pour faire le lien entre les deux et qui n'envoie pas le résultat de mon "premier formulaire" vers le second.

Je pensais que cela suffirait puisque mon problème se situait là. Mea culpa...

Voici donc l'intégralité de ma page, le code concerné se trouvant dans sa dernière partie :

<?php
session_start();

$id = $_GET['id'];
require("configuration.php");

$result = mysql_query("SELECT $sbbproduit.id, $sbbproduit.hid, $sbbproduit.sid, $sbbproduit.nom, $sbbproduit.ancienprix, $sbbproduit.spec, $sbbproduit.photoarticle, $sbbproduit.frais, $sbbproduit.promo, $sbbproduit.prix, $sbbproduit.stock, $sbbproduit.visu, $sbbfrs.frsid, $sbbfrs.societe FROM $sbbproduit, $sbbfrs WHERE $sbbproduit.frsid= $sbbfrs.frsid AND $sbbproduit.id='$id'");

$row = mysql_fetch_row($result) or die('Erreur SQL !<br />'.$result.'<br />'.mysql_error());
?>
<table width="100%" border="0">
<tr><?php
//affichage du produit séléctionné avec bouton commande :

if ($row[6] != "nul") {
$split = explode("../", $row[6]);
$row[6] = $split[1];
$img = "<img src=\"$row[6]\" width='120' height='120' target='blank'>";
$image2 = "<a href='$row[6]' target='blank'><font class='moyen'>Photo taille réelle</font></a><br>";
} else {
$img = "<img src=\"$images/na.jpg\" width=100 border=0>";
}
echo "<td colspan='2'>$img</a><br>$image2</td>";
?></tr>
<tr><?php
$nom = $row[3];
?>
<td valign="top"><font class="moyen"><b>Article : </b></font></td>
<?php echo "<td><font class='moyen'>$nom</font></td>"; ?></tr>
<tr>
<td valign="top"><font class="moyen"><b>Descriptif : </b></font></td>
<?
$descriptif = $row[5];
$descriptif = str_replace("[retour]","<br>",$descriptif);
$descriptif = str_replace("[gras]","<b>",$descriptif);
$descriptif = str_replace("[/gras]","</b>",$descriptif);


echo "<td><font class='moyen'> $descriptif</font></td>"; ?></tr>
<tr>
<td valign="top"></td>
<td></td>
</tr>
<?
$fraisproduit1 = $row[7];
$fraisproduit2 = sprintf("%0.2f", $fraisproduit1);
?>
<tr>
<td valign="top"><font class="moyen"><b>Frais :</b></font></td>
<? echo "<td><font class='moyen'>$fraisproduit2 $devises</font></td>"; ?></tr>
<tr>
<td valign="top"><font class="moyen"><b>Prix TTC : </b></font></td>
<?



$price = $row[9];
$price = sprintf("%0.2f", $price);

$totalgeneral1 = ($price + $fraisproduit2);
$totalgeneral2 = sprintf("%0.2f", $totalgeneral1);

echo "<td><font class='moyen' color=red><b>$price $devises  TTC</font></b></td>";
echo "<tr><td><font class='moyen'><b>Total TTC :</b></font></td>";
echo "<td><font class='moyen'><b>$totalgeneral2 $devises</b></font></td>";
?></tr>
<?
if ($row[10] == "oui") {
echo "</tr><tr>";
echo "<td><font color=\"red\">Article non disponible</font></td>";
}

if ($row[8] == "oui") {
$ancienprix = $row[4];
$ancienprix = sprintf("%0.2f", $ancienprix);
echo "</tr><tr><td><font class='moyen'><b>Prix public : </b></font></td>";
echo "<td><font class='moyen'><b>$ancienprix $devises TTC</b></font></td>";
}

$gain = ($row[9] - $row[4]);
$gain = sprintf("%0.2f", $gain);

?>
<tr>
<td valign="top"><font class="moyen"><b>Economie réalisée : </b></font></td>
<?php echo "<td><font class='moyen'><b>$gain $devises</b></font></td>"; ?></tr>
<?php
$fournisseur = $row[13];
?>
<tr>
<td valign="top"><font class="moyen"><b>Fournisseur : </b></font></td>
<?php echo "<td><font class='moyen'><b>$fournisseur</b></font></td>"; ?></tr>
</table>
<form action="$_SERVER['PHP_SELF']" method="POST">
<b>Quantité :</b> <input type="text" name="qte" value="1" size="3">
<input type="image" name="image" value="ok" src="images/panier_bleu_plein.png" align="absmiddle" border="0" height="35" width="35">
</form>
<?
if (isset($_POST['image']) && $_POST['ok']=="Envoyer!" && $_POST['qte']=="1")
{
?>
<a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?>" onclick= window.open(this.href, '', 'toolbar="no " location="no " directories="no " status="yes " scrollbars="yes " resizable="yes " copyhistory="no " width="600 " height="350'); return false;"</a>
<?
}


// deconnexion de la base
mysql_close();
?>

Posté (modifié)

Bon il n'est pas encore trop tard donc .... je vais faire vite :

ci-dessous le code de deux pages : panier.php et paniertemp.php qui interagissent

dans la page panier, trois manières d'envoyer la variable de quantité : en URL avec Get, en Javascript avec evenement getElementById transfèrant une valeur, en Url + session + redirection

Après il n'y a plus qu'à choisir

Attention, j'ai un peu fait évoluer le code initial. Il faut se forcer à ne pas mélanger variables dynamiques (fonction de calcul, de controle etc.) avec du pur HTML.

la syntaxe type

echo "<td><font>".$toto."</font></td>"

est à déprécier au profit de

 ... $toto="qqc";}// fin de fonction ou fin de bloc PHP
<div id='mondiv'><?php echo $toto; ?> </div>"

Voici la page panier.php

<?php
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><?php

/************* POUR LES TEST LES VARIABLES SONT PASSEES EN 'DUR' ****************************/
isset($_GET['id'])?$id = $_GET['id']:$id=""; // Syntaxe de type langage C -> condition ? vrai : faux (ou NULL);

/************ désactiver les commentaires pour l'utilisation en 'réel' *************************/
//require("configuration.php");

//$result = mysql_query("SELECT $sbbproduit.id, $sbbproduit.hid, $sbbproduit.sid, $sbbproduit.nom, $sbbproduit.ancienprix, $sbbproduit.spec, $sbbproduit.photoarticle, $sbbproduit.frais, $sbbproduit.promo, $sbbproduit.prix, $sbbproduit.stock, $sbbproduit.visu, $sbbfrs.frsid, $sbbfrs.societe FROM $sbbproduit, $sbbfrs WHERE $sbbproduit.frsid= $sbbfrs.frsid AND $sbbproduit.id='$id'");

//$row = mysql_fetch_row($result) or die('Erreur SQL !<br />'.$result.'<br />'.mysql_error());

/********************* La liste des variables que je vais forcer ************************/
$row=array("1","1","1","lenom","12,50","lorem ipsum dolors et tutti quanti","../images1.jpg","0","1","15","120","","1","Tintouin","","","","","","","");
$devises="";
?>
</head>
<body><table width="100%" border="0">
<tr><?php
//affichage du produit séléctionné avec bouton commande :



/*********** LE CODE INITIAL *********************/
/*
if ($row[6] != "nul") {
$split = explode("../", $row[6]);
$row[6] = $split[1];
$img = "<img src=$row[6] width='120' height='120' target='blank'>";
$image2 = "<a href='$row[6]' target='blank'><font class='moyen'>Photo taille réelle</font></a><br>";
} else {
$img = "<img src=\"$images/na.jpg\" width=100 border=0>";
}
echo "<td colspan='2'>$img</a><br>$image2</td>";*/

/**********FIN : LE CODE INITIAL *********************/

// on vérifie que la variable est renseignée
if ($row[6] != "nul") {
// on adapte la valeur au chemin du site !!!
$split = explode("../", $row[6]);
// on attribue la nouvelle valeur à la variable
$row[6] = $split[1];

// on a la variable, mais as-t'on réellement une image ??
if(file_exists($row[6])){
$img = "<img src=$row[6] width='120' height='120' target='blank'>";
$image2 = "<a href='$row[6]' target='blank'><font class='moyen'>Photo taille réelle</font></a><br>";
} else {
$img="";
//$img = "<img src=\"$images/na.jpg\" width=100 border=0>"; // enlever les commentaires et adapter le chemin

$image2 = "Désolé, pas de photos";
}
} // on ferme la boucle conditionnelle générale

?>
<td colspan='2'><?php echo $img."<br>".$image2 ?></td>
</tr>
<tr><?php
$nom = $row[3];
?>
<td valign="top"><font class="moyen"><b>Article : </b></font></td>
<td><font class='moyen'><?php echo $nom; ?></font></td></tr>
<tr>
<td valign="top"><font class="moyen"><b>Descriptif : </b></font></td>
<?php
$descriptif = $row[5];
?>
<!--$descriptif = str_replace("[retour]","<br>",$descriptif);
$descriptif = str_replace("[gras]","<b>",$descriptif);
$descriptif = str_replace("[/gras]","</b>",$descriptif);-->


<td><font class='moyen'><?php echo $descriptif; ?></font></td></tr>
<tr>
<td valign="top"></td>
<td></td>
</tr>
<?php
$fraisproduit1 = $row[7];
$fraisproduit2 = sprintf("%0.2f", $fraisproduit1);
?>
<tr>
<td valign="top"><font class="moyen"><b>Frais :</b></font></td>
<td><font class='moyen'><?php echo $fraisproduit2." ". $devises; ?></font></td></tr>
<tr>
<td valign="top"><font class="moyen"><b>Prix TTC : </b></font></td>
<?php
$price = $row[9];
$price = sprintf("%0.2f", $price);

$totalgeneral1 = ($price + $fraisproduit2);
$totalgeneral2 = sprintf("%0.2f", $totalgeneral1);

echo "<td><font class='moyen' color=red><b>$price $devises  TTC</font></b></td>";
echo "<tr><td><font class='moyen'><b>Total TTC :</b></font></td>";
echo "<td><font class='moyen'><b>$totalgeneral2 $devises</b></font></td>";
?></tr>
<?php
if ($row[10] == "oui") {
echo "</tr><tr>";
echo "<td><font color=\"red\">Article non disponible</font></td>";
}

if ($row[8] == "oui") {
$ancienprix = $row[4];
$ancienprix = sprintf("%0.2f", $ancienprix);
echo "</tr><tr><td><font class='moyen'><b>Prix public : </b></font></td>";
echo "<td><font class='moyen'><b>$ancienprix $devises TTC</b></font></td>";
}

$gain = ($row[9] - $row[4]);
$gain = sprintf("%0.2f", $gain);

?>
<tr>
<td valign="top"><font class="moyen"><b>Economie réalisée : </b></font></td>
<?php echo "<td><font class='moyen'><b>$gain $devises</b></font></td>"; ?></tr>
<?php
$fournisseur = $row[13];
?>
<tr>
<td valign="top"><font class="moyen"><b>Fournisseur : </b></font></td>
<?php echo "<td><font class='moyen'><b>$fournisseur</b></font></td>"; ?></tr>
</table>
Ce formulaire génère le lien qui reprend toutes les variables et va au traitement<br>

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
<b>Quantité :</b> <input type="text" name="qte" value="<?php echo isset($_GET['qte'])?$_GET['qte']:'1';?>" size="3" >
<input type="image" name="image" value="ok" align="absmiddle" border="0" height="35" width="35">
<input type="button" value="ok" border="0" height="35" width="35">

</form>
<?php
if (isset($_GET['qte']))
{
$qte = $_GET['qte'];
?>
<a href="panier.php?action=ajout&l=<?php echo $nom; ?>&f=<?php echo $fournisseur; ?>&q=<?php echo $qte; ?>&p=<?php echo $price; ?>&g=<?php echo $gain; ?>" >AJOUTER</a>
<?php
}
?><br>

Ce formulaire capte la valeur "quantité" et la transmet au formulaire suivant, qui contient les variables en champs cachés<br>


<b>Quantité :</b> <input type="text" name="Oqte" id="Oqte" value="<?php echo isset($_GET['qte'])?$_GET['qte']:'1';?>" size="3" >
<input type="image" name="image" value="ok" align="absmiddle" border="0" height="35" width="35" onclick="document.getElementById('Cqte').value=document.getElementById('Oqte').value">



on va vers : paniertemp.php
<?php if ($_SESSION['qte']!=""){$qte=$_SESSION['qte'];
$linfo=" <-- ceci est la valeur du choix précédent";}else
{
$linfo="";
$qte="1";
}
?>
<form action="paniertemp.php" method="POST" >
<b>Quantité :</b> <input type="text" name="Cqte" id="Cqte" value="<?php echo $qte ?>" size="3" /><?php echo $linfo ?>
<input type="hidden" name="l" value="<?php echo $nom; ?>" />
<input type="hidden" name="f" value="<?php echo $fournisseur; ?>" />
<input type="hidden" name="p" value="<?php echo $price; ?>" />
<input type="hidden" name="g" value="<?php echo $gain; ?>" />
<input type="hidden" name="v" value ="<?php echo $_SERVER['PHP_SELF'];?>" />
<input type="button" value="ok" border="0" ><input type="image" name="image" value="ok" align="absmiddle" border="0" height="35" width="35">

</form>
</body>
</html>

et la page paniertemp.php

<?php
if(!isset($_SESSION)){
session_start();}
?><!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>
<?php $nom = $_POST['l'];
$fournisseur = $_POST['f'];
$qte = $_POST['Cqte'];
$price = $_POST['p'];
$gain = $_POST['g'];
$vientde= $_POST['v']; ?>
<script language="JavaScript">
function doRedirect()
{
redirectUrl = "<?php echo $vientde; ?>";
setTimeout( "window.location.href = redirectUrl", 1000);
}
</script>

</head>

<body onLoad="doRedirect()">
<?php
echo "les valeurs de renseigne de la forme NAME... sont : ";
// un controle pour voir les POST envoyés
/*
foreach($_POST as $cle => $valeur)
{
echo $cle.": ".$valeur." <br /> ";
}
*/
?>

ici vous pouvez traiter ces valeurs -> session, connexion base de données ...
<?php
$_SESSION['nom']=$nom;
$_SESSION['founisseur']=$fournisseur;
$_SESSION['qte']=$qte;
$_SESSION['price']=$price;
$_SESSION['gain']=$gain;

?>
<?php echo $nom; ?><br />
<?php echo $fournisseur; ?><br />
<?php echo $qte; ?><br />
<?php echo $price; ?><br />
<?php echo $gain; ?>

<br />
puis nous allons retrouner d'où l'on vient !
</body>
</html>

Bon courage

Modifié par Monique
Merci d'utiliser codebox pour plus de 10 lignes de code :)
  • 8 months later...
Posté

Bonjour,

Je viens de me rendre compte que je n'avais pas remercié Dedtronchin pour sa réponse du 15 octobre 2008 à l'appel à l'aide que j'avais fait...

Toutes mes plus plates excuses, et comme il n'est jamais trop tard pour bien faire : MERCI et encore MERCI !!!

Bonne fin de journée,

Patricia

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...