2014-12-13 2 views
-4

Например, у меня есть HTML-файл, как показано ниже:

<html> 
    <form action="insert.php" method="post"> 
    Name:<input type="text" name="txtname" /> 
    <input type="submit" name="but" value="Submit" /> 
    </form> 
</html> 

и PHP-файл, как показано ниже:

<?php 
    if(isset($_POST['but'])) 
    { 
    mysqli_query($con,"insert into student(Name) values(".$_POST["txtname"].")"); 
    } 
?> 

Мой вопрос в том, что если я могу написать $name=$post['txtname'] и я использую $name в значениях части, то dot не используется, но если я пишу прямо пост в значениях, то точка используется, почему эта точка используется?

+0

В противном случае двойная кавычка для индекса '$ _POST' остановит строку! – Rizier123

+3

Ваш код уязвим для SQL-инъекций; вы должны прочитать [как предотвратить их в PHP] (http://stackoverflow.com/q/60174/53114). – Gumbo

+0

сохраните запрос в переменной и эхо-сигнал. И выполнить эхо-строку в phpmyadmin даст вам результат правильного или неправильного письменного запроса? – Gunaseelan

ответ

0

У вас есть два possibilitys, чтобы сделать это ...

Первое:

mysqli_query($con,"insert into student(Name) values(" . $_POST['txtname'] . ")"); 
// using single quotes instead of double quotes 

Второй

mysqli_query($con,"insert into student(Name) values({$_POST['txtname']})"); 
//dont use any dots but single quotes and simply add it to the string 

Также вы должны заботиться о некоторых singlequotes к содержанию ...

"... values('{$_POST['txtname']}')" 

, так что это должно быть

mysqli_query($con,"insert into student(Name) values('{$_POST['txtname']}')"); 

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

Ваш PHP

<?php 
    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'foobar'); 

    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    $stmt = $mysqli->prepare("INSERT INTO students (Name) VALUES (?)"); 
    $stmt->bind_param('s', $_POST['txtname']); 

    /* execute prepared statement */ 
    $stmt->execute(); 

    printf("%d Row inserted.\n", $stmt->affected_rows); 

    /* close statement and connection */ 
    $stmt->close(); 

    /* close connection */ 
    $mysqli->close(); 

?> 
0

Вы можете использовать $name с и без точек, но $ _POST [ «что-то»] отличается в том, что индекс имеет кавычки. Это нарушит ваш запрос.

Это не связано с $_POST это связано с arrays

Вы также можете написать это как

mysqli_query($con,"insert into student(Name) values('{$_POST['txtname']}')"); 

На другой ноте, вы не должны вставлять формы ввода непосредственно в базу данных. Сначала выполните проверку.

+0

Это приведет к ошибке, поскольку вы останавливаете строку при использовании POST, как это. String: '" insert into values ​​("{$ _ POST [" ', и вы получите ошибку ... – Dwza

+0

Фактически информация между фигурными скобками обрабатывается PHP, поэтому она не должна влиять на запрос но я изменю его. – RST

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