Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何修复“数组索引超出范围?”_Php_Sql - Fatal编程技术网

Php 如何修复“数组索引超出范围?”

Php 如何修复“数组索引超出范围?”,php,sql,Php,Sql,当登录到我的Unity项目时,我发现错误数组索引超出了我C代码这一行的范围 if (www.text[0] == '0') www.text从此php脚本中提取调试时www.text返回null,因此我的脚本中肯定有错误 <?php $con = mysqli_connect('localhost', 'root', 'root', 'unityaccess'); //check that connection happened if (mysqli_connect_errno

当登录到我的Unity项目时,我发现错误数组索引超出了我C代码这一行的范围

   if (www.text[0] == '0')
www.text从此php脚本中提取调试时www.text返回null,因此我的脚本中肯定有错误

<?php

$con = mysqli_connect('localhost', 'root', 'root', 'unityaccess');

//check that connection happened
if (mysqli_connect_errno())
{
    echo "1: Connection failed"; //error code #1 = connection failed
    exit();
}

$username = $_POST["name"];
$password = $_POST["password"];

//check if name exists
$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE 
username = ' " . $username . "';";

$namecheck = mysqli_query($con, $namecheckquery) or die("2: Name check query 
failed"); //error code #2 - name check query failed
if (mysqli_num_rows($namecheck) != 1)
{
echo "5: Either no user with name, or more than one";
exit();
}

//get login info from query
$existinginfo = mysqli_fetch_assoc($namecheck)
$salt= $existinginfo["salt"];
$hash = $existinginfo["hash"];

$loginhash = crypt($password, $salt);
if($hash != $loginhash)
{
echo "6: Incorrect password"; //error code #6 - password does not hash to 
match table
exit();
}

echo "0\t" . $existinginfo["score"];

?>
我正在学习一个教程,对php和sql是新手


在教程中,他的代码与我的代码完全相同。我自己看着它,我认为回声是0\t$现有信息[分数];问题在于,放置一个选项卡并不是将其拆分为一个数组。在他的代码中,他运行了它,但它很好,所以我肯定遗漏了其他内容?

在这一行的查询中,在“后面有一个空格:

$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE 
username = ' " . $username . "';";
因此,如果输入的用户名是user1,它将在数据库中查找user1,其中表示空格字符。删除该空间

$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE 
username = '" . $username . "';";

事实上,如果您学会使用准备好的语句会更好,那么像这样的问题几乎是不可能的,并且使代码不受SQL注入的影响。阅读

您需要添加更多发出请求的Unity代码。查看当前代码,www.text似乎是一个字符串。请求的www.text结果为null或空,因此当您尝试使用www.text[0]访问单个字符时,它将抛出该错误,因为保存该字符的数组的索引为0。在访问返回的结果之前,请检查IsHttPeror和isNetworkError是否存在错误。如果没有错误,请使用string.IsNullOrEmpty在使用www.text之前验证它是否不为null。PHP代码是否到达最后一行而没有任何错误?因为,如果粘贴正确,它就被破坏了。这段PHP代码应该会给您一个致命错误,这一行的语法无效:名称匹配数!=1,除非是复制/粘贴错误,并且它实际上是前一行评论的一部分。请确定问题所在,然后发布与适当语言相关的问题。PHP是否输出预期的数据?如果是这样,那就无关紧要了。如果不是,那么这与C无关。PHP也可能会在一个丢失的文件上崩溃;在$existinginfo=mysqli\u fetch\u assoc$namecheck行上。因此,真正的问题类似于@Programmer所说的:请求是否给您一个HTTP错误?谢谢Barmar,但是删除空格仍然会产生相同的错误。这是我当前的代码,仍然返回错误5$namecheckquery=从用户名为“”的玩家中选择用户名、盐、哈希、分数$用户名';;我确实计划尽快学习如何防止sql注入,我只需要首先熟悉基本知识,因为这只是我学习sql/php的第二天;然后尝试手动执行查询。echo$namecheckquery返回:选择username、salt、hash、score FROM players,其中username='boardtobits';当您手动执行该查询时,它是否有效?