2013-11-07 2 views
-3

Когда я посещаю mainpage.php, не переходя к настройкам, моя страница дает мне неопределенную переменную ошибку для всех переменных, но когда я ввожу что-то в настройках и отправляю, он не показывает больше. В любом случае, вот код.Неопределенная Переменная, если значения параметров не заданы

Mainpage.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; 
?> 

settings.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> 

Я не могу показаться, чтобы выяснить, как избавиться от неопределенной ошибки. Кто-то предложил isset, я верю.

ответ

0

Использовать проверку для пустых $ _POST

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

'isset ($ _ POST ['name'])? $ _POST ['name']: ''; '- хуже, потому что вы должны получить уведомление, если ожидаете какое-то значение, которое не было передано из формы (например, typo в имени attr). – rNix

1

вашего $_POST пуст

mainpage.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>"; 
?> 

Так ... просто отказ от ответственности, остерегаться инъекции SQL при работе с $_POST значениями.

выход будет выглядеть следующим образом ... (так что вы можете увидеть структуру $_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 
     ) 

) 

(также, заметьте, я постоянно обновлять для будущих пользователей, которые приходят по этому вопросу)

Смежные вопросы