Variable errors at the beginning of PHP

Asked

Viewed 194 times

1

Good morning, everyone.
With the help of the user Luan Peil I managed to make my algorithm a simulator of an RPG fight. The problem is that when starting, it reports many variable errors (Undefined).

I wonder if someone could hide these messages or create the variable before in a way that doesn’t appear during the program.

<?php
       if(isset($_GET["text"]))
{
 $gamestart=0;  

if($_GET["player"] != null) 
    { 
        $player = $_GET['player']; 
    } 
    else 
    {   
        $player = 100;
    }
if($_GET["enemy"] != null) 
    { 
        $enemy = $_GET['enemy'];
    } 
else    
{
    $enemy = 100; 
}
if($_GET["ecounter"] != null) 
    {
        $ecounter = $_GET['ecounter'];
    } 
else    
{
    $ecounter = 1; 
}

if($_GET["pcounter"] != null) 
    {
        $pcounter = $_GET['pcounter'];
    } 
    else    
    {
        $pcounter = 1; 
    } 
$dano = 15;

if(isset($_GET["action"])) {

if($ecounter <=3)
        {
            $action = rand(1, 4); 
        }

        else
        {
            $action = rand(1, 3);
        }


$ataque= $_GET["action"];

if($pcounter > 3 && $ataque== 4)
    {
        $ataque = 3;
    }


if($action == 1 && $ataque == 1) { //Se ambos atacarem
$dano =15;
    $enemy -= $dano;
    $player -= $dano;
    echo "<br>Você deu um ataque no seu inimigo. causando 15 de dano";
    echo "<br>Ele te ataca de volta, causando 15 de dano.";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
} 
elseif($action == 1 && $ataque == 2) { //Se vc atacar e o inimigo defender
    $dano =15;
    $player -= $dano / 2;
    echo "<br>Você se defendeu, recebendo só metade do dano";
    echo "<br>O inimigo te ataca, te dando 7,5 de dano.";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==1 && $ataque==3)
{
    $dano = 15;
    $player -= $dano;
    $player = $player + 30;
    if($player > 100)
    {
        $player = 100;
    }
    echo "<br>Ele te deu um ataque, causando 15 de dano.";
    echo "<br>Você tomou uma poção, recuperando os 15 de dano e mais 15 de vida";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==1 && $ataque==4)    
{
    $dano = 40;
    $enemy -= $dano;
    $dano = 15;
    $player -= $dano;
    $pcounter++;
    echo "<br>Ele te deu um ataque, causando 15 de dano.";
    echo "<br>Você usou uma bola de fogo, causando 40 de dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action == 2 && $ataque == 1) { 
    $dano =15;
    $enemy -= $dano / 2;
    echo "<br>Você ataca o inimigo, mas ele recebe metade do dano por se defender";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
} 
elseif($action==2 && $ataque==2){ 
    echo "<br>Ambos se defenderam ao mesmo tempo, nada acontece.";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==2 && $ataque==3)
{
    $player = $player + 30;
    if($player > 100)
    {
        $player = 100;
    }
    echo "<br>Ele se defendeu, recebendo só metade do dano.";
    echo "<br>Mas você tomou uma poção, recuperando 30 de vida e tornando o bloqueio inútil.";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==2 && $ataque==4)
{
    $pcounter++;
    $dano =40;
    $enemy -= $dano /2;
    echo "Você disparou uma bola de fogo";
    echo "<br>Ele se defendeu, recebendo só metade do dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==3 && $ataque==1)
{
    $dano = 15;
    $enemy -= $dano;
    $enemy = $enemy + 30;
    if($enemy > 100)
    {
        $enemy = 100;
    }
    echo "<br>Você te deu um ataque, causando 15 de dano.";
    echo "<br>Ele tomou uma poção, recuperando 15 do dano e mais 15 de vida";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==3 && $ataque==2)
{
    $enemy = $enemy + 30;
    if($enemy > 100)
    {
        $enemy = 100;
    }
    echo "<br>Você se defendeu, recebendo só metade do dano.";
    echo "<br>Mas ele tomou uma poção, recuperando 30 de vida.";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==3 && $ataque==3)
{
    $enemy = $enemy + 30;
    if($enemy > 100)
    {
        $enemy = 100;
    }
    $player = $player + 30;
    if($player > 100)
    {
        $player = 100;
    }
    echo"Ambos tomam uma poção, recuperando 30 de vida";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==3 && $ataque==4)
{
    $pcounter++;
    $dano = 40;
    $enemy -= $dano;
    $enemy = $enemy + 30;
    if($enemy > 100)
    {
        $enemy = 100;
    }
    echo "Você usa uma bola de fogo, causando 40 de dano.";
    echo "O inimigo toma uma poção, recuperando 30 dos 40 de vida perdida";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==4 && $ataque==1)
{
    $ecounter++;
    $dano=40;
    $player -= $dano;
    $dano = 15;
    $enemy -= $dano;
    $ecounter++;
    echo "<br> Você deu um ataque, causando 15 de dano";
    echo "<br> Ele deu um ataque muito forte, causando 40 de dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==4 && $ataque==2)
{

    $dano=40;
    $player -= $dano /2;
    $ecounter++;
    echo "Você se defende, recebendo metade do dano";
    echo "<br> Ele deu um ataque muito forte, causando 20 de dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==4 && $ataque==3)
{

    $dano=40;
    $player -= $dano;
    $player = $player + 30;
    if($player > 100)
    {
        $player = 100;
    }
    $ecounter++;
    echo "<br> Você tomou uma poção, recuperando 30 de vida";
    echo "<br> Ele deu um ataque muito forte, causando 40 de dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
elseif($action==4 && $ataque==4)
{

    $dano=40;
    $player -= $dano;
    $enemy -= $dano;
    $ecounter++;
    echo "Você disparou uma bola de fogo, causando 40 de dano";
    echo "<br> Ele deu um ataque muito forte, causando 40 de dano";
    echo "<br>Você: ".$player."<br>Inimigo: ".$enemy;
}
}

if($enemy <= 0) 
{
    echo '<br>você venceu o inimigo';
} 
elseif($player <= 0) 
{
    echo '<br>você perdeu para o inimigo';
} 
else 
{
    echo '
<form action="?" method="get">
    <br>1- ataque<br>
    2- defesa <br>
    3- tomar poção<br>
    4- bola de fogo<br>
    <input type="hidden" name="ecounter" value="'.$ecounter.'">
    <input type="hidden" name="pcounter" value="'.$pcounter.'">
    <input type="hidden" name="player" value="'.$player.'">
    <input type="hidden" name="enemy" value="'.$enemy.'"> 
    <input type="text" name="action">
    <input type="submit" value="Enviar">
</form>';
}   
}
?>

Errors indicated by phptester.net :

NOTICE Undefined index: player on line number 18

NOTICE Undefined index: Enemy on line number 24

NOTICE Undefined index: ecounter on line number 32

NOTICE Undefined index: pcounter on line number 40

  • Errors are of undefined variables or non-existent indices in the array?

  • First I didn’t get to do an array. Second when running the program, it informs that there is an undefined variable error

  • 2

    $_GET is an array and when doing $_GET['x'] != null you assume the x index exists, which may not be true. You could edit the question and add all the error messages?

1 answer

3


If I’m not mistaken that Undefined var error actually is a notice.

Options:

If it’s really the notice you can configure php to delete

// No seu script.php
// Assim 
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Ou assim
error_reporting(E_ERROR & ~E_NOTICE);


// Ou no php.ini
error_reporting = E_ALL & ~E_NOTICE

Or you can do the checks like this

// Usar o isset antes
if( isset($test) )
{}

if( isset($_GET['test']) )
{}

Another thing you can also do and declare at the beginning those variables you are starting within the if, example $player=null;

Update: Removed the second check $test == null as commented by @Diegoschmidt isset already checks.

  • Use this in IF to create the variable and save its value? Would that be it?

  • As an example see this if, it is one of the ones you should put the isset before if($_GET["player"] != null)

  • The variable $test would be a variable that I would only need to replace? or would it be a new variable to add to the code?

  • Ali is just an example, is why I am on the mobile. You have to change the ones being shown in the errors, player, enemy, ecounter and pcounter, the line numbers should lead to if

  • 1

    Okay, now that I get it, I redid the code with the example you gave me and it’s all working perfectly. thank you so much for your help.

  • 3

    @riki481 Only one correction, isset already checks if the variable is null, does not need to do both checks.

  • @All right, thank you.

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.