javascript
  • php
  • ajax
  • http
  • 2016-09-21 2 views 0 likes 
    0

    Привет Я пытаюсь вызвать функцию php при нажатии кнопки, но я продолжаю получать ошибку в заголовке.Переменная не определена, даже если она есть?

    Я вызываю функцию, как так:

    echo("<th><input type='button' name = 'Attack_Btn' onclick = 'FightPlayer(".$row['username'].")' value ='Attack'></th>"); 
    

    просто сказать имя пользователя, что он получает от $ строки [ 'пользователь ... это Джеймс ошибка будет отображаться

    index.php: 1 Неперехваченные ReferenceError: casualjames не определен

    Это код, который он вызывает следующий

    function FightPlayer(enemyName){ 
        var xhttpe; 
        if (window.XMLHttpRequest) { 
         xhttpe = new XMLHttpRequest(); 
         } else { 
         xhttpe = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        xhttpe.onreadystatechange = function() { 
         if (this.readyState == 4 && this.status == 200) { 
          BattlePlayers(); 
         } 
        }; 
        xhttpe.open("GET", "FightPlayer.php?enemyname="+enemyName, true); 
        xhttpe.send(); 
    } 
    

    и затем вызывает мой скрипт переходящий в переменной enemyname для того, чтобы использовать

    <?php 
        session_start(); 
        include 'Training.php'; 
        $link = mysqli_connect("","","",""); 
    
        if (isset($_SESSION['username'])) { 
         $enemyname = $_REQUEST["enemyname"]; 
         echo $enemyname; 
         $energyRemove = 1; 
         $ExperienceGain = 1; 
         $sql = "SELECT * FROM userstats WHERE username = '$enemyname'"; 
         $result = mysqli_query($link,$sql); 
         $row = mysqli_fetch_assoc($result); 
         $Defence = $row["Defence"]; 
         $winChance = CalculateWinChance($link,$Defence); 
         $sql = "SELECT Energy FROM userstats WHERE username = '".$_SESSION['username']."'"; 
         $result = mysqli_query($link,$sql); 
         $row = mysqli_fetch_assoc($result); 
         $rand = rand (1 , 100); 
         if($row["Energy"] < 1){ 
           echo "<script type='text/javascript'>alert('Not enough energy to fight. please restore in character page');</script>"; 
         }else{ 
          if($rand < $winChance){ 
           $_SESSION['Battlemessage'] = "you won against ".$enemyname; 
           $sql = "UPDATE userstats SET `Energy` = `Energy` - '$energyRemove' WHERE username = '".$_SESSION['username']."'"; 
           mysqli_query($link,$sql); 
           $sql = "UPDATE userstats SET `Experience` = `Experience` + '$ExperienceGain' WHERE username = '".$_SESSION['username']."'"; 
           mysqli_query($link,$sql); 
           $sql = "UPDATE userstats SET `Satoshi` = `Satoshi` + 2 WHERE username = '".$_SESSION['username']."'"; 
           mysqli_query($link,$sql); 
          }else{ 
           $_SESSION['Battlemessage'] = "you lost against ".$enemyname; 
           $sql = "UPDATE userstats SET `Energy` = `Energy` - '$energyRemove' WHERE username = '".$_SESSION['username']."'"; 
           mysqli_query($link,$sql); 
           $sql = "UPDATE userstats SET `Satoshi` = `Satoshi` + 1 WHERE username = '".$enemyname."'"; 
           mysqli_query($link,$sql); 
          } 
          echo ""; 
         } 
         calculateLevel($link); 
        } 
    ?> 
    

    Я не уверен, где ошибка на самом деле происходит, я кладу скрипты через интернет-код шашки и все это возвращает нормальное , Где я здесь не так?

    +1

    на стороне записки - Этот код все настройки для «Stored XSS атак» вы получили не дезинфицировать вход впрыскивается в базу данных, а затем вы его получили ($ enemyname) выводится другим пользователям без экранирования. – ArtisticPhoenix

    +0

    @ArtisticPhoenix О, я был под впечатлением, что вам нужно было только для ввода полей? – GregHBushnell

    +0

    Лучше всегда это делать, особенно когда вы сохраняете вещи в сеансе, вы можете случайно ввести ввод в параметр, который, хотя бы был бы безопасен, когда вы написали этот код. Также лучше использовать htmlentities для всего, что вы выводите в браузер (это не должно содержать html), который может интерпретировать встроенный javascript. Идея состоит в том, чтобы защитить ее прямо в том месте, где она потерпит неудачу. Таким образом, запросы, непосредственно перед вставкой, обновлением, выбором и т. Д. И выводом непосредственно перед его выходом. Тогда вы не будете волноваться последним, если вы измените какой-то код, который влияет на него. – ArtisticPhoenix

    ответ

    4

    Строка вы передаете в вашей яваскрипта функции нужно цитировать, или же он считает, что это переменная:

    echo("<th><input type='button' name = 'Attack_Btn' onclick = 'FightPlayer(\"".$row['username']."\")' value ='Attack'></th>"); 
    
    3

    Ваша ошибка, скорее всего, с OnClick ... вам нужно бежать котировки в качестве аргумента функции здесь:

    echo("<th><input type='button' name = 'Attack_Btn' onclick = 'FightPlayer(\"".$row['username']."\")' value ='Attack'></th>"); 
    
    Смежные вопросы