2016-08-02 129 views
0

我正在为测试网站做一个简单的注册表单,并且由于某种原因它没有将数据发送到数据库,并且我没有视觉错误。我已经搜索了一个修复程序,但没有找到任何工作。发送数据从表单到数据库不工作(php,sql)

这基本上是我的形式(我只复制页面的组成部分):

<form action="includes/insert.php" method="post"> 
     <h3>Username</h3> 
     <input type="text" name="username"> 
     <br> 
     <br> 
     <h3>Email Address</h3> 
     <input type="email" name="email"> 
     <br> 
     <br> 
     <h3>Password</h3> 
     <input type="password" name="password"> 
     <br> 
     <br> 
     <br> 
     <input id="submit-btn" type="submit" name="submit" value="Submit"> 
    </form> 

正如你所看到的一切都是因为它的假设是。

,这是我insert.php

<? 
define('DB_NAME', 'logindb'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'password'); 
define('DB_HOST', 'localhost'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 

if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

$db_selected = mysql_select_db(DB_NAME, $link); 

if (!$db_selected) { 
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error()); 
} 

$username = $_POST['username']; 
$email = $_POST['email']; 
$password = $_POST['password']; 

$sql = "INSERT INTO `users` (`id`, `username`, `email`, `password`, `timestamp`) VALUES (NULL, '$username', '$email', '$password', CURRENT_TIMESTAMP)"; 

if (!mysql_query($sql)) { 
    die('Error: ' . mysql_error()); 
} 

mysql_close(); 
?> 
+1

id列很可能是一个自动增量列,因此您应该从INSERT INTO语句中将其删除。 – ViRuSTriNiTy

+3

***请[停止使用'mysql_ *'功能](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。*** [这些扩展名](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中删除。了解[prepared](http://en.wikipedia.org/wiki/Prepared_statement )[PDO]声明(http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared- statement.php),并考虑使用PDO,[这真的很简单](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+3

[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can- I-防止-SQL注入式-PHP)***。即使[转义字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不相信吗?](http://stackoverflow.com/q/38297105/1011527) –

回答

1

开幕PHP标签

<?php 

最新的PHP版本不启用默认短代码的语法。

+0

谢谢,我忘了关于这个:) –

0

使用NOW()而不是CURRENT_TIMESTAMP。

+0

['CURRENT_TIMESTAMP'是'NOW()']的同义词](https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functi ons.html#function_now)和https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_current-timestamp –

+0

NOW()比CURRENT_TIMESTAMP更优选吗? –