PHP表单发布到数据库

时间:2014-10-13 13:03:07

标签: php database phpmyadmin

所以,到目前为止,我用Google搜索了所有内容超过一周,但我无法解决这个问题。

我有一份特定内容的表格。我希望用户能够填写此表单。然后单击Submit(提交)按钮,填写的表单将发布到我的数据库中。

我一直在尝试并尝试一切可能的方式,但这对我不起作用,所以希望有人可以帮助我。

到目前为止我的代码(我的表格):

<div class="regForm">
<h1> Register here: </h1>
    <form method='POST' action='connectie.php' id="registerPage">
        Username:<br>
        <input type="text" name="username" size="20"><br>
        Password:<br>
        <input type="text" name="password" size="20"><br>
        First name:<br>
        <input type="text" name="first_name" size="20"><br>
        Last name:<br>
        <input type="text" name="last_name" size="20"><br>
        Age:<br>
        <input type="text" name="age" size="20"><br><br>
        E-mail adress:<br>
        <input type="text" name="mail" size="20"><br><br>
        <input type="submit" name="register" id="regButton" value="Register">

<h1> Unsubscribe here: </h1>
        Username<br>
        <input type="text" size="20"><br>
        Password<br>
        <input type="text" size="20"><br><br>
        <input type="submit" name="unsub" id="unsubButton" value="Unsubscribe">
    </form>
</div>

我与数据库的连接(wamp上的本地)

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$fname =  $_POST['first_name'];
$lname = $_POST['last_name'];
$username = $_POST['username'];
$password = $_POST['password'];
$age = $_POST['age'];
$email = $_POST['mail'];
$sql = "INSERT INTO users (`ID`, `first_name`, `last_name`, `username`, `password`, `age`, `email`) VALUES (NULL, '$fname', '$lname', '$username', '$password', '$email', '$age');";
define('DB_USER', 'root');
define('DB_PASSWORD', 'studie');
define('DB_HOST', 'localhost');
define('DB_NAME', 'i268296_studie');
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Check connection
$connection_error = $connection->connect_error;
if ($connection_error != null) {
    echo "Error connecting to database: $connection_error";
    exit();
}
$result = $connection->query($sql);
?>

所以,如果有人能够如此友好地指出我正确的方向我如何将表格中的文本提交到我的数据库中。取消订阅的东西现在不需要工作。希望有人可以帮助我,因为PHP与数据库的结合正在慢慢让我发疯:)

提前致谢!

2 个答案:

答案 0 :(得分:0)

将您的连接代码放在所有$ _POST行之前..

在连接数据库之前进行查询...那么,如果没有连接,如何进行查询?并且,像第一个PHP代码一样,写session_start();

<?php
session_Start();

//YOUR CODE
define('DB_USER', 'root');
define('DB_PASSWORD', 'studie');
define('DB_HOST', 'localhost');
define('DB_NAME', 'i268296_studie');
$connection = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

当设置连接时,您可以进行查询

$fname =  $_POST['first_name'];
$lname = $_POST['last_name'];
$username = $_POST['username'];
$password = $_POST['password'];
$age = $_POST['age'];
$email = $_POST['mail'];
$sql = "INSERT INTO users (`ID`, `first_name`, `last_name`, `username`, `password`, `age`, `email`) VALUES (NULL, '$fname', '$lname', '$username', '$password', '$email', '$age')";
ADD $result=mysql_query($sql);

//YOU OTHER CODE..
?>

这是我在我的网站中用于连接数据库以进行登录的代码(更改插入的查询)..

    <?php
    session_start();
    $host=""; // Host name 
    $username=""; // Mysql username 
    $password=""; // Mysql password 
    $db_name=""; // Database name 
    $tbl_name=""; // Table name 

    mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
    mysql_select_db("$db_name")or die("cannot select DB");

    //take datas from inputs
   $myusername = stripslashes($myusername);
   $mypassword = stripslashes($mypassword);
   $myusername = mysql_real_escape_string($myusername);
   $mypassword = mysql_real_escape_string($mypassword);

    $sql="SELECT * FROM $tbl_name WHERE BINARY U_NomeUtente='$myusername' and U_Password='$mypassword'"; 
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);

    if($count==1) //if the login it's ok
        {

            header("location:pagethatyouwantoreach after the login.php"); 
        }
    ?>

答案 1 :(得分:0)

回应你的评论:

  

此时第二次我去了connection.php(里面有查询等)它只是填入数据库中的一个empy单元格

听起来PHP代码和HTML表单都在同一页面上(connectie.php)?在这种情况下发生的是您在显示表单之前执行服务器端代码。请注意,当您请求页面时,将执行该页面上的任何服务器端代码。 PHP代码并不真正了解或关心表单或按钮,它只是运行该文件中的任何代码。

您有两种选择:

  1. 呈现表单的代码与处理表单的代码分隔为两个不同的页面。一个页面可以只是纯HTML来显示表单(如果你想做一些服务器端工作来显示表单,可能还有一些最小的PHP代码)。然后,第二个页面(表单的action属性中引用的那个页面)将具有用于接收表单输入的PHP代码。这样,处理表单的代码只在表单实际提交时调用,而不是在请求表单时调用。
  2. 将表单处理服务器端代码包装在以下内容中:

    if (isset($_POST['register'])) { /* process registration code */ }

  3. 只有在使用if元素(其中一个按钮的名称)提交表单时,第二个选项才会有条件地调用register块中的逻辑。您可以对unsub按钮的逻辑执行相同操作。这里的想法是,当您请求页面时,这些if条件为false并且不会执行。但是当您提交表单时,其中一个是true并且确实执行。


    此外, 这很重要

    1. 您的代码中存在SQL注入漏洞,允许任何用户在您的服务器上执行其代码。有关如何保护代码的更多信息,请参阅this page
    2. 您的代码以纯文本格式存储用户密码。 永远不要以纯文本格式存储用户密码。 密码应使用单向哈希进行哈希处理,任何人都不应该阅读。