2011-05-11 3 views
0

Я пытаюсь вставить данные som из html-форм в мой сервер базы данных mySql.simple html php insert mysql problem

Вот мой HTML-код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Add events</title> 
</head> 
<body> 
<form action="addevents.php" method="post"> 
     id: <input type="text" name="eventID" /> 
     <br></br> 
     larmkod: <input type="text" name="larmkod" /> 
     <br></br> 
     idArduinoT: <input type="text" name="idArduinoT" /> 
     <br></br> 
     handelse: <input type="text" name="handelse" /> 
     <br></br> 
     tid: <input type="text" name="tid" /> 
     <br></br> 
     rumNr: <input type="text" name="rumNr" /> 
     <br></br> 
     inneboendeNamn: <input type="text" name="inneboendeNamn" /> 
     <br></br> 
     overvakare: <input type="text" name="overvakare" /> 
     <input type="submit" /> 
</form> 
</body> 
</html> 

Вот мой PHP-код:

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

mysql_select_db("arduino_db",$con; 

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

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

mysql_close($con) 
?> 

Я не вижу проблему не так ли? .. eventID является первичным ключом.

+1

Нет, я не вижу проблемы. Вы не сказали нам. – MJB

+2

проблема - вы открыты для атаки на sql-инъекцию, вы должны дезинфицировать свои данные перед тем, как поместить их в db –

+0

Да, я знаю, но я использую только этот temp для школьного проекта ... – SHUMAcupcake

ответ

4

Давайте посмотрим ... Синтаксические ошибки: ошибки впрыска

mysql_select_db("arduino_db",$con; 
           ^missing) 

SQL:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

Если какие-либо из полой формы содержит ', ваше заявление запроса будет недействительным. Кроме того, у небольшого Bobby Tables будет полевой день с вашей системой.

+0

вы сэр! иметь полевой день с вашей системой! – SHUMAcupcake

+0

PHP должен был выплюнуть за вас синтаксическую ошибку, если это была недостающая ')', вызывающая вашу проблему, что говорит о том, что отчет об ошибках отключен. Это СЛЕДУЕТ быть включенным во время разработки –

1

Ваш запрос неправильно;)

Попробуйте это:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('{$_POST['eventID']}', '{$_POST['larmkod']}', '{$_POST['idArduinoT']}', '{$_POST['handelse']}', '{$_POST['tid']}', '{$_POST['rumNr']}', 
    '{$_POST['inneboendeNamn']}', '{$_POST['overvakare']}')"; 

Look @ ваш побег

И редактировать

mysql_select_db("arduino_db",$con; 

В

mysql_select_db("arduino_db",$con); 

Вам необходимо работать с вашей безопасностью. Это действительно небезопасно!

+1

Значение '{}' для переменных не обязательно. Хорошо использовать его, но это не требуется. 'echo '{$ array [' x ']}" 'синтаксически тождественно с' echo' $ array [x] "' в отношении PHP для одномерных массивов. –

+2

hmm действительно я думал, что массив $ [x] должен быть как минимум $ array ['x'] с одинарными кавычками, так как его ассоциативный массив в этом примере – Michael

+0

'echo '$ array [x]" 'не является синтаксически идентичным. Он пытается разыменовать константу 'x' и вызывает ошибку уведомления, если' x' не определен. Если вы определяете ('x', 'y') ', то' echo '$ array [x] "' заканчивает создание того же выхода, что и 'echo' $ array ['y']" ' –

1
$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('$_POST[eventID]', '$_POST[larmkod]', '$_POST[idArduinoT]', '$_POST[handelse]', '$_POST[tid]', '$_POST[rumNr]', 
    '$_POST[inneboendeNamn]', '$_POST[overvakare]')"; 

Каждая из этих ссылок на POST несколько неоднозначен и вызывает ошибку уведомления уровня из-за строку без кавычек. Менее неоднозначный синтаксис:

$sql="INSERT INTO events (eventID, larmkod, idArduinoT, handelse, tid, rumNr, inneboendeNamn, overvakare) 
VALUES 
('{$_POST['eventID']}', '{$_POST['larmkod']}', '{$_POST['idArduinoT']}', '{$_POST['handelse']}', '{$_POST['tid']}', '{$_POST['rumNr']}', 
    '{$_POST['inneboendeNamn']}', '{$_POST['overvakare']}')"; 

Однако, это все равно будет приводить к ошибке SQL, или даже хуже, инъекции SQL должны любое значение содержит ' полукокса (среди прочих). Эти значения должны, как минимум, проходить через mysql_real_escape_string(). В качестве альтернативы используются параметризованные запросы.

Если есть другие проблемы, лучшим выбором будет просмотр журнала ошибок и обработка соответствующего файла журнала. Возможно, вам пригодится apache error_log.

рассмотрим также работает PHP -l для обнаружения ошибок синтаксического анализа времени (ошибки во время выполнения до сих пор не повернет вверх до времени выполнения, однако)