2017-03-24 77 views
2

我正在創建一個網站,其中有一個專用於審覈的部分,另一個專用於用戶(登錄和註冊),都通過數據庫進行管理。PHP和SQL:通過數據庫管理登錄

在評論部分,用戶可以給審查(通過一種形式),這是在數據庫中使用這個PHP代碼

<?php 
    if(isset($_POST['pulsanteRecensione'])) 
    { 
     $host = "localhost"; 
     $username = "root"; 
     $password = "root"; 
     $db_nome = "ristorante"; 
     $tab_nome = "recensioni"; 

     $link = mysqli_connect($host, $username) or die ('Impossibile connettersi: '.mysqli_error()); 
     mysqli_select_db($link, $db_nome) or die ('Accesso non riuscito'); 

     $nome = $_POST['nome']; 
     $recensione = $_POST['recensione']; 

     $sql = "INSERT INTO $tab_nome (`Nome`, `Recensione`) VALUES ('$nome', '$recensione')"; 
     if(mysqli_query($link, $sql)) 
     { 
      echo "<h4 align=\"center\">Inserimento avvenuto con successo</h4>"; 
     } 
     else 
     { 
      echo "<h4 align=\"center\">Spiacenti, inserimento non riuscito</h4>"; 
     } 
    } 
?> 

和它的作品上傳。以同樣的方式,我要管理的用戶部分,所以我試圖簽署了這個PHP代碼,或多或少相同與前一個

<?php 
    if(isset($_POST['effettuaRegistrazione'])) 
    { 
     $nome = $_POST['nome']; 
     $cognome = $_POST['cognome']; 
     $mail = $_POST['email']; 
     $password = $_POST['password']; 
     $data = $_POST['dataNascita']; 
     $citta = $_POST['citta']; 

     $host = "localhost"; 
     $username = "root"; 
     $password = "root"; 
     $db_nome = "ristorante"; 
     $tab_nome = "utenti"; 

     $link = mysqli_connect($host, $username) or die ('Impossibile connettersi: '.mysqli_error()); 
     mysqli_select_db($link, $db_nome) or die ('Accesso non riuscito'); 

     $sql = "INSERT INTO $tab_nome (`ID_Utente`, `Cognome`, `Nome`, `E-mail`, `Password`, `Data di nascita`, `Citta`) VALUES ('3','$cognome','$nome','$mail','$password','$data','$citta')"; 

     if(mysqli_query($link, $sql)) 
     { 
      echo "<h4 align=\"center\">Inserimento avvenuto con successo</h4>"; 
     } 
     else 
     { 
      echo "<h4 align=\"center\">Spiacenti, inserimento non riuscito</h4>"; 
     } 
    } 
?> 

,但它不工作,它總是顯示Spiacenti,inserimento non riuscito。我究竟做錯了什麼?

這裏存在個用戶

enter image description here

+0

你能手動運行你認爲你正在運行的查詢嗎?你可以記錄查詢,以確保它看起來像你認爲它應該?令人難以置信的不安全的代碼,當然。 – mkaatman

+0

而不是'echo「 Spiacenti,inserimento non riuscito」;'檢查真正的錯誤,如果有'mysqli_error($ link)'並且使用php的錯誤報告。 –

+0

ID_Utente被定義爲int,所以在查詢中圍繞該值擺脫''''。 _AND_密碼被定義爲int。當然可以嗎? – Jeff

回答

4

一方面的結構,你有一個AI'd列(AUTO_INCREMENT)。

您需要在中將3替換爲VALUES中的''

mysqli_error($link)上的查詢會發出錯誤信號。

你也不應該存儲純文本密碼或整數(請參閱我的關於更進一步的說明)。

使用password_hash()和準備好的語句,因爲您在這裏打開SQL注入。

如果您的POST陣列失敗,請使用錯誤報告。

然而,你​​和mysqli_select_db($link, $db_nome)可以在這裏失敗。

使用它的所有四個參數,並且如果所需的數據庫沒有密碼,請僅使用''

即:

$link = mysqli_connect($host, $username, '', $db_nome); 

如果你現在的方法工作,然後無視^

另一件事;密碼列爲int(15),這似乎沒有多大意義,它不是一個安全的方法。

密碼欄通常爲varchar,並使用最少60個長度來保存安全散列,如password_hash(); password_hash()上的手冊說255是一個不錯的選擇。

另外,mysqli_error()需要db連接它mysqli_error($link)

您還需要確保列的長度足夠長以容納數據。這本身可能會失敗或被截斷。


注:

整個代碼的執行是靠這個條件語句:

if(isset($_POST['effettuaRegistrazione'])) {...}

如果失敗,那麼將你的整個查詢。

此外,在意見陳述(由Jeff):

您使用的是相同的變量$password的POST陣列和你的數據庫登錄的密碼可能兩者;你需要改變其中之一。

+0

感謝你的回答,請不要恨我......首先我不能用' '表示一個AI(MySQL返回一個錯誤),我不需要一個認真的密碼(這只是一個學校項目),無論如何感謝您對密碼的建議,我從來沒有聽說過password_hash()之前(我很新的PHP)。無論如何,錯誤必須在查詢中,因爲** everything **與其他代碼相同,這是可行的。 – mara6399

+0

我沒有注意到我正在使用相同的變量,我解決了這個問題,但它不起作用。我試圖用值而不是變量編寫相同的查詢,它的工作原理,所以問題不是其餘的代碼(這可能是有問題的,但正如我所說我是PHP新手)。 – mara6399

+0

@ mara6399 *大聲笑*我不會恨你;-)你可以在查詢中使用錯誤報告和'mysqli_error($ link)'來查看它返回的錯誤嗎?然後讓我知道這些是什麼。如果你不能用''''來替換VALUES中的'3',那麼試着從查詢和'3'中刪除'ID_Utente',看看是否有幫助。並確保所有POST數組都有它們的值。 –