如何将表单数据插入到我的数据库中

时间:2016-07-16 14:46:41

标签: php mysql

我正在尝试将表单数据插入if let !mysql页面有效

但我不知道代码中的问题。

我一遍又一遍地浏览代码而无法找到错误,但它无法正常工作。

尝试database后,如何将connection数据导入insert表。

我在mysql工作。

这是我的源代码:

register

Windows>

<?php 

        $con = mysql_connect("localhost", "root", "", "tut"); 

2 个答案:

答案 0 :(得分:2)

虽然jophab answer可能有助于解决您目前的状况,但您应该注意一些事项。

1。 mysql_error

正确使用此方法后,您甚至可能无需发布问题。此方法返回抛出的错误的text消息,并为您提供Unknown column 'xx' in 'field list'等详细信息。

与您当前的设置一起使用可能类似于:

$sql = mysql_query("INSERT INTO users VALUES('', {$FName}','{$LName}','{$Email}','{$PW}')", $con);
if (!$sql) die(mysql_error($con));

这会让你知道你有语法错误,如下所示:VALUES('', {$FName}'&lt; - 请注意在第一个{之前缺少引号?

2。 SQL Injection

您需要注意,您所遵循的方法已被弃用且有充分理由。您正在做的是允许任何知道如何轻松破解您的数据库并获得所需信息的用户。最好的下一步是立即停止使用这些方法并了解MySQLi

MySQLi允许使用名为Prepared Statements的东西,这有助于减少您的漏洞。使用MySQLi,您的代码可能如下所示:

$mysqli = new mysqli("localhost", "root", 'ge7@P@s$w04D', "tut");
if (mysqli_connect_errno()) die("Connect failed: " . mysqli_connect_error());

if (!($stmt = $mysqli->prepare("INSERT INTO users (name_first, name_last, email, pass) VALUES (?, ?, ?, ?)"))) die("Preperation failed: " . mysqli_error($mysqli));

$FName= $_POST['First_name'];
$LName = $_POST['Last_name'];
$Email = $_POST['Email'];
$PW = $_POST['Password'];

if (!($bind = mysqli_stmt_bind_param($stmt, "ssss", $FName, $LName, $Email, $PW))) die("Bind failed: " . E_USER_ERROR);

if (!($exec = mysqli_stmt_execute($stmt))) die("Failed to execute query: " . mysqli_stmt_error($stmt));

那只是从臀部开始拍摄,但是一旦你学习了一点,你就会更好地理解这个想法。

更多阅读:Choosing an API

作为替代方案,您可能还会考虑PDO

警告的最后注意事项:Password Hashing

绝不使用密码文字 / 始终以某种方式哈希。如果要保持任何用户安全性,这一点非常重要。您和您的数据库永远不会知道用户的密码是什么。如果他们不记得,那么您会想出一个验证过程,让他们重置它。我老家乡的一家当地银行做了这件事,我警告他们两年来为什么不好。最后,在忽略了我的所有警告之后,我带着一台笔记本电脑走进来,在经理办公室里不经宣布地坐下来,开始拉动每个人的密码并向他展示。当然,起初他骂我并威胁要打电话给警察。在短短的几分钟内,我就让他确信了这个问题,并最终得到了一个非常感谢,因为他把错误引起了他的注意。毫无疑问,这是从不做的前5个列表。

请详细了解如何使用password_hash

之类的内容

以下列方式使用:

/** 
 *  This code will benchmark the server to determine how high of a cost i can
 *  afford. I want to set the highest cost that I can without slowing down
 *  the server too much. 8-10 is a good baseline, and more is good if the servers
 *  are fast enough. The code below aims for ≤ 50 milliseconds stretching time,
 *  which is a good baseline for systems handling interactive logins.
 *  */
function getCost() {
   $timeTarget = 0.05; // 50 milliseconds
   $cost = 8;
   do {
       $cost++;
       $start = microtime(true);
       password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
       $end = microtime(true);
   } while (($end - $start) < $timeTarget);
   return $cost;
}

/** getHash($pass)
 *  */
function getHash($pass) {
    return password_hash($pass, PASSWORD_DEFAULT, [ 'cost' => getCost() ]);
}

$hashPass = getHash($_POST['Password']);

答案 1 :(得分:0)

你的String concat是错误的。为了正确粘贴变量,您必须使用其他语法 但我建议修复和使用这种代码。你会有一个SQL注入问题。请尝试使用PDO对象。它们不仅可以保存,而且更易于使用。