2014-01-17 4 views
0

Мои данные получать сохраняются в базе данных, но показывают следующее уведомление:Примечание: Undefined индекс в PHP

Примечание: Undefined индекс: FName в D: \ XAMPP \ HTDOCS \ сейв \ saa.php на линия 20

Примечание: Undefined индекс: LNAME в D: \ XAMPP \ HTDOCS \ сейв \ saa.php на линии 20

1 запись добавлена ​​

Это проверочный код:

<?php 
    $firstname=$lastname=""; 
    $firstnameErr=$lastnameErr=""; 
    if ($_SERVER['REQUEST_METHOD']== "POST") { 
     $valid = true; //Your indicator for your condition, actually it depends on what you need. I am just used to this method. 
    if(empty($_POST["fname"])) 
    { 
     $firstnameErr="*Name is Required"; 
     $valid=false; 
    } 
    else 
    { 
    $firstname=test_input($POST["fname"]); 
    } 

    if(empty($_POST["lname"])) 
    { 
     $lastnameErr="*Name is Required"; 
     $valid=false; 
    } 
    else 
    { 
    $$lastname=test_input($POST["lname"]); 
    } 

    //if valid then redirect 
     if($valid){ 

      echo '<META HTTP-EQUIV="Refresh" Content="0; URL=saa.php">';  
     exit; 
    // header('Location: datasubmitted.php'); 
    // exit(); 
     } 
    } 
    // Sanitize data 
    function test_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 
    ?> 

HTML код формы

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> 
    Firstname: <input type="text" name="fname" /><?php echo $firstnameErr;?><br /> 
    Lastname: <input type="text" name="lname" /><?php echo $lastnameErr?> 

    <input type="submit" name="submit" value="Submit"/> 
    </form> 

код для вставки данных в базе данных

<?php 
$con = mysql_connect("localhost","root","[email protected]"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("test", $con); 

$sql="INSERT INTO nametable (firstname,lastname) 
VALUES 
('$_POST[fname]','$_POST[lname]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($con) 
?> 
+3

'$ POST [" fname "]' является вашей ошибкой в ​​скрипте проверки, '$ _POST [" fname "]' является правильным. – Eternal1

+0

Согласен @ АндрейПочекуев – Ruddy

+0

@ АндрейПочекуев: хорошо поймать ... но он не бросил бы «ошибку», а не предупреждение! :) – NoobEditor

ответ

1

Сво происходит б оскольку переменная fname не установлена ​​в POST при его проверке состояния ..... так $_POST["fname"] пусто и, следовательно, его бросает undefined предупреждение

использовать его таким образом:

if(isset($_POST["fname"]) && !empty($_POST["fname"])) 
{ 
    /* execution part*/ 
} 
+0

не должно быть '! Empty (...)' – IROEGBU

+0

@iroegbu: да ... имеет смысл ... правильно !! :) – NoobEditor

2

Сво заметить; не ошибка

Чтобы исправить это, вы должны проверить, является ли $_POST['fname'] и $_POST['lname'] установлены:

if(!isset($_POST["fname"] && empty($_POST["fname"])) { 
    ... 
} 

if(!isset($_POST["lname"] && empty($_POST["lname"])) { 
    ... 
} 
1

Для проверки на элемент массива не используют пустой, но использовать array_key_exists

Ваша проверка может быть

if(array_key_exists('lname', $_POST) && empty($_POST["lname"])) 
{ 
    $lastnameErr="*Name is Required"; 
    $valid=false; 
} 

Или вы должны получить элемент с функцией filter_input. Это предпочтительный метод

$lname = filter_input(INPUT_POST, 'lname'); 

if (empty($lname)) { 
    $lastnameErr="*Name is Required"; 
    $valid=false; 
} 

Для вставки элемента я обескуражить использовать переменную $ _POST в запрос, но заменить с версии побега этого.

Вы можете поместить этот чек в проверке

$lname = mysqli_real_escape_string($connection, $lname); 

Другое примечание: Не используйте mysql_ функции, потому что они являются устаревшими. Вы должны использовать расширения mysqli_. http://www.php.net/manual/en/class.mysqli.php

0

У вас есть несколько опечаток в вашем скрипте.Сначала один

$firstname=test_input($POST["fname"]); 

должно быть

$firstname=test_input($_POST["fname"]); 

второй из них содержит два

$$lastname=test_input($POST["lname"]); 

должно быть

$lastname = test_input($_POST["lname")); 
0

Первый, используя $_POST переменные непосредственно в ваших запросах сделают ваш код незащищенным, из-за опасности mysql. По крайней мере, используйте mysql_real_escape_string($_POST['var']), если не PDO с bindparams.

Вторые, mysql_* функции устарели.

Что касается вашего Erorr сообщения, это помогло бы на самом деле, дайте нам знать, что линия линия 20.

Несмотря на это, вы ошибка, потому что вы используете что-то вроде $_POST[fname] без тестирования, если $_POST[fname] существует. Кроме того, используйте $_POST['fname'] не $_POST[fname].

$p_fname = ''; 
if (isset($_POST['fname'])) $p_fname = $_POST['fname']; 
//then 
$sql = "INSERT ..... SET field='".mysql_real_escape_string($p_fname)."'"; 

И если вы не заботитесь об ошибках на уровне E_NOTICE, вы просто положить

error_reporting(E_ALL^E_NOTICE); //at the top of your scripts 
0

вы можете проигнорировать это уведомление, используя эти условия на верхней части страницы,

<?php 
if(isset($_POST['fname']) && $_POST['fname']!=''){ $firstname=$_POST['fname'];}else{$firstname='';} 
if(isset($_POST['lname']) && $_POST['lname']!=''){ $lastname=$_POST['lname'];}else{$lastname='';} 
?> 

и использовать $firstname и $lastname в количестве от $_POST[fname] и $_POST['lname'].

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