Запись в БД через POST

209
16 августа 2017, 19:39

так работает:

$userReg = "INSERT INTOuser(mail) VALUES ('test')";

а так нет:

$userReg = "INSERT INTOuser(mail) VALUES ('$_POST['label']')";

Answer 1

Может так

$userReg = "INSERT INTO user(mail) VALUES ('{$_POST['label']}')";

и этот код открыт для SQL инъекций. Лучше всего использовать подготовленные запросы. Сейчас, если в $_POST['label'] будет строка с одинарной кавычкой, то sql запрос будет невалидным.

Answer 2

Никаких POST'ов в запросе! Даже в 90-е годы это было адским злом, а уж в 2017-ом тем более.

Если всё же сильно хочется воткнуть POST прямо в строку запроса, то значение надо экранировать, иначе получится уязвимость SQL-inj:

$userReg = "INSERT INTO user SET mail = '".addslashes($_POST['label'])."'";

Если к базе уже есть коннект, то корректнее экранировать так:

$userReg = "INSERT INTO user SET mail = '".mysql_real_escape_string($_POST['label'])."'";

Оба варианта - плохие. Лучше не рассматривать их вообще и сразу шагнуть в 21й век в объятия PDO:

$dbh = new PDO($dsn, $user, $password);
$sth = $dbh->prepare('INSERT INTO user SET mail = :mail');
$sth->execute([':mail' => $_POST['label']]);

И всё! Вы в безопасности!

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

Answer 3

Есть интересная особенность, вы не можете вставить в значение string ячейку массива без использования операторов. PHP сконвертирует только "чистую" переменную ($variable). $array['key'] не будет принято интерпретатором. Вообще, в любом случае подобная реализация некорректна из-за 2 причин. Как сказали выше это небезопасно. И второй момент, читаемость хромает в таком случае. Лучше все оформлять одним стилем, а именно

$var = "text " . $var2 . " text";
Answer 4
if (!empty($_POST)) {
$lable1 = isset($_POST['label']) ? strip_tags(trim($_POST['label'])) : '';
$lable1=(string)$lable1;

} Уточнить что только сторока будет в этой переменной.`

далее минимально подготавливаем запрос.

$host='localhost';
$user='ivan';
$password='сам придумай';
$database='твоя база';
$port='80';
$link=mysqli_connect($host,$user,$password,$database,$port);
$userReg=mysqli_real_escape_string($link, $userReg);
$query="INSERT INTO user (mail) VALUE (".$test.")";
$result=mysqli_query($link,$query);
mysqli_close($link);
READ ALSO
PHP - получить url страницы

PHP - получить url страницы

На странице выполняется php скриптАдрес страницы типа: site

149
Как используя ActionColumn скрыть/показать кнопки в определенной строке?

Как используя ActionColumn скрыть/показать кнопки в определенной строке?

Использую стандартный GridView::widgetПодскажите как в ActionColumn отобразить по условию в одной строке только просмотр ({view}), а в другой просмотр и удаление...

180
Когда стоит делать класс абстрактным?

Когда стоит делать класс абстрактным?

Проект saas-сервис типа мегапланаВ голове есть приблизительная структура классов, например: работа с БД, работа с задачами, сервисный класс...

166
Как массово изменить участки кода в файле?

Как массово изменить участки кода в файле?

Имеется файл xml, в котором присутствуют примерно такие участки кода:

194