Script inventaire qui bug

Eléphanteau du PHP | 26 Messages

12 juil. 2006, 18:16

Bonsoir à tous, j'ai (encore) un script qui plante:
Voici le code:
<?php
session_start();
$base = mysql_connect("localhost", "******", "*******"); 
mysql_select_db("******", $base);
$sql = "SELECT * FROM siteweb WHERE pseudo='".$pseudo."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
$pseudo=$data['pseudo'];
$gallions=$data['gallions'];
$humeur=$data['humeur'];
$sante=$data['sante'];
$envie=$data['envie'];
$robes=$data['robes'];
$chat=$data['chat'];
$hibou=$data['hibou'];
$crapaud=$data['crapaud'];
$chaudron=$data['chaudron'];
$fiole=$data['fiole'];
$telescope=$data['telescope'];
$balance=$data['balance'];
$ensemble=$data['ensemble'];
$baguette=$data['baguette'];
$baguetteun=$data['baguetteun'];
$baguettedeux=$data['baguettedeux'];
$bierraubeure=$data['bierraubeure'];
$theun=$data['theun'];
$chocolat=$data['chocolat'];
$objet=$data['objet'];
$objetun=$data['objetun'];
$objetdeux=$data['objetdeux'];
$objettrois=$data['objettrois'];
$objetquatre=$data['objetquatre'];
$objetcinq=$data['objetcinq'];
$choco=$data['choco'];
$bulles=$data['bulles'];
$plume=$data['plume'];
$livres=$data['livres'];
$cafe=$data['cafe'];
$the=$data['the'];
$purfeu=$data['purfeu'];
$reponse = mysql_query("SELECT cafe FROM ****** WHERE pseudo='$pseudo'");
while ($donnees = mysql_fetch_array($reponse) ) 
{
?>
<?php
if ($donnees['cafe'] == "oui")
{
echo 'Vous avez déjà un café dans votre inventaire! Veuillez l\'utiliser avant d\'en acheter un autre.';
echo '<a href="*******.php"> Retour </a>';
}

// si la variable est vide
elseif ($_GET['cafe'] == "")
{
header('location: *******.php');
}
// si la variable vaut 1, il achète les livres
elseif ($_GET['cafe'] =="1")
{
// vérification de ses sous
if ($gallions - 5 < 0)
{
// si non, on redirige vers une erreur
header('erreur3.php');
}
else
{
$sql = 'UPDATE `********` SET `gallions` = "'.$gallions.'" - 5, `cafe` = "oui" WHERE `pseudo` = "'.$pseudo.'"' ;
$req = mysql_query($sql) or die('Une erreur est survenue, veuillez réssayer. !<br>'.$sql.'<br>'.mysql_error());
// Puis on redirige vers l'acceuil
header('location: arrivee.php');

echo ('Vous achetez un café, à bientôt sur poudlard');
}}}?>  
<?php
$reponseun = mysql_query("SELECT purfeu FROM ****** WHERE pseudo='$pseudo'");
while ($donneesun = mysql_fetch_array($reponseun) ) 
{
?>
<?php
if ($donneesun['purfeu'] == "oui")
{
echo 'Vous avez déjà un whisky pur feu dans votre inventaire, veuillez le boire avant de vous re-saouler.';
echo '<a href="*******.php"> Retour </a>';
}
elseif ($_GET['purfeu'] == "")
{
header('location: piedodu.php');
}
// si la variable vaut 2, il achète les livres
elseif ($_GET['purfeu'] =="2")
{
// vérification de ses sous
if ($gallions - 15 < 0)
{
// si non, on redirige vers une erreur
header('erreur3.php');
}
else
{
$sql = 'UPDATE `********` SET `gallions` = "'.$gallions.'" - 15, `purfeu`= "oui" WHERE `pseudo` = "'.$pseudo.'"' ;
$req = mysql_query($sql) or die('Une erreur est survenue, veuillez réssayer. !<br>'.$sql.'<br>'.mysql_error());
// Puis on redirige vers l'acceuil
header('location: arrivee.php');

echo ('Profitez bien de votre whisky, à bientôt sur poudlard');
}} } 
?>
<?php
$reponsedeux = mysql_query("SELECT the FROM ****** WHERE pseudo='$pseudo'");
while ($donneesdeux = mysql_fetch_array($reponsedeux) ) 
{
?>
<?php
if ($donneesdeux['the'] == "oui")
{
echo 'Vous avez déjà un thé dans votre inventaire, veuillez l\'utiliser.';
echo '<a href="********.php"> Retour </a>';
}
elseif ($_GET['the'] == "")
{
header('location: *********.php');
}
// si la variable vaut 1, il achète les livres
elseif ($_GET['the'] =="3")
{
// vérification de ses sous
if ($gallions - 3 < 0)
{
// si non, on redirige vers une erreur
header('erreur3.php');
}
else
{
$sql = 'UPDATE `********` SET `gallions` = "'.$gallions.'" - 3, `the`= "oui" WHERE `pseudo` = "'.$pseudo.'"' ;
$req = mysql_query($sql) or die('Une erreur est survenue, veuillez réssayer. !<br>'.$sql.'<br>'.mysql_error());
// Puis on redirige vers l'acceuil
header('location: *********.php');

echo ('Vous prenez votre tasse de thé, à bientôt sur poudlard');
}} } 
mysql_close(); 
?><br/>
<a href="arrivee.php"> Quitter le chemin de traverse </a>
Voilà, le problème est que, lorsque je fais un test, et que j'ai les trois objets, deux, ou un seul, il m'affiche:

Code : Tout sélectionner

Vous avez déjà un café dans votre inventaire! Veuillez l'utiliser avant d'en acheter un autre. Retour Vous avez déjà un whisky pur feu dans votre inventaire, veuillez le boire avant de vous re-saouler. Retour Vous avez déjà un thé dans votre inventaire, veuillez l'utiliser. Retour Quitter le chemin de traverse
Pourquoi? Merci :)
Dededick...

Eléphant du PHP | 413 Messages

13 juil. 2006, 13:12

salut,
il y a un truc incohérent dans ton script :
while (... mysql_fetch_array ...) {
  ...
  header('location: ...');
  ...
}
ça veut dire que tu envoies plusieurs headers de location, alors que finalement un seul sera pris en compte !!
est-ce que tu as vraiment prévu que ce soit comme ça ?

ça peut être ce genre d'incohérence qui donne ton résultat inattendu.
--
Goeb

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 juil. 2006, 21:57

ça peut être ce genre d'incohérence qui donne ton résultat inattendu.
+1

A chaque fois que tu fais une redirection via les header, ajoute une commande exit() ou die() derrière
...
  header('location: ...');
  die();
  ...
}
Quand tout le reste a échoué, lisez le mode d'emploi...