2014-09-15 6 views
-1

Я пытаюсь вставить данные в базу данных mysql через форму, используя php script.I не получает никаких ошибок, bt информация, представленная формой не вставлены в базу данных .. вместо данных (которые отправляются по форме) значения, вставленные в базу данных, являются (1,1,1,1,1) .. это также тип атаки SQL-инъекции? (as i поиск на веб-я получил это название атаки) вот мой PHP код для вставки данных в базу данных ..Данные не вставляются через форму в MySQL (кодирование в 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); 
?> 

есть то, что я не получаю или не хватает? Plz предложит мне любое решение !!

+1

'$ first = mysqli_real_escape_string ($ con, isset ($ _ POST ['first'])? $ _POST ['first']: '');' & for all. не только 'isset' – MH2K9

+0

Большое вам спасибо ... он работает ... –

+0

... плюс,' contact' скорее всего является строкой, поэтому вы хотите использовать все '' 'для ваших привязок , '' sssss '' –

ответ

0

Как указывали @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 перед закрытием соединения вы будете оставить его открытым.

0

Это потому, что функция 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']); 
} 
+1

Вы технически верны, однако, [' this solution'] (http://stackoverflow.com/questions/25852533/data-is-not-inserted-through-a-form-in-mysql -coding-is-in-php # comment40451076_25852533) - это то, что OP предназначалось для использования, тернарный оператор, который избегает (* и уменьшает *) использование mutliple 'isset()' и/или 'empty()' условных выражений. –

2

значения, вставленные в базе данных, (1,1,1,1,1)

isset() возвращается только что, 0 или 1, которая объясняет все 1 «s вернулся, как и isset() предполагает, что вы хотите, чтобы они все сделали, поэтому возвращение TRUE быть 1.

Возвращает TRUE, если var существует и имеет значение, отличное от NULL , FALSE иначе.

Вы должны использовать ternary operator с этим также

$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'] : ''); 

Sidenote:

Если "контакт" является строкой (, который стоит быть) , вы захотите использовать все s для своих привязок. Т.е .: "sssss"

$sql1->bind_param("sssss", $first, $last, $addr, $city, $contact); 

понимание.

+0

bt contact не является строкой .. это целочисленный тип –

+0

@PujaJogi Мне пришлось сделать это, * на всякий случай *. –

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