2012-03-28 3 views
0

Я провел дни, пытаясь понять это безрезультатно. Я проверил документы PHP, а также несколько других вопросов формы относительно уведомления об неопределенном индексе и, как представляется, обычное решение «isset()».Неопределенное уведомление об индексе

Но я не могу решить решение в моем случае.

Вот код:

<form action="" method="post"> 
<!-- Here are all the form fields --> 
<input type="submit" name="send" value="send"/> 
</form> 

<?php 

      $con = mysql_connect("#","#","#"); 
      if (!$con) 
      { 
       die('Could not connect: ' . mysql_error()); 
      } 

      mysql_select_db("#", $con); 

      $sql=" 
      INSERT INTO events (e_date, e_time, e_type, e_name) 
      VALUES ('$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]')"; 

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

      mysql_close($con) 

     ?> 

В 4 уведомления происходят на линии с переменной $ SQL, начиная с «ЦЕННОСТИ» и относятся к form_e_date и т.д.

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

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

Спасибо!

+0

какие уведомления и ошибки вставить их в свой вопрос –

+1

$ _POST [form_e_time] должна быть $ _POST [ «form_e_time»], если form_e_time не определяется как константа, аналогично любому другому индексу ассоциативного массива, который вы указали, будь то ваши собственные массивы или суперглобалы .... этот вопрос отвечает десятки раз в неделю –

+0

, но обратите внимание, что 'insert' непосредственно с пользовательских входов ** очень ** опасен и все пользовательские входы должны быть экранированы перед использованием в операторах баз данных любого типа. – dldnh

ответ

4

вместо

'$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]' 

вы не должны использовать

'$_POST["form_e_date"]','$_POST["form_e_time"]','$_POST["form_e_type"]','$_POST["form_e_name"]' 

из-за опасности атак SQL-инъекции.

вы должны использовать mysql_real_escape_string, чтобы защитить себя от этого.

это было бы гораздо безопаснее:

if (array_key_exists("form_e_date", $_POST)) 
    $form_e_date = mysql_real_escape_string($_POST["form_e_date"]); 
else 
    $form_e_date = null; 

if (array_key_exists("form_e_time", $_POST)) 
    $form_e_time = mysql_real_escape_string($_POST["form_e_time"]); 
else 
    $form_e_time = null; 

if (array_key_exists("form_e_type", $_POST)) 
    $form_e_type = mysql_real_escape_string($_POST["form_e_type"]); 
else 
    $form_e_type = null; 

if (array_key_exists("form_e_name", $_POST)) 
    $form_e_name = mysql_real_escape_string($_POST["form_e_name"]); 
else 
    $form_e_name = null; 
. 
. 
. 
$sql = "INSERT INTO events (e_date, e_time, e_type, e_name) " . 
    "VALUES ('{$form_e_date}','{$form_e_time}','{$form_e_type}','{$form_e_name}')"; 
+0

Спасибо dldnh, я действительно читал о том, что не позволял пользователю вводить данные непосредственно в базу данных и собирался обратиться к нему позже; приложение, над которым я работаю, в настоящее время только для моего личного использования в автономном режиме, пока я не знаю, что я делаю (я уже где-то видел о функции mysql_real_escape_string);) Но я попытался решить проблему с моими уведомлениями, но теперь я получаю неопределенные уведомления об индексах по 4 строкам $ form_e_date и т. д. Очевидно, что я все еще что-то делаю неправильно и/или помещаю код в неправильное место? – Joshua

+0

просто хотел убедиться, что вы знали об этом. – dldnh

+0

dldnh , Я внедрил ваш код, и он снял 4 уведомления с затронутой строки 1, но теперь 4 уведомления находятся на 4 строках, которые вы мне дали. – Joshua

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