Я пытаюсь вставить данные в базу данных MySQL через форму, используя скрипт php. Я не получаю никаких ошибок, но информация, представленная формой, не вставляется в базу данных .. вместо данных (которые отправляются формой), значения, вставленные в базу данных: (1,1,1,1,1) .. это также тип атаки SQL-инъекцией? (как я искал в сети и получил название этой атаки)
вот мой PHP-код для вставки данных в базу данных ..
<html>
<head>
<link rel="stylesheet" type="text/css" href="clubcs.css">
<div class="text_field">
<div class="segment_header" align="center">
<?php
$con=mysqli_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"test");
$first=mysqli_real_escape_string($con,isset($_POST['first']));
$last=mysqli_real_escape_string($con,isset($_POST['last']));
$addr=mysqli_real_escape_string($con,isset($_POST['addr']));
$city=mysqli_real_escape_string($con,isset($_POST['city']));
$contact=mysqli_real_escape_string($con,isset($_POST['contact']));
$sql1=mysqli_prepare($con,"INSERT INTO clubdata (FirstName, LastName, Address, City,Contact_no)
VALUES (?,?,?,?,?)");
$sql1->bind_param("ssssi", $first, $last, $addr, $city, $contact);
$sql1->execute();
if(isset( $_POST["first"] ) && isset($_POST["last"]) && isset($_POST["addr"] ) && isset($_POST["city"]) && isset($_POST["contact"]) )
{
echo "Thank You" ." " .$_POST["first"];
echo " You have Successfully registered with us!";
exit();
}
mysqli_close($con);
?>
Есть ли что-то, что я не получаю или отсутствует? Пожалуйста, предложите мне любое решение!
Как указали @fred и @Boren, вы передавали логические целочисленные значения, возвращаемые isset.
Если вы переместите if(isset())
условие, чтобы обернуть весь код, вам не нужно проверять, если значение установлено снова.
Правда в том, что вам даже ничего не нужно было избегать, подготовка заявления сделает это за вас.
<?php
if(isset($_POST["first"],$_POST["last"], $_POST["addr"],$_POST["city"],$_POST["contact"]))
{
$con=mysqli_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"test");
$sql = "INSERT INTO clubdata (FirstName, LastName, Address, City,Contact_no) VALUES (?,?,?,?,?)";
$stmt=mysqli_prepare($con, $sql);
$stmt->bind_param("ssssi", $_POST['first'], $_POST['last'], $_POST['addr'], $_POST['city'], $_POST['contact']);
$stmt->execute();
if(mysqli_num_rows($stmt) > 0){
echo "Thank You" ." " .$_POST["first"];
echo " You have Successfully registered with us!";
}else{
echo 'INSERT did not affect any rows';
}
mysqli_close($con);
}else{
echo "Missing required fields";
}
}
Ох и не exit
перед закрытием соединения оставьте его открытым.
значения, вставленные в базу данных (1,1,1,1,1)
isset()
возвращает только это, 0
или 1
который объясняет все 1
вернулся, как isset()
предполагает, что вы хотите, чтобы они все были установлены, поэтому возвращаются TRUE
являющийся 1
,
Возвращает ПРАВДА если
var
существует и имеет значение, отличное от NULL, FALSE иначе.
Вам нужно использовать троичный оператор с этим также
$first=mysqli_real_escape_string($con,isset($_POST['first']) ? $_POST['first'] : '');
$last=mysqli_real_escape_string($con,isset($_POST['last']) ? $_POST['last'] : '');
$addr=mysqli_real_escape_string($con,isset($_POST['addr']) ? $_POST['addr'] : '');
$city=mysqli_real_escape_string($con,isset($_POST['city']) ? $_POST['city'] : '');
$contact=mysqli_real_escape_string($con,isset($_POST['contact']) ? $_POST['contact'] : '');
Примечание:
Если «контакт» является строкой (который должен быть), вы захотите использовать все s
Это для вас. т.е .: "sssss"
$sql1->bind_param("sssss", $first, $last, $addr, $city, $contact);
Понимание.
Это связано с тем, что функция isset () возвращает 1 или 0 в зависимости от того, установлено значение или нет. Вы должны сделать проверку заранее, а затем поместить значения следующим образом:
if(isset($_POST['first']) && isset($_POST['last']) && isset($_POST['addr']) && isset($_POST['city']) && isset($_POST['contact']))
{
$first = mysqli_real_escape_string($con, $_POST['first']);
$last = mysqli_real_escape_string($con, $_POST['last']);
$addr = mysqli_real_escape_string($con, $_POST['addr']);
$city = mysqli_real_escape_string($con, $_POST['city']);
$contact = mysqli_real_escape_string($con, $_POST['contact']);
}