将输入字段值插入数据库并在同一页面上显示结果

时间:2017-06-28 20:02:15

标签: php sql insert

我开始学习SQL和PHP代码的基础知识。

我正在尝试创建一个简单的简报订阅页面。这将要求用户输入他们的电子邮件并提交。然后,这将被添加到我的数据库中。

现在,当HTML和PHP代码是分开的并且提交发生但是重定向到带有echo的PHP页面时,这很有效。

我想在同一页面上收到消息,我尝试在页面中合并PHP代码,如下所示

<?php 
if($_SERVER['REQUEST_METHOD'] === 'POST'){
mysql_connect("hostname", "username", "password"); 
mysql_select_db("db name"); 
$user = $_POST['email']; 
$query = "INSERT INTO tablename(columname)VALUES('$email')"; 
echo "inserted";
} 
?>

<html> 
<form method="POST" action="" > 
<label>Email:</label> <input name="email" type="text"/>
<input type="submit" name="submit" value="Insert" /> <br>
</form>   
</html>

无论使用此代码,它都不会做任何事情。

我在这里做错了什么?感谢您的专业建议。

2 个答案:

答案 0 :(得分:0)

请使用prepare语句来阻止Sql注入。

以下是示例代码尝试此操作。

ini_set('display_errors', 1); 
ini_set('log_errors', 1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$connect = new mysqli ("localhost", "root", "usbw", "test");
  if (mysqli_connect_errno()) {
    echo 'Failed to connect to MySQL:' . mysqli_connect_error();
  }


if (isset($_POST['submit'])) {

  $email = filter_input(FILTER_VALIDATE_EMAIL, $_POST['email']); 
  $sql = "INSERT INTO table (email) VALUES (?)";

  $stmt = $connect->prepare($sql);
  $stmt->bind_param('s', $email);
  $result = $stmt->execute();
  if ($result) {
    $msg = 'Succesfully added';
  } else {
    $msg = 'OOPS Error Occured';
  }
} 
?>

 <html> 
   <form method="POST" action="" > 
     <label>Email:</label> <input name="email" type="text"/>
     <input type="submit" name="submit" value="Insert" /> <br>
   </form>   
 </html>

答案 1 :(得分:0)

代码中的错误很少,您可以通过执行以下操作来修复它们:

  1. 首先将文件另存为php文件。例如,将其命名为“email.php”。

  2. 制作表格action =“email.php”

  3. 不要在同一个文件中写两个完整的单独代码,一个用于php文件,另一个用于html文件,就像你一样。您可以使用heredoc语法在PHP代码中包含html代码,该语法允许您包含如下所示的长html代码:

    echo<<<_HTMLCODE
    <form method="POST" action="" > 
    <label>Email:</label> <input name="email" type="text"/>
    <input type="submit" name="submit" value="Insert" /> <br>
    </form> 
    _HTMLCODE;
    
  4. 在查询语法中,添加$ user而不是$ email,因为变量$ user包含表单提交的值。

  5. 添加代码以执行插入的查询。例如: 的mysql_query($查询);

  6. 所以你的最终代码将是这样的:

    <?php 
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
        mysql_connect("hostname", "username", "password"); 
        mysql_select_db("db name"); 
        $user = $_POST['email']; 
        $query = "INSERT INTO tablename VALUES('$user')";
        mysql_query($query); 
        echo "inserted";
    }
    
    echo<<<_HTMLCODE
    <form method="POST" action="email.php" > 
    <label>Email:</label> <input name="email" type="text"/>
    <input type="submit" name="submit" value="Insert" /> <br>
    </form> 
    _HTMLCODE;
    
    ?>
    

    在我在localhost上添加数据库的数据后,我已经尝试了上面的代码,之后我为电子邮件创建了一个表,并且它有效。以下是我的代码编辑器中包含数据库访问信息和表名的已编辑代码:

    image1

    当我在数据库中打开表格电子邮件时,我找到了使用表单提交的电子邮件(修改后的代码):

    image2

    (建议:使用mysqli而不是mysql)