Page 1 sur 2

nombre au hasard

Posté : 09 août 2006, 18:09
par dededik
Bonjour j'aimerais générer un nombre au hasard: si c'est 1 fais ça...

voici un bout de code
$sort = rand(0,7)
if ($sort == "1")
{
echo " Incendio !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 5';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 5 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "2")
{
echo " Stupéfix !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 10';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 10 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";

}
elseif ($sort == "3")
{
echo " Inviblus !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 5';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 5 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "4")
{
echo " Endoloris !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 45';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 45 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "5")
{
echo " Shalakazam !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 20';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 20 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "6")
{
echo " Avada Kedavra !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 80';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 80 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "7")
{
echo " Destrcutum !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 30';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 30 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
elseif ($sort == "8")
{
echo " Impero !";
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie.'" - 35';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo "Vous avez perdu 35 points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";
}
else
{
echo "Heu... petit problème ... ";
}}
Il m'affiche :
Parse error: syntax error, unexpected T_IF in /mnt/128/sdc/6/3/poudlard2006/sort_adversaire.php on line 67

POurquoi?

Posté : 09 août 2006, 18:24
par Tictac
la dernière } est de trop !!

Posté : 09 août 2006, 18:28
par albat
À part ça, tu devrais utiliser un switch()... :wink:

Posté : 09 août 2006, 18:29
par Henri
1) Tu as bien tiré ton nombre au hasard avec l'instruction rand ? Que veux-tu de plus ?

2) regarde la syntaxe switch case qui sera beaucoup plus lisible que les suites de if elseif ...
switch ($sort) {
  case 1: ...
          break;
  case 2: ...
          break;
  ...
  default: ...
          break;
}
3) Factorise dans ton code tout ce qui peut l'être : le nom du sort, le nombre de PV perdus.
switch ($sort) {
  case 1: $nomsort = "Incendio";
          $deltaPV = 5;
          $action = true;
          break;
  case 2: $nomsort = "Stupéfix";
          $deltaPV = 10;
          $action = true;
          break;
  ...
  default: echo "Heu... petit problème ... "; 
           $action = false;
           break;
}
if ($action) {
  echo "$nomsort !"
  $sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie." - $deltaPV"; 
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
  echo "Vous avez perdu $deltaPV points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>"; 

}
4) Laisse tomber les if et les switch case et met tous tes noms de sorts et pertes de point de vie dans un tableau : ça ira plus vite.

5) Laisse tomber le tableau codé en dur dans le code et met les sorts dans une table : c'est ce qu'il y a de plus propre et de plus évolutif.

Posté : 10 août 2006, 14:05
par dededik
Merci! Je vais essayer le switch ;)

Posté : 10 août 2006, 14:16
par dededik

Code : Tout sélectionner

Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /mnt/128/sdc/6/3/poudlard2006/sort_adversaire.php on line 108
Cela viendrait il du fait que ma variable s'appelle $points_vie ?
Voici la ligne 108 :
$sql = 'UPDATE siteweb SET `points_vie` = "'.$points_vie." - '".$deltaPV."' WHERE pseudo = '".$pseudo."'";  

Posté : 10 août 2006, 14:26
par albat
Non, c'est autre chose.

La soustraction est une opération arithmétique.
Pour qu'elle s'exécute, il faut lui donner des variables numériques.
Or, une valeur placée entre guillemets ou apostrophes est alphanumérique.
$sql = "UPDATE siteweb SET points_vie = ".$points_vie." - ".$deltaPV." WHERE pseudo = '".$pseudo."'"; 

Posté : 10 août 2006, 14:30
par dededick
J'ai exactement le même problème, avec le même message d'erreur!
La seulle "T_variable" existante à la ligne 108 est $points_vie. Le problème ne peut vraiment pas venir de là?
voici le code complet du switch:
$sort = rand(0,8);
 switch ($sort) { 
  case 1: $nomsort = "Incendio"; 
          $deltaPV = 5; 
          $action = true; 
          break; 
  case 2: $nomsort = "Stupéfix"; 
          $deltaPV = 10; 
          $action = true; 
          break; 
	case 3: $nomsort = "Inviblus";
	$deltaPV = 5;
	$action = true;
	break;
	case 4: $nomsort = "Endoloris";
	$deltaPV = 45;
	$action = true;
	break;
	case 5: $nomsort = "Shalakazam";
	$deltaPV = 20;
	$action = true;
	break;
	case 6: $nomsort = "Avada kedavra";
	$deltaPV = 80;
	$action = true;
	break;
	case 7: $nomsort = "Destructum";
	$deltaPV = 30;
	$action = true;
	break;
	case 8: $nomsort = "Impero";
	$deltaPV = 35;
	$action = true;
	break;
	
default: echo "Heu... petit problème ... ";  
           $action = true; 
           break; 
} 
if ($action) { 
  echo "'".$nomsort."' !" 
$sql = "UPDATE siteweb SET points_vie = ".$points_vie." - ".$deltaPV." WHERE pseudo = '".$pseudo."'";  
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
  echo "Vous avez perdu '".$deltaPV."' points de vie. <a href=\"choisir_adversaire.php\"> Jouer </a>";  

}?>  

Posté : 10 août 2006, 14:35
par graphistnet
tu as oublié le ; apres l'echo juste avant la requête.

Posté : 10 août 2006, 14:44
par dededick
Merci !
Nouveau poblème :? : avant le switch, il vérifie les points des 2 combattants.
if ($points_ennemi <= 0)
{
echo " Vous avez gagnez!";
echo "<a href=\"duel.php\"> Refaire un duel </a>";
}
if ($points_vie <= 0)
{
echo "Vous avez perdu !";
echo "<a href=\"duel.php\"> Se venger </a>";
}
Problème : il m'affiche les 2 messages .
Pourquoi?

Posté : 10 août 2006, 14:53
par graphistnet
Tout simplement parce que les valeurs de tes 2 variables sont inférieures ou égales à 0

Posté : 10 août 2006, 14:56
par dededick
ça j'avais compris ^^
Mais pourquoi? La page d'avant, elles sont à 100. Et rien ne peut les faire baisser! Cela vient peut être de la transmission des variables ?

Posté : 10 août 2006, 15:00
par ouckileou
ça j'avais compris ^^
Mais pourquoi? La page d'avant, elles sont à 100. Et rien ne peut les faire baisser! Cela vient peut être de la transmission des variables ?
Tu vois, en réfléchissant tu cibles toi-même le problème petit à petit.

Donc pour vérifier si les variables sont transmises, on fait des echo de contrôle... ça s'appelle du débuggage :P

Posté : 10 août 2006, 15:04
par graphistnet
Pour t'en assurer affiche leurs valeurs sur cette page :wink:
Comment transitent tes variables?

edit:
oops je me suis prendre de vitesse

Posté : 10 août 2006, 15:04
par dededick
En gros je fais ça :
if ($points_ennemi <= 0)
{
echo " Vous avez gagnez!";
echo $points_ennemi;
echo "<a href=\"duel.php\"> Refaire un duel </a>";
}
if ($points_vie <= 0)
{
echo "Vous avez perdu !";
echo $points_vie;
echo "<a href=\"duel.php\"> Se venger </a>";
}

Code : Tout sélectionner

Vous avez gagnez! Refaire un duel Vous avez perdu ! Se venger 'Endoloris' !Vous avez perdu '45' points de vie. Jouer
C'est donc bien de la transmission.