Problème de formulaire

Patriciaprovence Messages postés 3 Date d'inscription jeudi 2 juin 2011 Statut Membre Dernière intervention 11 octobre 2008 - 9 oct. 2008 à 14:33
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 - 11 oct. 2008 à 17:08
Bonjour,

Voilà deux jours que j'essaie de trouver le bon code à appliquer pour récupérer le résultat d'un formulaire (une quantité) et le transmettre à un panier via un "a href" placé sur la même page, et je n'arrive à rien.

Voici la partie de ma page detail.php qui comporte le formulaire en question :

<FORM ACTION= "detail.php" "METHOD="POST">
Quantit&eacute; :

</form>

et le "a href" :

[panier.php?action =ajout&amp;l= <?php echo $nom; ?>&amp;f=<?php echo $fournisseur; ?>&amp;q=<?php echo $qte; ?>&amp;p=<?php echo $price; ?>&amp;g=<?php echo $gain; ?>

Les autres données de ce "a href : $nom; $fournisseur; $price; $gain proviennent de ma BDD via une requête mysql faite sur cette même page et parviennent sans problème au panier par l'intermédiaire d'une page de fonctions.

Le dernier code que j'ai essayé est le suivant :

<?php

if (isset($_POST['qte']))
{
$qte = $_POST['qte'];
}
?>

<FORM ACTION="detail.php" "METHOD="POST">
Quantit&eacute; :

</form>

]&amp;f =<?php echo $fournisseur; ?>&amp;q=<?php echo $qte; ?>&amp;p=<?php echo $price; ?>&amp;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;"

et tout ce que j'obtiens est :
Erreur SQL !
Resource id #4

Merci par avance à qui m'aidera à résoudre mon problème.

Bonne journée à toutes et à tous...

7 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 oct. 2008 à 19:16
salut

le code que tu as mis ne peut pas provoquer d'erreur sql.

on doit voir le code qui effectue une requete sur ta db pour pouvoir t'aider.
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
9 oct. 2008 à 23:40
Il faut aussi remplacer les &amp; par & !
0
ThomasDele Messages postés 21 Date d'inscription mercredi 24 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008
10 oct. 2008 à 10:16
non il a raison de mettre &amp; car le w3c provoque une erreur (ou warning je ne me souviens plus) sur un & seul. Par contre n'oublie de fermer tes input :

thom
0
Patriciaprovence Messages postés 3 Date d'inscription jeudi 2 juin 2011 Statut Membre Dernière intervention 11 octobre 2008
10 oct. 2008 à 10:25
Bonjour,

Merci pour vos réponses.

Je me suis encore creusé la tête et ai fini par trouver la solution à mon problème. Au lieu de : <FORM ACTION="detail.php"... qui me renvoie sur la même page pour mon formulaire, j'ai mis : <FORM ACTION="#"... et cela fonctionne à merveille.

J'ai aussi intégré le [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 au panier]
<?
}
?>

pour éviter que le "Ajouter au panier" n'apparaisse en même temps que le champ de texte du formulaire, mais après.

Cependant, pour que ce soit parfait, et si cela est possible, j'aimerais que le visiteur du site n'ait pas à cliquer sur ce "Ajouter au panier" et que les infos "contenues" par ce soient envoyées automatiquement une fois que le résultat du formulaire s'y est intégré. (Je ne sais pas si je suis très explicite...).
Je n'y connais rien pour le moment au javascript (c'est à mon programme d'apprentissage, mais je veux d'abord finir d'intégrer le php) et la fonction qui se trouve dans mon n'est donc pas de ma main.

Merci par avance de votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
11 oct. 2008 à 04:34
Bonjour,

Le plus simple serait d'intégrer directement les données que tu récupères dans le formulaire. C'est faisable avec des champs input de type hidden.

" />
...

De cette façon, tu économises une étape à l'utilisateur.

Ordinastie.
0
Patriciaprovence Messages postés 3 Date d'inscription jeudi 2 juin 2011 Statut Membre Dernière intervention 11 octobre 2008
11 oct. 2008 à 14:35
Bonjour,

Merci de cette réponse. Je fois mal m'y prendre car, en pratiquant ainsi, je n'envoie aucune donnée à mon panier.

Entre ma page d'envoi des données et le panier lui-même, j'ai une page de fonctions. Je pense qu'il serait certainement plus facile pour appporter une réponse adaptée que je vous donne  le cheminement de mes données, voici, en intégralité les 3 pages concernées :

la page "detail.php" où se trouve le formulaire :

<?php
session_start();

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

$result = mysql_query("SELECT * FROM $sbbproduit WHERE $sbbproduit.id='$id'");

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

echo '<?xml version="1.0" encoding="iso-8859-1"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

     <head>
<title>En détail...</title>
          <link href="style.css" rel="stylesheet" type="text/css" media="all"/>
     </head>
    
        
              

              

         

         

              

                        

                                                                 ----
<?php

if ($row[6] != \"nul\") {
$split = explode(\"../\", $row[6]);
$row[6] = $split[1];
$img = \"\";
        $image2 = \"[panier.php?action=ajout&amp;l=<?php echo $libelle; ?>&amp;f=<?php echo $fournisseur; ?>&amp;q=1&amp;q=<?php echo $qte; ?>&amp;p=<?php echo $price; ?>&amp;g=<?php echo $gain; ?> Ajouter au panier]
<?
}
?>

                             

                              <?php   
$comments = $row[13];
?>
                             

                              <tr>
                                   <td valign="top"> Commentaires (s'il y a lieu) : </td>
                                  

                                  

                                   <?php echo "<td>$comments</td>"; ?></tr>
                                   

                        

                   

         

         

                         <?php include("footer.php") ?>
                          

         

    

</html>

<?php
mysql_close();
?>

la page fonctions-panier.php

<?php

function creationPanier(){
$ret =false;

if (isset( $_SESSION['panier']))
 $ret = true;
else
{

  $_SESSION['panier']=array();
  $_SESSION['panier']['libelle'] = array();
  $_SESSION['panier']['fournisseur'] = array();
  $_SESSION['panier']['qte'] = array();     
  $_SESSION['panier']['price'] = array();
  $_SESSION['panier']['totalgeneral'] = array();
  $_SESSION['panier']['gain'] = array();
  $_SESSION['panier']['totalgain'] = array();

  $ret=true;
}
return $ret;
}

function ajouterArticle($libelle,$fournisseur,$qte,$price,$gain){

if (creationPanier())
{
$position = array_search($libelle,  $_SESSION['panier']['libelle']);
   
  if ($position !== false)
  {
   $_SESSION['panier']['qte'][$position] += $qte ;
  }
  else
  {
   array_push( $_SESSION['panier']['libelle'],$libelle);
   array_push( $_SESSION['panier']['fournisseur'],$fournisseur);
   array_push( $_SESSION['panier']['qte'],$qte);
   array_push( $_SESSION['panier']['price'],$price);
   array_push( $_SESSION['panier']['gain'],$gain);

  }

}

else
  echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function supprimerArticle($libelle){

if (creationPanier())
{
  $tmp=array();
  $tmp['libelle'] = array();
  $tmp['fournisseur'] = array();
  $tmp['qte'] = array();     
  $tmp['price'] = array();
  $tmp['gain'] = array();
     
  for($i = 0; $i < count($_SESSION['panier']['libelle']); $i++)
  {
   if ($_SESSION['panier']['libelle'][$i] !== $libelle)
   {
    array_push( $tmp['libelle'],$_SESSION['panier']['libelle'][$i]);
    array_push( $tmp['fournisseur'],$_SESSION['panier']['fournisseur'][$i]);
    array_push( $tmp['qte'],$_SESSION['panier']['qte'][$i]);
    array_push( $tmp['price'],$_SESSION['panier']['price'][$i]);
    array_push( $tmp['gain'],$_SESSION['panier']['gain'][$i]);

   }
     
  }
     
  
$_SESSION['panier'] =  $tmp;
unset($tmp);     
      
}
else
  echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function modifierQTeArticle($libelle,$qte){
if (creationPanier())
{

  if ($qte > 0)
  {
   $position = array_search($libelle,  $_SESSION['panier']['libelle']);
           
   if ($position !== false)
   {
    $_SESSION['panier']['qte'][$position] = $qte ;
   }
  }
  else
    supprimerArticle($libelle);
     
}
else
  echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function MontantGlobal(){

$total=0;

  for($i = 0; $i < count($_SESSION['panier']['libelle']); $i++)
  {           
   $total += $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['price'][$i];
  }
     
return $total;
}

function MontantGain(){

$total=0;

  for($i = 0; $i < count($_SESSION['panier']['libelle']); $i++)
  {           
   $total += $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['gain'][$i];
  }
     
return $total;
}

?>

et la page panier.php :

<?php
session_start();
include_once("fonctions-panier.php");
require("configuration.php");

if (isset($_GET['action']))
{
$erreur=false;
 if(in_array( $_GET['action'],array('ajout', 'suppression', 'refresh')))
  $action = $_GET['action'];
 else
  $erreur=true;

 $l = preg_replace('#\v#', '', $_GET['l']);
 
 $f = preg_replace('#\v#', '', $_GET['f']);
   
 $q = intval($_GET['q']);

 $p = floatval($_GET['p']);
 
 $g = floatval($_GET['g']);

}

elseif(isset($_POST['action']))
{
 unset($_GET);
 $erreur=false;
   
 if(in_array($_POST['action'],array('ajout', 'suppression', 'refresh')))
  $action=$_POST['action'];
 else
  $erreur=true;
   
  $l = preg_replace('#\v#', '',$_POST['l']);
   
  $p = floatval($_POST['p']);
   
   
 $QteArticle = array();
   
 $i=0;
 foreach ($_POST['QteArticle'] as $contenu){
  $QteArticle[$i++] = intval($contenu);
   
 }
   
}

if ($erreur==false){

 switch($action){

  Case "ajout":
  ajouterArticle($l,$f,$q,$p,$g);
  break;

  Case "suppression":
  supprimerArticle($l);
  break;

  Case "refresh" :

  for ($i = 0 ; $i < count($QteArticle) ; $i++)
  {
    modifierQTeArticle($_SESSION['panier']['libelle'][$i],round($QteArticle[$i]));
  }
  break;

  Default:
  break;
     
 }
}

echo '<?xml version="1.0" encoding="iso-8859-1"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

     <head>
<title>Votre panier</title>
          <link href="style.css" rel="stylesheet" type="text/css" media="all"/>
     </head>

    
              

              

         

         

              

                    Votre panier contient

                              

                        
                    <form method="post" action="panier1.php">
                                                       ----

                                   Libell&eacute;,
                                   Fournisseur,
                                   Quantit&eacute;,
                                   Prix
unitaire,
                                   Prix total,
                                   Economie

                                             (unitaire),
                                   Total

                                             &eacute;conomie,
                                   Action,
                             
                              <?php
if (creationPanier())
{
$nbArticles=count($_SESSION['panier']['libelle']);
  if ($nbArticles <= 0)
   echo \"----
Votre panier est vide , \";
  else
  {
   for ($i=0 ;$i < $nbArticles ; $i++)
   {
    echo \"----
\";
    echo \"".htmlspecialchars($_SESSION['panier']['libelle'][$i])."</ td>";
    echo ", \".htmlspecialchars($_SESSION['panier']['fournisseur'][$i]).\"</ td>\";
    echo \", \";
    echo \"".sprintf("%01.2f",$_SESSION['panier']['price'][$i]).", \";
    echo \"".sprintf("%01.2f",$_SESSION['panier']['total'][$i] = $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['price'][$i]).", \";
    echo \"".sprintf("%01.2f",$_SESSION['panier']['gain'][$i]).", \";
    echo \"".sprintf("%01.2f",$_SESSION['panier']['totalgain'][$i] = $_SESSION['panier']['qte'][$i] * $_SESSION['panier']['gain'][$i]).", \";

    echo \"Supprimer, \";
    echo \"\";
   }
           
  echo \"----
";
  echo "Totaux (en euros) : , \";
  echo \"".sprintf("%01.2f",MontantGlobal());
  echo ", \";
  echo \"".sprintf("%01.2f",MontantGain());
  echo ", \";           
  echo \"----
";
  echo "";
  echo "";

  echo ", \";
  }
}       
?>
                        

                    </form>
                   

                   

                   

                                  
                                   <form action="commande.php" method="post">
                                       

                                       

                                       

                                   </form>
                              </td>
                   </tr>
                    </table>
                   

         

         

                         <?php include("footer.php") ?>
                          

         

    

</html>

<?php
mysql_close();
?>

Bonne journée et merci encore pour votre aide...
0
Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
11 oct. 2008 à 17:08
Bonjour,

Si tu envoies les données par le formulaire, il faut que tu y accèdes par $_POST et non plus par $_GET, à moins de préciser la méthode d'envoi du formulaire directement en GET:



<form action="panier.php" method="GET">

Ordinastie.
0
Rejoignez-nous