我正在运行PHP脚本,并继续收到如下错误:
注意:未定义的变量:第10行的C:\ wamp\www\mypath\index.php中的my_variable_name
注意:第11行的未定义索引:my_index C:\ wamp\www\mypath\index.php
第10行和第11行看起来像这样:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Run Code Online (Sandbox Code Playgroud)
这些错误消息的含义是什么?
他们为什么突然出现?我曾经使用这个脚本多年,我从来没有遇到任何问题.
我该如何解决?
这是一个一般参考问题,供人们链接到重复,而不是一遍又一遍地解释这个问题.我觉得这是必要的,因为关于这个问题的大多数现实世界的答案都非常具体.
相关元讨论:
我正在尝试重新学习一些PHP基础知识来制作一个简单的登录脚本,但是我得到了一个我之前没有收到的错误(我在一年多前制作了相同的脚本并且从未出现过这个错误.我简化了代码我可以测试哪个区域有问题,这是问题所在:
<?php
$user = $_POST["username"];
if($user != null)
{
echo $user;
echo " is your username";
}
else
{
echo "no username supplied";
}
?>
Run Code Online (Sandbox Code Playgroud)
现在,当我将一个变量发送到脚本时,这段代码工作正常,但是当没有提供变量时,它会发出错误.理论上这很好,因为如果没有提供用户名/传递,那么预计会出错.在代码发送到脚本之前,我将检查以确保这一点,但是我担心不知何故空字符串可能泄漏并吐出一些未知错误.这是我得到的错误:
( ! ) Notice: Undefined index: username in C:\wamp\www\verify_login.php on line 2
Call Stack
Time Memory Function Location
1 0.0003 668576 {main}( ) ..\verify_login.php:0
Run Code Online (Sandbox Code Playgroud)
没有提供用户名
你可以看到代码寄存器没有提供变量,但它给出了错误,我假设意味着没有找到一个变量是预期的或类似的东西.有人可以帮我澄清一下吗?
我编写了一个Symfony命令来从API导入一些数据.它的工作原理但问题是当我在数据库中插入一个大的JSON时,我的PHP内存使用量会增加.并且我的unitOfWork在每次激活导入后增加"2".
我已经取消了所有用过的对象,当你想做大量的批处理时,我已经阅读了Symfony2的文档:http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
但是当我使用$em->clear()我的实体管理器时会出现此错误:
注意:未定义的索引:000000007b56ea7100000000e366c259在path-to-application\vendor\doctrine\lib\Doctrine\ORM\UnitOfWork.php第2228行中
这是我的完整代码:
/**
* @see Command
*/
protected function configure() {
$this
->setName('ks:user:runkeepersync')
->setDescription('Synchroniser les activités d\'un utilisateur runkeeper')
->setDefinition(array(
new InputArgument('access_token', InputArgument::REQUIRED, 'Access token'),
))
}
/**
* @see Command
*/
protected function execute(InputInterface $input, OutputInterface $output) {
$accessToken = $input->getArgument('access_token');
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$UserHasServices = $em->getRepository('KsUserBundle:UserHasServices')->findOneByToken($accessToken);
if (!is_object($UserHasServices) ) {
echo "Impossible de trouver l'utilisateur qui possède le jeton ".$accessToken."";
}
$user = $UserHasServices->getUser();
$service = $UserHasServices->getService();
echo "avant de …Run Code Online (Sandbox Code Playgroud) 当我尝试通过该数组中不存在的键访问数组时,php将引发"未定义索引"通知错误.当我尝试对字符串执行相同操作时,会出现"非法字符串偏移"警告.这是一种预期的行为,我知道如何处理它.
但是当我在布尔值或整数值上尝试这个时,没有任何反应:
ini_set('display_errors', 1);
error_reporting(E_ALL);
$var = false;
var_dump($var['test']);
Run Code Online (Sandbox Code Playgroud)
我希望看到一些错误消息,但$var['test']只是静默设置为NULL.
那么为什么php允许通过数组键访问布尔值而没有任何迹象表明你做错了什么?洞"通过数组键访问布尔值"这句话对我来说听起来非常奇怪,但你可以在php中完成.
我在使用phpMyAdmin时收到以下错误.每次我创建任何表时都会发生这种情况.
Notice in ./libraries/structure.lib.php#1881
Undefined index: Rows
Backtrace
./libraries/structure.lib.php#2382: getHtmlForRowStatsTable(
array,
NULL,
boolean false,
boolean false,
string '',
string '',
)
./libraries/display_structure.inc.php#263: PMA_getHtmlForDisplayTableStats(
string '',
NULL,
NULL,
boolean false,
NULL,
string '?db=btc_orders&table=Rep&token=09aa3ad5cb85e33dad2a2098ed2874e2&goto=tbl_structure.php&back=tbl_structure.php',
NULL,
)
./tbl_structure.php#163: require_once(./libraries/display_structure.inc.php)
Run Code Online (Sandbox Code Playgroud)
它只发生在PHPMyAdmin中的一个Datadase上,没有任何错误弹出任何其他数据库.
我已删除所有表并再次完成它们,每次添加新表时仍会出现错误.
我正在尝试遍历数组并删除并跳过元素,直到只有一个存在.我已经尝试过拼接,但是它弄乱了我的循环,因为来自arr [1]的元素变成了arr [0]等.
假设有10个人.我想删除1号人员然后保留2号人员然后移除3号人员并保留4号人员.此模式将一直持续到只剩下一人.
任何形式的帮助都可以.
我正在使用Jquery,Ajax和PHP来尝试发送一个要在mysql数据库中编写的变量.正在进行Ajax请求,但php没有获取变量.我不知道为什么会这样.
使用firebug和console.log()我可以看到对write_results.php进行了POST
如果我检查响应它说
注意:未定义的索引:第2行的E:\ write_results.php中的testscore
这是我的PHP
<?php
$testscore=$_POST['testscore']; //get testscore from Ajax
include 'DB.php';
$con = mysql_connect($host,$user,$pass);
$dbs = mysql_select_db($databaseName, $con);
if (isset($_POST['testscore'])) {
$addClient = "INSERT INTO variables (`id` ,`name`) VALUES (NULL,'$testscore')";
mysql_query($addClient) or die(mysql_error());
}
?>
Run Code Online (Sandbox Code Playgroud)
这是我的ajax脚本
<script type="text/javascript">
$(document).ready(function() {
testscore ="tryagain"; //testvalue to enter into the mysql database
$.ajax({
type: "POST",
url: "write_results.php",
data: testscore,
success: function(){
$('#box2').html("success");
}
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的问题
所以,我目前正在学习PHP并正在阅读一本关于密码的md5函数的书,所以我决定尝试一下,看看它是怎么回事.我还决定使用POST方法而不是GET,因为我看到人们说它更安全,并且不会让变量出现在URL上.
对于我的测试项目,我做了一个非常简单的表格,如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<form action="dologin" method="POST">
<table border="0">
<tbody>
<tr>
<td>Username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password"></td>
</tr>
</tbody>
</table>
<input type="submit" value="Login">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
问题是当我在BOTH字段中输入值并单击"Login"时,我在另一个PHP文件上得到以下输出.
Notice: Undefined index: username in C:\xampp\htdocs\md5\home\dologin\index.php on line 11
Username non existent
Run Code Online (Sandbox Code Playgroud)
以下是"/dologin/index.php"文件的代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$query = "SELECT password FROM users …Run Code Online (Sandbox Code Playgroud) 我已经阅读了其他问题,没有人回答也没有帮助我。
这是我的问题,我有一个对象/数组,其中包含一个也是对象/数组的属性。
我已经通过以下方式成功访问了类似的属性:
$variable[propertyObject][property]
Run Code Online (Sandbox Code Playgroud)
但是,我已经收到错误通知:最近未定义索引。
这是代码:
$extensionData = $data['Data'];
echo '<p>' . isset($extensionData['Calories']) ? $extensionData['Calories'] : '' . '</p>';
Run Code Online (Sandbox Code Playgroud)
但是,这仍然会引发相同的错误。即使我检查:
isset($extensionData['Calories']),它始终解析为1 / True,这意味着该属性应该存在,那么如何定义索引呢?
当我执行的var_dump或print_r时$extensionData,这就是我得到的:
Array
(
[Calories] => 295
[WebDesktopImage] => https://clutch-asset-management.s3.amazonaws.com/elevation-burger/IMG_0760-Edit.jpg
[WebMobileImage] => https://clutch-asset-management.s3.amazonaws.com/elevation-burger/IMG_0760-Edit.jpg
[WebDescription] => BLT image
)
Run Code Online (Sandbox Code Playgroud) 我已经打开了所有错误报告,以清理一些未定义的索引,只是为了使我制作的应用程序更加简洁。我注意到一种奇怪的行为:
假设我有以下数组: $a = array('test' => false, 'foo' => 'bar')
如果这样if ($a['nothere']),我会适当的通知Undefined index: nothere。
但是,如果这样做if ($a['test']['nothere']),我不会收到通知。完全没有 尽管nothere绝对不是的索引$a['test']。
现在,如果我这样做了$a['test'] = array('baz' => 'poof'),那么运行if ($a['test']['nothere']) 确实会发出通知。
未定义索引检查是否不检查空数组中的索引?这是在PHP 5.2.8上。
undefined-index ×10
php ×8
arrays ×4
boolean ×1
http-post ×1
indexing ×1
javascript ×1
jquery ×1
login ×1
memory-limit ×1
mysql ×1
phpmyadmin ×1
post ×1
symfony ×1
unit-of-work ×1
variables ×1
warnings ×1