2017-08-15 89 views
-1

我有一些PHP和HTML代码,应该从表单发送数据到我的MySQL数据库。但是,单击表单中的Submit(提交)后,页面将重新加载并且不会发生任何事情。没有回声或任何东西。 HTML与PHP文件位于同一个文件中。PHP MySQL没有提交或工作

PHP

<?php 
if(isset($_POST['submit'])){ 
    $usernamep = $_POST['usernameinput']; 
    $passwordp = $_POST['passwordinput']; 

    $servername = "localhost"; 
    $username = "USERNAMECENSOR"; 
    $password = "PASSWORDCENSOR"; 
    $dbname = "database"; 

    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "INSERT INTO accounts (username, password) 
     VALUES ('$usernamep', '$passwordp')"; 
     // use exec() because no results are returned 
     $conn->exec($sql); 
     echo "Success"; 
    } 
    catch(PDOException $e) 
    { 
     echo $sql . "<br>" . $e->getMessage(); 
    } 
    $conn = null; 
} 
?> 

HTML

<form method="POST" action=""> 
    <input type="text" name="usernameinput"><br> 
    <input type="password" name="passwordinput"><br> 
    <input type="submit" class="button" value="Sign in"> 
</form> 

注:我知道这个代码是目前受到SQL注入,密码没有加密。这是临时启动代码,试图让它首先运行。

+1

现在缺少的是'name ='submit'' –

+1

,最快的方式得到它的工作是**做正确的第一次**,经书。调用['password_hash'](https://secure.php.net/manual/en/function.password-hash.php)这么容易,你需要花更多的时间来写你的免责声明,而不是这样做,并避免该责任。同样,使用带有占位符值的预处理语句不仅是安全,正确的处理方式,而且还避免了一整类与SQL语法相关的错误,转义以及由于查询太难以一目了然而导致的错误。正确地做。不要找借口。 – tadman

+1

**警告**:编写您自己的访问控制层并不容易,并且有很多机会使其严重错误。请不要在[Laravel](http://laravel.com/)等任何现代开发框架(http://codegeekz.com/best-php-frameworks-for-developers/)上编写自己的认证系统,内置了强大的[认证系统](https://laravel.com/docs/5.4/authentication)。除非这纯粹是一个学术项目,否则没有理由写这个代码。如果这是一个学术项目,没有理由采取捷径让它“工作”。 – tadman

回答

2

你缺乏在submit按钮name属性,添加name="submit"

<form method="POST" action=""> 
    <input type="text" name="usernameinput"><br> 
    <input type="password" name="passwordinput"><br> 
    <input type="submit" name="submit" class="button" value="Sign in"> 
</form> 
-1

你必须将你的php文件包含到表单标签的动作中。

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>"> 
    <input type="text" name="usernameinput"><br> 
    <input type="password" name="passwordinput"><br> 
    <input type="submit" class="button" value="Sign in"> 
</form> 
+0

如果您使用的是相同的PHP文件,则不需要。 –

+0

'action'中的空格短于'<?php echo $ _SERVER ['PHP_SELF']?>' – Swellar

0

你的测试是错误的。您没有名为“submit”的输入(属性名称= submit)。它应该是:

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
... 
} 

像这样的广泛测试甚至不需要命名提交。 HTML表单甚至可以使用jQuery或JavaScript在另一个事件上发布。

0

在您的PHP文件中,您使用的是isset($_POST['submit'])。您没有任何form inputname="submit"。你可以让你的提交按钮是

<input type="submit" name="submit" class="button" value="Sign in">