Php错误通知:第35行C:\wamp\www\tweetball\classes\word.class.Php中的未定义索引:UserID
我一直在犯这个错误。我不知道为什么。。。谢谢 注意:第35行C:\wamp\www\tweetball\classes\word.class.php中的未定义索引:UserIDPhp错误通知:第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)
<?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您还需要一些时间来了解。