请注意 "undefined index",但这一直有效,直到我完成代码
Notice "undefined index", but this continued to work until I completed the code
首先,我添加了文本视图,其中包含关于我的问题的通知(以及一些警告)。
Notice: Undefined index: first_name in C:\my_projects\phplearn\www\ch07\create_user.php on line 17
Notice: Undefined index: last_name in C:\my_projects\phplearn\www\ch07\create_user.php on line 19
Notice: Undefined index: email in C:\my_projects\phplearn\www\ch07\create_user.php on line 21
Notice: Undefined index: bio in C:\my_projects\phplearn\www\ch07\create_user.php on line 23
Notice: Undefined index: facebook_url in C:\my_projects\phplearn\www\ch07\create_user.php on line 25
Notice: Undefined index: twitter_handle in C:\my_projects\phplearn\www\ch07\create_user.php on line 40
Notice: Undefined index: user_pic in C:\my_projects\phplearn\www\ch07\create_user.php on line 49
Notice: Trying to access array offset on value of type null in C:\my_projects\phplearn\www\ch07\create_user.php on line 49
Notice: Undefined index: user_pic in C:\my_projects\phplearn\www\ch07\create_user.php on line 57
Notice: Trying to access array offset on value of type null in C:\my_projects\phplearn\www\ch07\create_user.php on line 57
Warning: Header may not contain more than a single header, new line detected in C:\my_projects\phplearn\www\stack\scripts\app_config.php on line 63
当我添加这段代码时问题开始了:
($_FILES[$image_fieldname]['error'] == 0)
or redirectToError("сервер не может получить выбранное вами изображение.", $php_errors[$_FILES[$image_fieldname]['error']]);
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
@getimagesize($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>', "вы выбрали файл для своего фото, который не является изображением." , "{$_FILES[$image_fieldname]['tmp_name']}" , "не является файлом изображения.", '</pre>');
$now = time();
while (file_exists($upload_filename = $upload_dir . $now . '-' . $_FILES[$image_fieldname]['name'])) {
$now++;
}
move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or redirectToError('<pre>',"возникла проблема сохранения вашего изображения в его постоянном месте. Ошибка, связанная с правами доступа при перемещении файла в {$upload_filename}", '</pre>');
这是我在这个文件中的所有代码。
<?php
$link = require_once ('../stack/scripts/database_connection.php');
$upload_dir = HOST_WWW_ROOT . "uploads/profile_pics";
$image_fieldname = "user_pic";
$php_errors = array(1 => 'Превышен макс. размер файла, указанный в php.ini',
2 => 'Превышен макс. размер файла, указанный в форме HTML',
3 => 'Была отправлена только часть файла',
4 => 'Файл для отправки не был выбран.');
$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$email = trim($_REQUEST['email']);
$bio = trim($_REQUEST['bio']);
$facebook_url = str_replace("facebook.org", "facebook.com", trim($_REQUEST['facebook_url']));
if (preg_match("/^\s*(http:\/\/www.facebook.com\/)/" , $facebook_url)) {
$facebook_url === true;
} else {
$facebook_url = "http://www.facebook.com/" . $facebook_url;
}
$twitter_handle = trim($_REQUEST['twitter_handle']);
$twitter_url = "http://www.twitter.com/";
if (preg_match("/^\s*(@)/" , $twitter_handle)) {
$twitter_url = $twitter_url . $twitter_handle;
}
($_FILES[$image_fieldname]['error'] == 0)
or redirectToError("сервер не может получить выбранное вами изображение.", $php_errors[$_FILES[$image_fieldname]['error']]);
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
@getimagesize($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>', "вы выбрали файл для своего фото, который не является изображением." , "{$_FILES[$image_fieldname]['tmp_name']}" , "не является файлом изображения.", '</pre>');
$now = time();
while (file_exists($upload_filename = $upload_dir . $now . '-' . $_FILES[$image_fieldname]['name'])) {
$now++;
}
move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or redirectToError('<pre>',"возникла проблема сохранения вашего изображения в его постоянном месте. Ошибка, связанная с правами доступа при перемещении файла в {$upload_filename}", '</pre>');
$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, facebook_url, twitter_handle)
VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$facebook_url}', '{$twitter_handle}');";
mysqli_query($link, $insert_sql)
or die(mysqli_error($link));
header("Location: show_user.php?user_id=" . mysqli_insert_id($link));
?>
<html>
<head>
<link href="../stack/css/phpMM.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header"> <h1>PHP & MySQL: The Missing Manual</h1></div>
<div id="example"> Пример 3.1</div>
<div id="content">
<p>Это запись той информации, которую вы отправили:</p>
<p>
Имя: <?php echo $first_name . " " . $last_name;?></br>
Адрес электронной почты: <?php echo $email;?></br>
<a href="<?php echo $facebook_url; ?>">Ваша страница на Facebook:</a></br>
<a href="<?php echo $twitter_url; ?>">Проверьте свой Twitter - канал</a></br>
</p>
</div>
<div id="footer"></div>
</body>
</html>
这是我第一次在这里提问,如果我的问题形式让您感到不舒服,我深表歉意。帮助,请。谢谢
关于头函数的更新。这是我的 AppConfig.php
<?php
define("DEBUG_MODE", true);
define("SITE_ROOT", "/stack/");
define("HOST_WWW_ROOT", "C:/my_projects/phplearn/www/stack/");
define("DATABASE_HOST", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "");
define("DATABASE_NAME", "testdb");
$testArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
];
function debug_print($testArray) {
if (DEBUG_MODE) {
echo '<pre>' . print_r($testArray, 1) . '</pre>';
echo generateCallTrace();
}
}
/*My friend give me this function, im not good understand what`s going on here, eh*/
function generateCallTrace()
{
$e = new Exception();
$trace = explode("\n", $e->getTraceAsString());
// reverse array to make steps line up chronologically
$trace = array_reverse($trace);
array_shift($trace); // remove {main}
array_pop($trace); // remove call to this method
$length = count($trace);
$result = array();
for ($i = 0; $i < $length; $i++)
{
$result[] = ($i + 1) . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering
}
return "\t" . implode("\n\t", $result);
}
function redirectToError($msg, $error_msg = null) {
if ($error_msg != null) {
header("Location: " . SITE_ROOT . "scripts/show_error.php?error_message={$msg}&system_error_message={$error_msg}");
} else {
header("Location: " . SITE_ROOT . "scripts/show_error.php?error_message={$msg}");
}
die();
}```
您发布的代码片段存在几个问题,但要使其再次运行,您应该修复错误消息。
来自这里:
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
为此:
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить? Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
为什么您的原始错误消息不起作用? "Зачем ты это пытался загрузить?" 之间有一个新行?和原始错误消息中的“Запрос на отправку”。现在,根据 redirectToError
函数定义,第二个参数将直接传递给 header
函数,而无需任何 transformation/encoding。这意味着,您将作为单个 HTTP header 传递一个 multi-line 字符串,这是违反 HTTP 协议的。
关于其他 PHP 通知,显示它们是因为没有 POST 数据发送到页面。您可以添加一些非常基本的检查以确保您的脚本被表单提交调用:
<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// вернуть пользователя обратно на страницу формы
header("Location: create_user.html");
}
$link = require_once ('../stack/scripts/database_connection.php');
...
首先,我添加了文本视图,其中包含关于我的问题的通知(以及一些警告)。
Notice: Undefined index: first_name in C:\my_projects\phplearn\www\ch07\create_user.php on line 17
Notice: Undefined index: last_name in C:\my_projects\phplearn\www\ch07\create_user.php on line 19
Notice: Undefined index: email in C:\my_projects\phplearn\www\ch07\create_user.php on line 21
Notice: Undefined index: bio in C:\my_projects\phplearn\www\ch07\create_user.php on line 23
Notice: Undefined index: facebook_url in C:\my_projects\phplearn\www\ch07\create_user.php on line 25
Notice: Undefined index: twitter_handle in C:\my_projects\phplearn\www\ch07\create_user.php on line 40
Notice: Undefined index: user_pic in C:\my_projects\phplearn\www\ch07\create_user.php on line 49
Notice: Trying to access array offset on value of type null in C:\my_projects\phplearn\www\ch07\create_user.php on line 49
Notice: Undefined index: user_pic in C:\my_projects\phplearn\www\ch07\create_user.php on line 57
Notice: Trying to access array offset on value of type null in C:\my_projects\phplearn\www\ch07\create_user.php on line 57
Warning: Header may not contain more than a single header, new line detected in C:\my_projects\phplearn\www\stack\scripts\app_config.php on line 63
当我添加这段代码时问题开始了:
($_FILES[$image_fieldname]['error'] == 0)
or redirectToError("сервер не может получить выбранное вами изображение.", $php_errors[$_FILES[$image_fieldname]['error']]);
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
@getimagesize($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>', "вы выбрали файл для своего фото, который не является изображением." , "{$_FILES[$image_fieldname]['tmp_name']}" , "не является файлом изображения.", '</pre>');
$now = time();
while (file_exists($upload_filename = $upload_dir . $now . '-' . $_FILES[$image_fieldname]['name'])) {
$now++;
}
move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or redirectToError('<pre>',"возникла проблема сохранения вашего изображения в его постоянном месте. Ошибка, связанная с правами доступа при перемещении файла в {$upload_filename}", '</pre>');
这是我在这个文件中的所有代码。
<?php
$link = require_once ('../stack/scripts/database_connection.php');
$upload_dir = HOST_WWW_ROOT . "uploads/profile_pics";
$image_fieldname = "user_pic";
$php_errors = array(1 => 'Превышен макс. размер файла, указанный в php.ini',
2 => 'Превышен макс. размер файла, указанный в форме HTML',
3 => 'Была отправлена только часть файла',
4 => 'Файл для отправки не был выбран.');
$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$email = trim($_REQUEST['email']);
$bio = trim($_REQUEST['bio']);
$facebook_url = str_replace("facebook.org", "facebook.com", trim($_REQUEST['facebook_url']));
if (preg_match("/^\s*(http:\/\/www.facebook.com\/)/" , $facebook_url)) {
$facebook_url === true;
} else {
$facebook_url = "http://www.facebook.com/" . $facebook_url;
}
$twitter_handle = trim($_REQUEST['twitter_handle']);
$twitter_url = "http://www.twitter.com/";
if (preg_match("/^\s*(@)/" , $twitter_handle)) {
$twitter_url = $twitter_url . $twitter_handle;
}
($_FILES[$image_fieldname]['error'] == 0)
or redirectToError("сервер не может получить выбранное вами изображение.", $php_errors[$_FILES[$image_fieldname]['error']]);
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
@getimagesize($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>', "вы выбрали файл для своего фото, который не является изображением." , "{$_FILES[$image_fieldname]['tmp_name']}" , "не является файлом изображения.", '</pre>');
$now = time();
while (file_exists($upload_filename = $upload_dir . $now . '-' . $_FILES[$image_fieldname]['name'])) {
$now++;
}
move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or redirectToError('<pre>',"возникла проблема сохранения вашего изображения в его постоянном месте. Ошибка, связанная с правами доступа при перемещении файла в {$upload_filename}", '</pre>');
$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, facebook_url, twitter_handle)
VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$facebook_url}', '{$twitter_handle}');";
mysqli_query($link, $insert_sql)
or die(mysqli_error($link));
header("Location: show_user.php?user_id=" . mysqli_insert_id($link));
?>
<html>
<head>
<link href="../stack/css/phpMM.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header"> <h1>PHP & MySQL: The Missing Manual</h1></div>
<div id="example"> Пример 3.1</div>
<div id="content">
<p>Это запись той информации, которую вы отправили:</p>
<p>
Имя: <?php echo $first_name . " " . $last_name;?></br>
Адрес электронной почты: <?php echo $email;?></br>
<a href="<?php echo $facebook_url; ?>">Ваша страница на Facebook:</a></br>
<a href="<?php echo $twitter_url; ?>">Проверьте свой Twitter - канал</a></br>
</p>
</div>
<div id="footer"></div>
</body>
</html>
这是我第一次在这里提问,如果我的问题形式让您感到不舒服,我深表歉意。帮助,请。谢谢
关于头函数的更新。这是我的 AppConfig.php
<?php
define("DEBUG_MODE", true);
define("SITE_ROOT", "/stack/");
define("HOST_WWW_ROOT", "C:/my_projects/phplearn/www/stack/");
define("DATABASE_HOST", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "");
define("DATABASE_NAME", "testdb");
$testArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
];
function debug_print($testArray) {
if (DEBUG_MODE) {
echo '<pre>' . print_r($testArray, 1) . '</pre>';
echo generateCallTrace();
}
}
/*My friend give me this function, im not good understand what`s going on here, eh*/
function generateCallTrace()
{
$e = new Exception();
$trace = explode("\n", $e->getTraceAsString());
// reverse array to make steps line up chronologically
$trace = array_reverse($trace);
array_shift($trace); // remove {main}
array_pop($trace); // remove call to this method
$length = count($trace);
$result = array();
for ($i = 0; $i < $length; $i++)
{
$result[] = ($i + 1) . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering
}
return "\t" . implode("\n\t", $result);
}
function redirectToError($msg, $error_msg = null) {
if ($error_msg != null) {
header("Location: " . SITE_ROOT . "scripts/show_error.php?error_message={$msg}&system_error_message={$error_msg}");
} else {
header("Location: " . SITE_ROOT . "scripts/show_error.php?error_message={$msg}");
}
die();
}```
您发布的代码片段存在几个问题,但要使其再次运行,您应该修复错误消息。
来自这里:
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить?
Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
为此:
@is_uploaded_file($_FILES[$image_fieldname]['tmp_name'])
or redirectToError('<pre>',"Ты в норме? Зачем ты это пытался загрузить? Запрос на отправку: файл назывался " , "{$_FILES[$image_fieldname]['tmp_name']}", '</pre>');
为什么您的原始错误消息不起作用? "Зачем ты это пытался загрузить?" 之间有一个新行?和原始错误消息中的“Запрос на отправку”。现在,根据 redirectToError
函数定义,第二个参数将直接传递给 header
函数,而无需任何 transformation/encoding。这意味着,您将作为单个 HTTP header 传递一个 multi-line 字符串,这是违反 HTTP 协议的。
关于其他 PHP 通知,显示它们是因为没有 POST 数据发送到页面。您可以添加一些非常基本的检查以确保您的脚本被表单提交调用:
<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// вернуть пользователя обратно на страницу формы
header("Location: create_user.html");
}
$link = require_once ('../stack/scripts/database_connection.php');
...