8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème pour maintenir register_globals sur off et afficher les données de mon caddie, pouvez-vous me dire comment rectifier les fonctions suivantes?

<?
	require_once("start.php");

	$qset = "select * from settings";
	$rset = mysql_query($qset) or die(mysql_error());
	$aset = mysql_fetch_array($rset);

	function GetCartId(){
		$cartId = session_id();
		$_SESSION["cartId"] = $cartId;
		return session_id();
	}
	function AddItem($item,$qty=1){
		//get the product info
		$q1 = "select * from items where ItemID = '$item' ";
		$r1 = mysql_query($q1) or die(mysql_error());
		$a1 = mysql_fetch_array($r1);
		//add to cart
		$chk = mysql_query("SELECT * FROM cart WHERE OrderID='".GetCartId()."' AND ItemID='$a1[ItemID]'");
		if( mysql_num_rows($chk) > 0 ){
			UpdateItem($item,2);
		}else{
			$q2 = "insert into cart set 
										OrderID = '".GetCartId()."',
										ItemID = '$a1[ItemID]',
										ItemPrice = '$a1[ItemPrice]',
										ItemQty = '$qty',
										ItemTotal = '$a1[ItemPrice]' ";
			mysql_query($q2) or die(mysql_error());
		}
	}
	function UpdateItem($item,$qty){
		//get the product info
		$q1 = "select * from items where ItemID = '$item' ";
		$r1 = mysql_query($q1) or die(mysql_error());
		$a1 = mysql_fetch_array($r1);

		//add to cart
		$q2 = "UPDATE cart SET ItemQty = '$qty' WHERE OrderID = '".GetCartId()."' AND ItemID = '$a1[ItemID]'";
		mysql_query($q2) or die(mysql_error());
	}
	function RemoveItem($item){
		mysql_query("DELETE FROM cart WHERE OrderID= '" . GetCartId() . "' and ItemID = '$item'");
	}
	function ShowCart(){
		//get the cart content
		$q1 = "select * from cart, items where cart.OrderID = '".GetCartId()."' and cart.ItemID = items.ItemID order by items.ItemName";
		$r1 = mysql_query($q1) or die(mysql_error());
		if(mysql_num_rows($r1) == '0'){
			include_once("templates/viderboutique.inc.php");
		}else{
			$col = "white";
			while($a1 = mysql_fetch_array($r1)){
				if($col == "white"){
					$col = "dddddd";
				}else{
					$col = "white";
				}
				$a1[ItemTotal] = ( $a1[ItemPrice] * $a1[ItemQty] );
				$rows .= "<tr bgcolor=\"$col\">\n\t<td class=BlackLink>$a1[ItemName]</td>\n<td align=right>$aset[currency_sign] $a1[ItemPrice]</td>\t\n\t<td align=center>\n\t\t<input type=text size=3 name=\"qty[]\" value=\"$a1[ItemQty]\">\n\t\t<input type=hidden name=\"ids[]\" value=\"$a1[ItemID]\">\n\t</td>\n\t<td align=right>$aset[currency_sign] $a1[ItemTotal]</td>\n</tr>\n\n";
				$order_total = $order_total + ( $a1[ItemPrice] * $a1[ItemQty] );
			}
			$order_total = number_format($order_total, 2, ".", ",");
			include_once("templates/afficherboutique.inc.php");
		}
	}

	function CategorySelect($c) {
		$q1 = "select * from categories order by CategoryName";
		$r1 = mysql_query($q1) or die(mysql_error());
		if(mysql_num_rows($r1) > '0'){
			$SelectCategory = "\n\n<select name=SelectCategory>\n\t<option value=\"\"></option>\n\t";
			while($a1 = mysql_fetch_array($r1)){
					if($a1[CategoryID] == $c){
						$SelectCategory .= "<option value=\"$a1[CategoryID]|$a2[SubcategoryID]\" selected>$a1[CategoryName], $a2[SubcategoryName]</option>\n\t";
					}else{
						$SelectCategory .= "<option value=\"$a1[CategoryID]\">$a1[CategoryName]</option>\n\t";
					}
			
			}
		}
		$SelectCategory .= "</select>\n";
		return $SelectCategory;
	}

	function CategoryTree($c) {
		$tree = "<table align=center width=\"98%\">\n";
		//get the categories
		$q1 = "select * from categories order by CategoryName ";
		$r1 = mysql_query($q1) or die(mysql_error());
		while($a1 = mysql_fetch_array($r1)){
			$tree .= "<tr>\n\t<td><a class=CategoryName href=\"categorie.php?cat=$a1[CategoryID]\"><B>$a1[CategoryName] </B></a></td>\n</tr>\n";
			if($c == $a1[CategoryID]){
				//get the products
				$q2 = "select * from items where ItemCategory = '$a1[CategoryID]'";
				$r2 = mysql_query($q2) or die(mysql_error());
				while($a2 = mysql_fetch_array($r2)){
					//$tree .= "<tr>\n\t<td><a href=\"view_item.php?ItemID=$a2[ItemID]\">&nbsp;$a2[ItemName]</a></td>\n</tr>\n";
				}
			}
		}
		$tree .= "</table>\n";
		return $tree;
	}
	function select_currency($c) {
		$currency_array = array("EUR|&euro;","CAD|&$dollar canadien;");
		$select = "<select name=\"currency\">\n\t";
		while(list($k,$v) = each($currency_array)){
			$info = explode("|", $v);
			if($c == $info[0]){
				$select .= "<option value=\"$v\" selected>$info[0]</option>\n\t";
			}else{
				$select .= "<option value=\"$v\">$info[0]</option>\n\t";
			}
		}
		$select .= "</select>";
		return $select;
	}

	function strip_trim($str) {
		$n = strip_tags($str);
		$n = trim($n);
		return $n;
	}

	function select_days($d) {
		$select = "<select name=\"download_days\">";
		for($i = '1'; $i <= '30'; $i++){
			if($i == $d){
				$select .= "<option value=\"$i\" selected>$i</option>\n\t";
			}else{
				$select .= "<option value=\"$i\">$i</option>\n\t";
			}
		}
		$select .= "</select>";
		return $select;
	}
	function show_banners(){
		global $dir;
		$q1 = "select * from banners order by rand() limit 0,1";
		$r1 = mysql_query($q1) or die(mysql_error());
		if(mysql_num_rows($r1) == '1'){
			$a1 = mysql_fetch_array($r1);
			$banners = "<BR><a href=\"$a1[BannerURL]\" target=\"_top\"><img src=\"banners/$a1[BannerFile]\" alt=\"$a1[BannerAlt]\" border=0></a>";
		}
		return $banners;
	}
	function show_links(){
		//get the link
		$q1 = "select * from links";
		$r1 = mysql_query($q1) or die(mysql_error());
		if(mysql_num_rows($r1) == '0'){
			echo ("");
		}
		while($a1 = mysql_fetch_array($r1)){
?>
			<a class=BlackLink href="<?=$a1[LinkURL]?>"><?=$a1[LinkName]?></a><br><BR>
<?
		}
	}
?>


Merci d'avance,
Cordialement,
Gilues
Modifié par Gilues (20 Dec 2008 - 13:24)
Hello Gilues et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait donc courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile
Heyoan a écrit :
Hello Gilues et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait donc courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile


Bonjour,

Tout à fait d'accord, désolé pour l'ommission, c'est corrigé.

Cordialement,
Gilues
Merci pour la mise en forme. Smiley cligne

Quel est le message d'erreur et à quelle ligne correspond-t-il ?
Heyoan a écrit :
Merci pour la mise en forme. Smiley cligne

Quel est le message d'erreur et à quelle ligne correspond-t-il ?


Bonjour Heyoan,

Pas de message d'erreur sinon l'indication que mon caddie est vide alors que j'ai sélectionné un produit et que register_globals est à off
Avec register_globals on par contre tout va bien, le produit sélectionné est bien enregistré dans le caddie.

Merci,
Gilues
Modifié par Gilues (20 Dec 2008 - 14:05)
A priori toutes tes fonctions n'utilisent que les variables passées en paramètres donc pas de problème avec register_globals : il faudrait voir comment ces fonctions sont appelées (et éventuellement ce que contient start.php).
Heyoan a écrit :
A priori toutes tes fonctions n'utilisent que les variables passées en paramètres donc pas de problème avec register_globals : il faudrait voir comment ces fonctions sont appelées (et éventuellement ce que contient start.php).


Bonjour,

Le fichier start.php contient ce qui suit:

<?

//enter your MySQL database host name, often it is not necessary to edit this line
$db_host = "localhost";

//enter your MySQL database username
$db_username = "usager";

//enter your MySQL database password
$db_password = "mot_de_passe";

//enter your MySQL database name
$db_name = "base_de_données";

//Script URL
$site_url = "http://www.nom_de_domaine.fr";


//conect to db
$conn = mysql_connect($db_host, $db_username, $db_password) or die(mysql_error());
$db = mysql_select_db($db_name, $conn) or die(mysql_error());
	
//start session
session_start();

//get the time
$t = time();


?>



...et le fichier boutique.php contient ce qui suit:

<?
	include("fonction.php");
	require_once("templates/header.inc.php");
	switch ($a){
		case "add":
			AddItem($_GET["item"],1);
			$totalCost = ShowCart();
			break;
		case "update":
			$myqty = $_POST['qty'];
			while(list($k,$v) = each($_POST[ids])){
				$qty = $myqty[$k];
				if( $qty == 0 ){
					RemoveItem($v);
				}else{
					UpdateItem($v, $qty);
				}
			}
			$totalCost = ShowCart();
			break;
		case "remove":
			RemoveItem($_GET["item"]);
			$totalCost = ShowCart();
			break;
		default:
			$totalCost = ShowCart();
			break;
	}
	require_once("templates/footer.inc.php");
	
	
?>


...le fichier fonction.php est le premier que j'ai publié sur ce forum.

Merci,
Gilues
Modifié par Gilues (20 Dec 2008 - 17:12)
Il sort d'où le $a de switch ($a) ?

Sinon ce serait plus propre d'utiliser $_GET plutôt que $_REQUEST (à moins que les variables puissent être aussi bien en GET qu'en POST.)
Heyoan a écrit :
Il sort d'où le $a de switch ($a) ?

Sinon ce serait plus propre d'utiliser $_GET plutôt que $_REQUEST (à moins que les variables puissent être aussi bien en GET qu'en POST.)


Bonjour,

J'utilise les deux, GET et POST, le $a n'est pas le problème mais peut-être l'affichage dont voici la page html:

<br>
<form method=post action="boutique.php" name='cartform'>
<input type='hidden' name='a' value='update'>
<table align=center width=90% cellspacing=0 border=0>
<caption align=center class=ObjetTitle>Votre Commande:</caption>
<tr class=TableHead>
	<td width=220>Nom du produit </td>
	<td width=80 align=right>Prix</td>
	<td width=50 align=center>Quantit&eacute;</td>
	<td width=100 align=right>Nombre de Produits au Total </td>
</tr>

<?=$rows?>
<tr>
	<td colspan=4 height=1 bgcolor=black></td>
</tr>

<tr>
	<td colspan=3 align=right>R&eacute;sultat de la Commande:</td>
	<td align=right class=BlackLink><?=$aset[currency_sign]?> <?=$order_total?></td>
</tr>

<tr>
	<td colspan=4 height=1 bgcolor=black></td>
</tr>

<tr>
	<td colspan=4 align=center><br>
        <table width="83%" border="0" cellspacing="0" cellpadding="0">
          <tr> 
			<td width="27%"><div align="center"> 
				<a href="index.php"><img src="images/shopmore.gif" width="116" height=21 alt="Continuer vos Achats" border=0></a>
			  </div></td>
			<td width="27%"><div align="center"> 
				<a href="checkout.php"><img src="images/checkout.gif" width="116" height=21 alt="Achetez Maintenant" border=0></a>
			  </div></td>
			<td width="27%"><div align="center"> 
				<input type=image src="images/update.gif" width="116" height=21 alt="Actualiser le Caddie" border=0></a>
			  </div></td>
          </tr>
        </table>
        &nbsp;&nbsp;&nbsp; <br>
        <br>
        &nbsp;&nbsp;&nbsp; </td>
</tr>

</table>

</form>


Merci,
Gilues
Gilues a écrit :


le $a n'est pas le problème
Eh bien avec register_globals à off... si, c'en est un puisqu'il faudrait utiliser $_POST['a'].
Heyoan a écrit :
Eh bien avec register_globals à off... si, c'en est un puisqu'il faudrait utiliser $_POST['a'].


...oui, j'ai déja essayé ça aussi mais ça ne change rien, toujours pas d'affichage du produit sélectionné.

Merci,
Gilbert
Je ne pense pas qu'il y ait un rapport avec register_globals mais à tout hasard tu pourrais également remplacer <? par <?php et <?=$var par <?php echo $var. Smiley hmm

Sinon il faut faire ce qu'on fait quand on ne voit plus quoi faire : debugger. Il faut donc rajouter des echo($variable) et des print_r($tableau) avant d'utiliser tes variables.
Modifié par Heyoan (20 Dec 2008 - 19:24)
Heyoan a écrit :
Je ne pense pas qu'il y ait un rapport avec register_globals mais à tout hasard tu pourrais également remplacer <? par <?php et <?=$var par <?php echo $var. Smiley hmm

Sinon il faut faire ce qu'on fait quand on ne voit plus quoi faire : debugger. Il faut donc rajouter des echo($variable) et des print_r($tableau) avant d'utiliser tes variables.


...ok, merci, je vais essayé comme ça.
Heyoan a écrit :
Je ne pense pas qu'il y ait un rapport avec register_globals mais à tout hasard tu pourrais également remplacer <? par <?php et <?=$var par <?php echo $var. Smiley hmm

Sinon il faut faire ce qu'on fait quand on ne voit plus quoi faire : debugger. Il faut donc rajouter des echo($variable) et des print_r($tableau) avant d'utiliser tes variables.


Bonjour Heyoan,

Après avoir essayé toutes les combinaisons possibles pour gérer $a suivant ton conseil, j'ai fini par trouver la solution en plaçant ce qui suit avant swhich dans boutique.php.

Je publie au cas où ça puisse servir à d'autres:

if (isset($_POST['a']))
      {
      $a = $_POST['a'];
      }
      if (isset($_GET['a']))
      {
      $a = $_GET['a'];
      }
     switch ($a){


Merci beaucoup pour votre site et aide,
Cordialement,
Gilues
Modifié par Gilues (21 Dec 2008 - 17:01)