Php错误通知:第35行C:\wamp\www\tweetball\classes\word.class.Php中的未定义索引:UserID

Php错误通知:第35行C:\wamp\www\tweetball\classes\word.class.Php中的未定义索引:UserID,php,Php,我一直在犯这个错误。我不知道为什么。。。谢谢 注意:第35行C:\wamp\www\tweetball\classes\word.class.php中的未定义索引:UserID <?php session_start(); class Word { private $m_sWord; private $m_sMessage; private $link; public function __set($p_sProperty, $p_vValue)

我一直在犯这个错误。我不知道为什么。。。谢谢

注意:第35行C:\wamp\www\tweetball\classes\word.class.php中的未定义索引:UserID

<?php
session_start();
class Word
{

    private $m_sWord;
    private $m_sMessage;
    private $link;
    public function __set($p_sProperty, $p_vValue)
    {
        switch($p_sProperty)
        {
            case "Message":
                $this->m_sMessage = $p_vValue;
                break;
        }      
    }

    public function __get($p_sProperty)
    {
        $vResult = null;
        switch($p_sProperty)
        {
        case "Message": 
            $vResult = $this->m_sMessage;
            break;
        }
        return $vResult;
    }

    public function Save()
    {
        include("Connection.php");
        $sSql = "insert INTO words (word, FK_UserID) VALUES ('$_POST[message]','$_POST[UserID]')";  

        if ($rResult = mysqli_query($this->link, $sSql))
        {   
            echo "";
        }
        else
        {       
            throw new Exception('We could not save your word!');    
        }                   
        mysqli_close($this->link);
    }



    public function CreateNew()
        {
            $m_sHost = "localhost";
            $m_sUser = "root";
            $m_sPassword = "";
            $m_sDatabase = "tweetball";

                $link = mysqli_connect($m_sHost,$m_sUser,$m_sPassword,$m_sDatabase);
              if($link!=null){
                    $this->link=$link;
                }
                else
                {
                    throw new Exception("There seems to be a database problem. Try again later");
                }

    }
    public function getWord()
    {


            $m_sHost = "localhost";
            $m_sUser = "root";
            $m_sPassword = "";
            $m_sDatabase = "tweetball";


        $sSql = "select * from tweetball where WordID = 1;";    
        if ($rResult = mysqli_query($this->link, $sSql))
        {
            $singleRecord = mysqli_fetch_assoc($rResult);

            $message = $singleRecord['Word'];
        }
        else
        {       
            throw new Exception('We could get your word!'); 
        }                   
        mysqli_close($link);
        return($message);   
    }

}
?>

出现此错误是因为您引用的数组键“UserID”未为数组定义(在本例中为$\u POST)。快速查看一下您的SQL查询,我注意到您的键不在引号中,它们必须在引号中


我不会评论未经检查的输入是多么的不安全。将用户数据输入数据库

这实际上不是一个错误,而是一个通知。它告诉您您正在尝试使用未手动设置的变量。如果设置不正确,则可能导致变量注入

您可以通过关闭PHP错误通知(如果您确信您的PHP设置是安全设置的,在尝试使用它们之前定义所有或变量,或者在调用之前使用
if(isset($variable))
来修复此问题

$sSql = "insert INTO words (word, FK_UserID) 
    VALUES ('$_POST[message]','$_POST[UserID]')"; 
没有
$\u POST['UserID']
值。请注意,数组键(例如
UserID
)区分大小写


还要注意的是,您在这里所做的事情容易受到SQL注入的影响,应该立即更改。这里有很多问题,因此,在PHP中处理什么是SQL注入以及如何防止SQL注入。

您必须在类中定义您的id,您可以使用
$\u REQUEST
$\u POST
,确保您的数据中有列您发送的值的基础。

I您还需要一些时间来了解。