2017-08-15 26 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">