A voir également:
- Redirection JS dans du php?
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Redirection de mail - Guide
- Js/packed.agent.n ✓ - Forum Virus
- Js/kryptik.ad ✓ - Forum Virus
7 réponses
Utilisateur anonyme
7 févr. 2011 à 12:29
7 févr. 2011 à 12:29
Bonjour,
Tout simple, il ne faut pas mettre de header PHP après un affichage quelconque, c'est valable pour tous les header.
En HTTP, les HEADER sont envoyés avant le BODY, c'est la règle du protocole.
ce code PHP générera toujours une erreur
echo ' ';
header(' ');
il faut faire ça :
if (truc) {
header('location: ');
exit;
}
echo ' ';
C'est tout, question d'agencement du code.
Cordialement
Tout simple, il ne faut pas mettre de header PHP après un affichage quelconque, c'est valable pour tous les header.
En HTTP, les HEADER sont envoyés avant le BODY, c'est la règle du protocole.
ce code PHP générera toujours une erreur
echo ' ';
header(' ');
il faut faire ça :
if (truc) {
header('location: ');
exit;
}
echo ' ';
C'est tout, question d'agencement du code.
Cordialement
Me re voila,
J'ai mis le header hors du body.
Le problème est que hors du body je n'arrive pas à récupérer la valeur de l'input (POST)
Le début de la page hors body
Ensuite le body
J'ai mis le header hors du body.
Le problème est que hors du body je n'arrive pas à récupérer la valeur de l'input (POST)
Le début de la page hors body
<?php session_start(); $champ0 = 2; if(isset($_POST["Valider"])) { $option = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["option"]))); header ('Location: http://www.bike4life-shop.com/Panier.php?action=ajout&id='.$champ0.'&q=1&option='.$option.''); exit; } ?>
Ensuite le body
<?php mysql_connect("sql7","bike4lifeshop","m8WNpd7A"); mysql_select_db("bike4lifeshop") or die('Impossible de sélectioner une bdd'); $requete = mysql_query("SELECT * FROM produit WHERE numero='$champ0'"); while ($donnees = mysql_fetch_array($requete) ) { $libelle = $donnees['libelle']; $photo = $donnees['photo']; $lien = $donnees['lien']; $prixred = $donnees['prixred']; $prixnor = $donnees['prixnor']; $detail = $donnees['detail']; } if(isset($_POST["Valider"])) { $option = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["option"]))); header ('Location: http://www.bike4life-shop.com/Panier.php?action=ajout&id='.$champ0.'&q=1&option='.$option.''); exit; } ?> <span class="page"> <?php echo $libelle ?></span> <div id="image"> <img class="image2" src="<?php echo $photo ?>" alt="<?php echo $libelle ?>" title="<?php echo $libelle ?>"/> </div> <?php if (!empty($prixnor)) { echo '<div id="prix"> <div id="p"><span class="prix"> '.$prixred.' €</span><br />au lieu de '.$prixnor.'€</div>'; } else { echo '<div id="prix"> <div id="p"><span class="prix">'.$prixred.' €</span><br /></div> '; } ?> <br/> <br/> <br/> <br/> <br/> <form method="post"> <input type="hidden" name="option" value="175mm 44-32-22"/> <p class="delais">Délais de livraison: 2 à 5 jours ouvrables</p> <input type="hidden" name="Valider"/> <input class="envoyer" type="image" src="../../style/images/panier.jpg" border="0" name="Valider" value="Envoyer"/> </form> </div> <div id="detail"> <span class="page">Détails:</span> <p><?php echo $libelle ?></p> <p class="detail"><?php echo $detail ?></p> </div>
Utilisateur anonyme
8 févr. 2011 à 09:52
8 févr. 2011 à 09:52
Bonjour,
Bon, le code est un vrai chaos, désolé, donc je n'ai pas tout compris.
Vous faites la redirection à deux endroits, au tout début puis après la requête SQL, donc déjà enlevez cette redirection là qui ne sert à rien.
Ceci dit ça marche, quand je clique sur Envoyer, je part sur votre URL http://www.bike4life-shop.com/Panier.php?action=ajout&id=2&q=1&option=175mm%2044-32-22
Par contre je ne comprends pas trop ce que fait le code, désolé.
J'imagine que le but est de proposer une liste de produits, d'en sélectionner un et de cliquer sur envoyer pour aller jusque panier.php
Donc le code doit se structurer ainsi :
Lecture des données postées, s'il quelque chose a été posté et est conforme à ce qui est proposé, redirection vers le panier. Et Fin.
Sinon, consultation de la base pour afficher les produits. Affichage des choix, formulaire de sélection à partir de ces choix.
Attention cependant à de nombreux points, il faut sécuriser votre code quand on fait une boutique, quand on est sur le web, s'assurer que ce qui est posté est conforme à ce qui est proposé au départ, ne pas envoyer des données à un panier en GET comme vous le faites, il est trop simple de faire ceci : http://www.bike4life-shop.com/Panier.php?action=ajout&id=450&q=10000&option=zouga, vous vendez du zouga à 10000 euros ?
Cordialement
Bon, le code est un vrai chaos, désolé, donc je n'ai pas tout compris.
Vous faites la redirection à deux endroits, au tout début puis après la requête SQL, donc déjà enlevez cette redirection là qui ne sert à rien.
Ceci dit ça marche, quand je clique sur Envoyer, je part sur votre URL http://www.bike4life-shop.com/Panier.php?action=ajout&id=2&q=1&option=175mm%2044-32-22
Par contre je ne comprends pas trop ce que fait le code, désolé.
J'imagine que le but est de proposer une liste de produits, d'en sélectionner un et de cliquer sur envoyer pour aller jusque panier.php
Donc le code doit se structurer ainsi :
Lecture des données postées, s'il quelque chose a été posté et est conforme à ce qui est proposé, redirection vers le panier. Et Fin.
Sinon, consultation de la base pour afficher les produits. Affichage des choix, formulaire de sélection à partir de ces choix.
Attention cependant à de nombreux points, il faut sécuriser votre code quand on fait une boutique, quand on est sur le web, s'assurer que ce qui est posté est conforme à ce qui est proposé au départ, ne pas envoyer des données à un panier en GET comme vous le faites, il est trop simple de faire ceci : http://www.bike4life-shop.com/Panier.php?action=ajout&id=450&q=10000&option=zouga, vous vendez du zouga à 10000 euros ?
Cordialement
J'envoie au panier qui recherche l'id dans une bdd et qui affiche les données au panier. q= correspond à la quantité et non au prix.et les options sont celle disponible sur la page produit.
donc mis a part l'option qui peut être modifier on ne peut pas inventer un produit qui ne se trouve pas dans la bdd.
Sinon comment je peux sécuriser ?
donc mis a part l'option qui peut être modifier on ne peut pas inventer un produit qui ne se trouve pas dans la bdd.
Sinon comment je peux sécuriser ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
8 févr. 2011 à 12:58
8 févr. 2011 à 12:58
La sécurisation c'est assez simple mais elle prend du temps.
Vérifier que dans les données postées il n'y a que les champs du formulaire, rien d'autre, s'il y a en, les supprimer.
Transformer toutes les chaînes traitées pour enlever les tags HTML et les éventuels caractères spéciaux.
S'assurer ensuite du type des données, si c'est un nombre que l'on demande, ça ne doit pas être une chaîne de caractère, un mail ce n'est pas une URL etc...
Vérifier les contraintes, si le nombre est un âge, il doit être compris entre 0 et 130. Une date doit être valide, une chaîne de caractère doit avoir une longueur mini et maxi.
Et ces contrôles ne doivent pas être fait en JavaScript, c'est un + mais c'est inssufisant, ça doit être fait en PHP, car il suffit d'enregistrer une page HTML en local et de la bidouiller pour enlever toutes les sécurités Javascript.
Eviter de passer les arguments en GET, cela donne des pistes aux petits malins sur comment bidouiller le code.
Cordialement
Vérifier que dans les données postées il n'y a que les champs du formulaire, rien d'autre, s'il y a en, les supprimer.
Transformer toutes les chaînes traitées pour enlever les tags HTML et les éventuels caractères spéciaux.
S'assurer ensuite du type des données, si c'est un nombre que l'on demande, ça ne doit pas être une chaîne de caractère, un mail ce n'est pas une URL etc...
Vérifier les contraintes, si le nombre est un âge, il doit être compris entre 0 et 130. Une date doit être valide, une chaîne de caractère doit avoir une longueur mini et maxi.
Et ces contrôles ne doivent pas être fait en JavaScript, c'est un + mais c'est inssufisant, ça doit être fait en PHP, car il suffit d'enregistrer une page HTML en local et de la bidouiller pour enlever toutes les sécurités Javascript.
Eviter de passer les arguments en GET, cela donne des pistes aux petits malins sur comment bidouiller le code.
Cordialement
Merci pour les infos.
Mais comment j'envoie le produit dans le panier sans passer par un GET ?
Juste mettre l'id du produit?
Mais comment j'envoie le produit dans le panier sans passer par un GET ?
Juste mettre l'id du produit?
Utilisateur anonyme
8 févr. 2011 à 13:11
8 févr. 2011 à 13:11
Il faut l'envoyer en post si vous pouvez revoir le code du panier
7 févr. 2011 à 12:33
if(isset($_POST["Valider"])) et la suite va au début du code, ne pas oublier d'ajouter un exit après le header('location: sinon surprises...
7 févr. 2011 à 13:30
Je fais ca ce soir.
Merci
7 févr. 2011 à 13:40