nombre au hasard

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : nombre au hasard

par graphistnet » 10 août 2006, 15:09

Pour le débuggage je te conseille de nommer tes valeurs en faisant echo "nom de la variable : ".$variable
L'exemple que tu nous donnes à l'air de fonctionner, il faudrait que tu affiches le résultat complet de la page.

par dededick » 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.

par graphistnet » 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

par ouckileou » 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

par dededick » 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 ?

par graphistnet » 10 août 2006, 14:53

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

par dededick » 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?

par graphistnet » 10 août 2006, 14:35

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

par dededick » 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>";  

}?>  

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

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

par dededik » 10 août 2006, 14:05

Merci! Je vais essayer le switch ;)

par Henri » 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.

par albat » 09 août 2006, 18:28

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

par Tictac » 09 août 2006, 18:24

la dernière } est de trop !!