2012-01-25 2 views
1

Я работаю над системой, и я хочу проверить, существует ли запись. Если запись существует, то она не будет записывать данные и вместо этого вернется к форме. Если данных не существует, он будет продолжать запись данных в БД.Неопределенный индекс при вставке записей в БД

форма HTML:

<form name="studentform" onSubmit="return validate_form ();" action="queries/insert.php" method="post"> 

Student Number: <input type="text" name="studentnumber"/> 
    College: 
<select name="college" id=a></select> 

&nbsp;&nbsp;Course: 
<select name="course" id=b></select> 

<input type="radio" name="status" value="regular" />Regular&nbsp;&nbsp; 
<input type="radio" name="status" value="irregular" />Irregular 
    <br><br> 
    <hr> 
    <br> 
    Name: 
    <input type="text" name="lname"> &nbsp; 
    <input type="text" name="fname"> &nbsp; 
    <input type="text" name="mname"> 


Address: 
<input type="text" name="address" /> 

<br><br> 

Gender: 
<select name="gender"> 
<option value="">---</option> 
<option value="Male">Male</option> 
<option value="Female">Female</option> 
</select> 



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

PHP форма:

$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'"); 
$result=mysql_query($query); 

if($result) 
    { 
     if(mysql_num_rows($result) >= 1) 
     { 
     echo "<script type='text/javascript'>alert('User already exist'); location.href = '../admin_home.php';</script>"; 
     } 
     } 
    else{ 

$sql="INSERT INTO students (studentnumber, college, course, status, lname, fname, mname, address, gender) 
VALUES 
('$_POST[studentnumber]','$_POST[college]','$_POST[course]','$_POST[status]','$_POST[lname]','$_POST[fname]','$_POST[mname]','$_POST[address]','$_POST[gender]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

    echo "<script type='text/javascript'>alert('Record Successfully Added'); location.href = '../admin_home.php';</script>"; 
} 

Я не знаю, почему, но я всегда получаю неопределенную ошибку индекса. Возможно, я что-то сделал не так. Благодаря !!

+0

Прежде всего - прочитайте «SQL injection» - ваш код не является безопасным. –

+0

номер строки для ошибки было бы полезно – xbonez

+0

написать полную ошибку –

ответ

1

«Неопределенный индекс» относится к вашему массиву (возможно, $ _POST), и это должно быть уведомление, а не ошибка. Можете ли вы разместить точное сообщение?

В то же время, переключите свою первую линию для

$query = "SELECT studentnumber FROM students where studentnumber = '".mysql_real_escape_string($_POST['studentnumber'])."'"; 

Кроме того, это полезно для отладки для распечатки запроса, чтобы убедиться, что она выглядит, как и следовало ожидать:

print $query."<br />"; // obviously 

[ edit] Как вы уже опубликовали сообщение об ошибке, оно становится намного проще - $ _POST ['studentnumber'] не существует. Проверьте свою форму.

Хороший способ отладки опубликовал результаты, чтобы использовать код

print '<pre>'; 
print_r($_POST); 
print '</pre>'; 
+0

Я бы рекомендовал использовать подготовленные заявления. –

+0

@MatthiasVance Я согласен, но я думаю, что мы будем работать, прежде чем мы сможем пройти ... –

+0

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

0

попробовать с этим:

if(isset($_POST['submit'])){ 

    $student_num = mysql_real_escape_string($_POST['studentnumber']); 
    // Set all the require form fields here with mysql_real_escape_string() fun 

    if(!empty($student_num)){ 
    // Your Query Here 
    } 
    else{ 
    echo 'Value not Set in Student Number Field!'; 
    } 
} 

Редактировать: первый проверить все поля после isset($_POST['submit']) так, что вы подтверждаете о все значения правильно получены или нет

после получения всех необходимых значений Отправьте запрос

1

Проблема заключается в запросах:

$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'"); 

$_POST[studentnumber] не является правильным. Это должно быть $_POST['studentnumber']. Обратите внимание на цитаты вокруг ключа.

Я предлагаю сделать это следующим образом:

$query = sprintf("SELECT studentnumber FROM students where studentnumber = '%s'" 
        , mysql_real_escape_string($_POST['studentnumber'])); 

Изменить все ваши запросы соответственно.

+0

Я не думаю, что в запросе это произведет '$ _POST [studentnumber]'. –

+0

Это будет, потому что '$ _POST' имеет ключи как строки. В ее случае она вызывает ключ как константу – xbonez

+0

, но ключ также работает без «одиночных кавычек типа' $ _POST [studentnumber] ' –

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