2013-05-22 4 views
-2

У меня есть три флажка, пользователь должен проверить один или два варианта.Уведомление об ошибке: отображается неопределенный индекс

При проверке 2 варианта появляется сообщение об ошибке.

$workshop1Day1 = $_POST["workshop1Day1"]; 
    $workshop2Day1 = $_POST["workshop2Day1"]; 
    $workshop3Day1 = $_POST["workshop3Day1"]; 


$requete = "INSERT INTO Participant (NameSurname,workshop1Day1,workshop2Day1,workshop3Day1) 
         VALUES ('$NameSurname', '$workshop1Day1', '$workshop2Day1', '$workshop3Day1')"; 
     $result = @mysql_query($requete); 

ошибка:

Notice: Undefined index: workshop3Day1 

Затем я попытался следующий код (например: в случае, если флажок номер 3 не установлен), появляется та же ошибка

$workshop1Day1=' '; 
    $workshop2Day1=''; 
    $workshop3Day1=''; 

    $workshop1Day1 = $_POST["workshop1Day1"]; 
    $workshop2Day1 = $_POST["workshop2Day1"]; 
    $workshop3Day1 = $_POST["workshop3Day1"]; 

if (isset($workshop1Day1)&& isset($workshop2Day1)&& !isset($workshop3Day1)) 
{ 

    $requete = "INSERT INTO Participant (NameSurname,workshop1Day1,workshop2Day1,workshop3Day1) 
        VALUES ('$NameSurname', '$workshop1Day1', '$workshop2Day1', '$workshop3Day1')"; 
    $result = @mysql_query($requete); 

я знаете, что isset - это решение, но как?

+2

Вы видите здесь ошибку: '$ _POST [" workshop3Day1 "]', потому что * it * is * not set * ...! \ * hint \ * hint \ * think \ * about \ * it! \ * – deceze

+0

Вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068) и должны использовать [современная замена] (http://php.net/manual/en/mysqlinfo.api.choosing.php). Вы также уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+0

, потому что это Null –

ответ

3

Вы получаете предупреждение, потому что вы не используете isset на исходной переменной, точно на то, что вы ее назначили.

Эта строка ($workshop3Day1 = $_POST["workshop3Day1"];) поднимет предупреждение, поскольку этот индекс массива не существует. Вместо этого используйте isset на этой строке, а затем используйте результат этого в вашем условии if. Что-то вроде этого:

$workshop1Day1 = isset($_POST["workshop1Day1"]) ? $_POST["workshop1Day1"] : 0; 
$workshop2Day1 = isset($_POST["workshop2Day1"]) ? $_POST["workshop2Day1"] : 0; 
$workshop3Day1 = isset($_POST["workshop3Day1"]) ? $_POST["workshop3Day1"] : 0; 

Затем удалите isset из вашего if состояния.