未定义变量,当不向设置提交任何值时


Undefined Variable when not submitting any values to settings

当我访问主页.php而不进入设置时,我的页面给了我所有变量的未定义变量错误,但是当我在设置中输入某些内容并提交时,它不再显示。无论如何,这是到目前为止的代码。

主页.php

<html>
<head><title></title></head>
<body>
<a href="logout.php">Logout</a>
<a href="settings.php">Settings</a>
</form>
</body>
</html>
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$bio = $_POST['bio'];
$hobbies = $_POST['hobbies'];
$past = $_POST['past'];
$work = $_POST['work'];
echo $bio;
echo $email;
echo $name;
echo $hobbies;
echo $past;
echo $work;
?>

设置.php

<html>
<head><title></title></head>
<body>
<a href="logout.php">Logout</a>
<a href="mainpage.php">Main Page</a>
<form action="mainpage.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
Bio: <input type="text" name="bio"><br>
Hobbies: <input type="text" name="hobbies"><br>
Past School: <input type="text" name="past"><br>
Work History: <input type="text" name="work"><br>
<input type="submit">
</form>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Choose Profile Picture:</label>
<input type="file" name="file" id="file"> 
<input type="submit" name="pic" value="Submit">
</form>
</body>
</html>

我似乎无法找到如何摆脱未定义的错误。我相信有人建议是塞特。

您的$_POST为空

主页.php - 文件上传和输入字段属于两种不同的表单,并且有两个提交按钮。 信息永远不会同时发送。 我将表单合并为一个表单,只有一个提交按钮。

<html>
<head><title></title></head>
<body>
<a href="logout.php">Logout</a>
<a href="mainpage.php">Main Page</a>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
   Name: <input type="text" name="name"><br>
   E-mail: <input type="text" name="email"><br>
   Bio: <input type="text" name="bio"><br>
   Hobbies: <input type="text" name="hobbies"><br>
   Past School: <input type="text" name="past"><br>
   Work History: <input type="text" name="work"><br>
   <!--input type="submit"-->
<!--/form-->
<!--form action="upload_file.php" method="post" enctype="multipart/form-data"-->
   <label for="file">Choose Profile Picture:</label>
   <input type="file" name="file" id="file">   
   <br/>
   <input type="submit" name="pic" value="Submit"> 
</form>
</body>
</html> 

upload_file.php - 文件信息和输入信息属于两个不同的数组。

<?php  
   // the reason we should check for each $_POST variable and not just
   // if (!empty($_POST)) { ... }
   // is because you will still get errors if one of those keys do not
   // exist inside of $_POST... if you do $file = $_FILE['file'] there
   // will be an error.  however, $_POST is always going to exist, so 
   // we don't need to check it.  the keys may or may not exist, though
   $name    = isset($_POST['name'])    ? $_POST['name']  : '';
   $email   = isset($_POST['email'])   ? $_POST['email'] : '';
   $bio     = isset($_POST['bio'])     ? $_POST['bio']   : '';
   $hobbies = isset($_POST['hobbies']) ? $_POST['hobbies'] : '';
   $past    = isset($_POST['past'])    ? $_POST['past']  : '';
   $work    = isset($_POST['work'])    ? $_POST['work']  : ''; 
   echo "bio:  $bio<br/>";
   echo "email:  $email<br/>";
   echo "name:  $name<br/>";
   echo "hobbies:  $hobbies<br/>";
   echo "past:  $bio<br/>";
   echo "work:  $work<br/>";  
   print "<pre>";
   if (isset($_POST))
   {
      print "this is the '$_POST information:'n"; 
      print_r($_POST); 
   }
   else { print "no post information sent."; }
   print "'n'n";
   if (isset($_FILES))
   {
      print "this is the '$_FILE information:'n"; 
      print_r($_FILES);
   }
   else { print "no file information sent."; }
   print "</pre>"; 
?> 

所以......只是一个免责声明,在使用$_POST值时要小心SQL注入。

输出将如下所示...(所以你可以看到$_POST $_FILE的结构)

bio: three
email: two
name: one
hobbies: four
past: three
work: 
this is the $_POST information:
Array
(
    [name] => one
    [email] => two
    [bio] => three
    [hobbies] => four
    [past] => 
    [work] => 
    [pic] => Submit
)

this is the $_FILE information:
Array
(
    [file] => Array
        (
            [name] => Capture.PNG
            [type] => image/png
            [tmp_name] => C:'wamp'tmp'php1D7E.tmp
            [error] => 0
            [size] => 12968
        )
)

(另外,请注意,我会为遇到此问题的未来用户不断更新)

使用检查空 $_POST

if (!empty($_POST)){
    $name = $_POST['name'];
    $email = $_POST['email'];
    /* ... */
}