请注意 "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');
...