2015-06-17 5 views
-4
<html> 
<body> 

<form method="post"> 
Name: <input type="text" name="Name"><br> 
Phone Number: <input type="text" name="Number"><br> 
<input type="submit"> 
</form> 

<?php 
session_start(); 
$name = $_POST["Name"]; 
$number = $_POST["Number"]; 
$sql = "INSERT INTO contacts (Name, Number) 
    VALUES (' . $name . ', ' . $number . ')"; 


if ($_SESSION["connect"]->query($sql) === true) { 
    echo "Success"; 
} 
else { 
    echo "Fail: " . $_SESSION["connect"]->error; 
} 
?> 

</body> 
`enter code here`</html> 

Так что это мой код, и это показывает, что 2 ошибки мешают мне добавлять данные в базу данных mysql. Обе ошибки говорят о том, что программа не могла получить mysqli как в $ _SESSION ["connect"] в операторах if.PHP не смог получить mysqli

Может ли кто-нибудь проверить мой код и изменить его для меня? Было бы очень благодарно.

+0

[Держу пари, вы получаете неопределенный индекс уведомление, но вы не видите их, потому что это происходит; * в фоновом режиме *.] (http://php.net/manual/en/function.error-reporting.php) - [Не говоря уже об этом ...] (http://php.net/manual/ ен/mysqli.error.php). - сеансы? этот код ... Я не знаю, как это назвать. –

+2

Превосходная уязвимость [sql injection attack] (http://bobby-tables.com). Наслаждайтесь наличием вашего сервера pwn3d. –

+0

** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить пользователя данные по вашему запросу. ** НЕ используйте ** интерполирование строк, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). ** НИКОГДА ** не вводите данные '$ _POST' непосредственно в запрос. – tadman

ответ

1

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

$sql = "INSERT INTO contacts (Name, Number) 
    VALUES ('$name', '$number')"; 

Это должно выполнить ваш запрос. Но по-прежнему вы открываете SQL-инъекции. Одно из решений, http://php.net/manual/en/mysqli.real-escape-string.php,

$name = $_SESSION["connect"]->real_escape_string($_POST["Name"]); 
$number = $_SESSION["connect"]->real_escape_string($_POST["Number"]); 

Подготовленные заявления будет лучше, хотя. См. Эту тему, How can I prevent SQL injection in PHP?.

Как указано в комментариях, отчет об ошибках также поможет вам отладить эти проблемы. Я также склонен выводить свой запрос и выполнять, если я не уверен, как он будет выполняться (или если он не работает).

Если ты хочешь, чтобы сцепить это по какой-то причине ...

$sql = "INSERT INTO contacts (Name, Number) 
    VALUES ('" . $name . "', '" . $number . "')"; 
+0

Фактически, если я использую real_escape_string, отчет об ошибках показывает, что ошибка начинается с части $ _SESSION, поэтому я чувствую, что это проблема сеанса. – thousight

+0

Но спасибо за обнаружение ошибки моего оператора sql, хотя – thousight

+0

Они оба ошибки, вы просто сталкиваетесь с этим в более ранней точке. – chris85

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