nombre au hasard

dededik
Invité n'ayant pas de compte PHPfrance

09 août 2006, 18:09

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?

Eléphant du PHP | 353 Messages

09 août 2006, 18:24

la dernière } est de trop !!

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 août 2006, 18:28

À part ça, tu devrais utiliser un switch()... :wink:

Eléphant du PHP | 332 Messages

09 août 2006, 18:29

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.
Modifié en dernier par Henri le 10 août 2006, 19:41, modifié 1 fois.

dededik
Invité n'ayant pas de compte PHPfrance

10 août 2006, 14:05

Merci! Je vais essayer le switch ;)

dededik
Invité n'ayant pas de compte PHPfrance

10 août 2006, 14:16

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."'";  

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

10 août 2006, 14:26

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."'"; 

Eléphanteau du PHP | 26 Messages

10 août 2006, 14:30

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>";  

}?>  
Dededick...

Eléphant du PHP | 184 Messages

10 août 2006, 14:35

tu as oublié le ; apres l'echo juste avant la requête.
Image

Eléphanteau du PHP | 26 Messages

10 août 2006, 14:44

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?
Dededick...

Eléphant du PHP | 184 Messages

10 août 2006, 14:53

Tout simplement parce que les valeurs de tes 2 variables sont inférieures ou égales à 0
Image

Eléphanteau du PHP | 26 Messages

10 août 2006, 14:56

ç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 ?
Dededick...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 août 2006, 15:00

ç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

Eléphant du PHP | 184 Messages

10 août 2006, 15:04

Pour t'en assurer affiche leurs valeurs sur cette page :wink:
Comment transitent tes variables?

edit:
oops je me suis prendre de vitesse
Modifié en dernier par graphistnet le 10 août 2006, 15:05, modifié 1 fois.
Image

Eléphanteau du PHP | 26 Messages

10 août 2006, 15:04

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.
Dededick...