IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Sessions et Form vers la même page ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Sessions et Form vers la même page ?
    Bonsoir à tous,
    je cherche à créer une page php affichant le contenu d'un panier. Jusqu'ici pas de problèmes. Mais je dois maintenant proposer de faire varier la quantité ou de supprimer un article.
    J'ia donc opté pour cette solution pour supprimer :
    on est dans (panier.php)

    <FORM method=POST action="./panier.php">
    1ère question : je pense que oui, mais est-ce possible de faire un post vers la même page que celle sur laquelle on se trouve ? (je n'ai pas envie d'encombrer mon url avec un get)
    <input type="hidden" ...> /* Pour l'id du produit */
    <input type=image src=... name="suppr"> /*mon image valide le form*/
    </FORM>

    Et, sur le haut de la page on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset ($_POST['suppr'])){
        $idpost=$_POST['id'];
        for ($i=0; $i<count ($_SESSION['achats']); $i++){
           if ($idpost==$_SESSION['achats'][$i]['id']) unset ($_SESSION['achats'][$i]);
        }
    }
    2eme question : dois-je utiliser unset pour le cas de la suppression d'une case du tableau ?

    Le code sinon me paraît à peu près logique, j'utilise un procédé ressemblant pour faire le rafraichissement s'il ya modification de la quantité, mais
    RIEN ne change

    Donc 3eme question : pourquoi ça ne marche pas ?

    Rien ne vaut la pratique, alors peut-être que quelques-uns pourront m'éclairer.

    En vous remerciant

  2. #2
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Code html
    Salut;

    <FORM method=POST action="./panier.php">
    Selon code, il manque le name de ta form.

    Ce qui donnerait exemple;

    <form name='test' method='post' action=''>
    Voilà, voilà.

    Pour tes deux questions, tout semble correct.

    Patrice G, intégrateur Web

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Re : Sessions et Form vers la même page
    Salut sportifpat,
    Je n'ai jamais utilisé la balise name pour des form, peut-être aussi parceque je n'en ai jamais imbriqué..

    Je l'ai ajoutée, mais
    Toujours est-il que dans mon cas, ça ne change absolument rien.
    Je clique sur le bouton actualiser ou supprimer, les valeurs sont restées les mêmes. Ma partie isset (...) ne serait-elle pas correcte ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Sauf utilisation de javascript qui l'oblige, il me semble que l'attribut name de la balise form n'est pas obligatoire.

    Je n'ai jamais utilisé la balise name pour des form, peut-être aussi parceque je n'en ai jamais imbriqué..
    On n'imbrique jamais deux formulaires !!!
    Au pire on crée 2 boutons qui vont changer l'action du formulaire, mais jamais imbriquer 2 formulaires. Pense au pauvre petit HTML qui ne saura pas quoi faire de son input type submit qui sera contenu dans deux formulaires

    Pour supprimer un tableau oui unset est la méthode la plus adéquate.

    Pour répondre à pourquoi ca ne marchera pas personnellement il me faudrait :
    - un peu plus de code.
    - quelle est l'erreur.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Salut ratapapa et merci.
    Bon de toute façon les modifs que m'avaient proposé sportifpat n'ont rien changé.
    Alors tu me demandais donc du code :

    En haut de la page j'ai mon actualisation des articles et tests pour afficher en permanence mon panier et le nombre d'articles, c'est donc ici que tu trouvera les isset pour savoir si il y a eu un post pour supprimer ou rafraichir la qtte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <div class="hautbloc4">
    		<h4> Votre Panier </h4>
    		<img src="../images/panier_haut.gif">
    		<?php
    		if (isset($_POST['refresh'])){
    			$qtpost=$_POST['qtte'];
    			$idpost=$_POST['id'];
    			for ($i=0; $i<count($_SESSION['achats']); $i++){
    				if ($idpost==$_SESSION['achats'][$i]['id']) $_SESSION['achats'][$i]['qtte']=$qtpost;
    			}
    		}
    		else if (isset($_POST['suppr'])){
    			$idpost=$_POST['id'];
    			for ($i=0; $i<count($_SESSION['achats']); $i++){
    				if ($idpost==$_SESSION['achats'][$i]['id']) unset ($_SESSION['achats'][$i]);
    			}
    		}
    		$nbarticles=count($_SESSION['achats'])-1;
    		if ($nbarticles==0) echo "<h4>".$nbarticles." Article</h4>";
    		else echo "<h4 class=\"articleach\">".$nbarticles." Article(s)</h4>";
    		?>
    		</div>
    entre temps des div, du texte, de la mise en page etc...
    et vers le bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <?php
    		$base=mysql_connect('localhost', '****', '****') or die ('Erreur de connexion'.mysql_error());
    		mysql_select_db('****', $base) or die ('Erreur de selection'.mysql_error());
    		for ($i=1; $i<count($_SESSION['achats']); $i++)
    		{
    			echo "<TABLE border=\"0\" cellspacing=\"10\" width=\"90%\" align=\"center\"> <TR> <TD width=\"40%\">";
    			echo "<h1>Article Numéro ".$i." : </h1>";
    			$curid=$_SESSION['achats'][$i]['id'];/*pour la boucle id dans $curid*/
    			echo "<FORM method=POST action=\"./panier.php\">";
    			echo "<input type=\"hidden\" name=\"id\" value=$curid>";
    			$curqtte=$_SESSION['achats'][$i]['qtte'];/*qtte dans $curqtte*/
    			$requete="SELECT libelle FROM Produit WHERE id=$curid";
    			$resultat=mysql_query($requete);
    			$total=mysql_num_rows($resultat);
    			if ($total){
    				while ($row = mysql_fetch_array($resultat)) {
      				echo "Désignation : ".$row['libelle']."<br>";
    				}
    			}
    			echo "Quantité sélectionnée : <input type=\"text\" name=\"qtte\" size=\"2\" maxlength=\"2\" value=$curqtte> <br>";
    			$requete="SELECT prix FROM Produit WHERE id=$curid"; /* Méthode de
    			récupération d'un champ d'une table sql avec une condition where*/
    			$resultat=mysql_query($requete);
    			$total=mysql_num_rows($resultat);
    			if ($total){
    				while ($row = mysql_fetch_array($resultat)) {
    				$prix=$row['prix']; /*$prix récupère le prix de l'article en cours d'affichage*/
    				echo "Prix Unitaire : ".$prix." Euros<br>";
    				}
    			}
    			$prixu[] = array ("prix"=> $prix);/*on met le PU dans un tableau */
    			$prixprod=$prixu[$i-1]['prix']*$curqtte;/*on multiplie par la qtte*/
    			echo "<h2>Total Article : ".$prixprod." Euros</h2> <br> </TD>";
    			echo "<TD class=\"cellmaj\"> <br> <br> <br> <input type=image src=\"../images/retour.gif\" class=\"noborder\" width=\"15px\"
    			height=\"15px\" align=\"top\" name=\"refresh\"> Actualiser </FORM>&nbsp;&nbsp;";
    			echo "<FORM method=post action=\"./panier.php\"><input type=\"hidden\" name=\"id\" value=$curid>
    			<input type=image src=\"../images/annuler.gif\" class=\"noborder\"width=\"16px\" height=\"16px\" align=\"top\"
    			name=\"suppr\">"; 
    			echo " Retirer du Panier </FORM> </TD> </TR> </TABLE>";
    		}
    		$total=0;
    		for ($i=0; $i<count($_SESSION['achats'])-1; $i++)
    		{
    			$total=$total+($prixu[$i]['prix']*$_SESSION['achats'][$i+1]['qtte']);
    		}
    		echo "<p class=\"prixfinal\">Montant Total de vos achats :  ".$total." Euros<br></p>";
    		?>
    voilà là tu as toute la partie qui gère l'affichage des articles un par un et qui permet d'afficher la qtte dans un input text pour la modifier.
    Je ne vois pas trop ou est l'erreur

    Je sais pas si tu connais aussi, mais tu aura remarqué que j'utilise mes log et mdp directement dans le code (que j'ai masqués ), tu me conseille quoi, d'utiliser un .htaccess ? l'utilisation est compliquée ?

    Encore quelque chose puis j'arrête, pour les css j'ai quelques problèmes des que je ne suis plus sous ie7, sur mozilla differences dans les cadres un peu, mais sur ie6 là c'est la catastrophe. Je dois utiliser les codes conditionnels pour charger une css spéciale ie6 pour m'en sortir ?

    En vous remerciant pour vos réponses.

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Normes
    Salut,

    Pour cela, tu dois faire des recherches sur google. Effectivement, il y a des différences sur l'interprétations de certains css entre Modzilla et IE.

    Je te conseille de te faire un tour sur http://www.w3.org/ (normes) ou encore de faire des recherches sur les css.

    À mon avis, quand je t'ai cité que la référence NAME n'était pas dans ton <form c'était purement normatif mon message.

    Il faut que tu respectes les normes et que tu utilises souvent var_dump($variables) pour connaître ce que contient tes variables.

    Sur ce, bonne continuation.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    J'ai enfin trouvé la sol au problème
    Le code me paraissait super logique donc je n'arrivais pas à trouver...
    Le pb est en fait dans les isset(...) : il ne faut pas utiliser la balise name du bouton/image servant de submit, mais plutot une des variables qu'on fait passer si on change la quantité ou si on supprime la ligne.

    Le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (isset ($_POST['qtte'])) ...
    ...
    if (isset ($_POST['idsuppr']))....
    et là miracle ça marche... Pour le débugage, et pour trouver l'endroit de l'erreur je me suis servi de la fonction var_dump() recommandée par sportifpat mais aussi de print_r() qui permet d'afficher un tableau.

    Reste plus qu'à rajouter des conditions pour éviter des saisies fantaisistes de l'utilisateur ... (ahh l'utilisateur ...)

    Encore quelque chose de tout bête (2 lignes à changer) sur lequel on passe bcp de temps...

    Merci encore à ceux qui m'ont donné des pistes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection vers la même page
    Par Konami15 dans le forum ASP
    Réponses: 6
    Dernier message: 27/09/2008, 12h33
  2. Redirection vers la même page jsp
    Par patrios dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 19/04/2008, 19h08
  3. Liens vers tableau même page
    Par jeanpaul29 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 12/01/2008, 14h14
  4. redirection systématique vers la même page
    Par samira84 dans le forum Struts 1
    Réponses: 30
    Dernier message: 12/06/2007, 14h59
  5. Redirection vers la même page après submit de formulaire
    Par noOneIsInnocent dans le forum Struts 1
    Réponses: 5
    Dernier message: 27/10/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo