2015-11-04 45 views
0

我想創建一個登錄系統,用戶可以在現有數據庫中上傳文件。首先要求用戶登錄然後上傳文件。這裏是我的數據庫: enter image description here試圖更新MySQL數據庫(上傳文件)使用PHP腳本

現在我想更新cv(blob)。 所以我創建了以下頁面。

<!-- Form --> 

<h1>Pease Login to Upload CV</h1> 
<form method="POST" enctype="multipart/form-data"> 
    Username: 
    <input type="text" name="username"><br> 
    Password: 
    <input type="password" name="password"><br><br> 
    <input type="submit" value="Submit" name="submit" /> <br> 

</form> 

以上是最初的形式。然後我用下面的腳本:

<!-- Script --> 
<?php 
    if (isset($_POST['submit'])) { 


    // make connection 
     $conn = mysqli_connect('localhost','root','','users'); 


     // if fails show error 
     if (!$conn) { 
      die("Connection failed: " . mysqli_connect_error()); 
      echo "Error Connecting to DB"; 
     } 


     $usrName = ($_POST['username']); 
     $paswrd = ($_POST['password']); 

     if($usrName!='' && $paswrd!=''){ 

      $sql ="SELECT username, password FROM credentials WHERE username = '$usrName'"; 

      $result = mysqli_query($conn, $sql); 

      $row = mysqli_fetch_row($result); 
      $dbUsname = $row[0]; 
      $dbPassword = $row[1]; 

       if ($usrName == $dbUsname && $paswrd == $dbPassword) { 
        echo "Hello ".$usrName." upload your CV now <br>"; 

        echo 

        "<form method='POST' enctype='multipart/form-data'> 
        <input type = 'file' value= 'upload' name = 'file'> 
        <input type='submit' value='Upload' name='upload' /> <br> 
        </form>"; 



        if(isset($_POST['upload'])){ 

         $cv = mysqli_real_escape_string($conn, $_POST['file']); 

         mysql_query("UPDATE credentials SET cv=$cv WHERE username=$usrName"); 

         if (!mysqli_query($conn,$UpdateQuery)) { 
          die('Error: ' . mysqli_error($conn)); 
         } 

        } 



       } 
       else{ 
        echo "<h1>Incorrect Username and/or password!</h1>"; 
       } 
     }else{ 
      echo "Please make sure username and password is not empty"; 
     } 
    } 
?> 

我已經測試了大部分的腳本。當我嘗試更新cv文件時,會發生此問題。在下面的代碼。 enter image description here

該腳本執行但我看不到任何文件上傳到我的數據庫。 有人可以指出我在哪裏做錯誤。

+0

[您的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

你真的應該使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –

+0

旁註:如果您看到我在下面發佈的答案,以及是否解決了問題,這是未知的;沒有任何跡象表明它。我已經做了一些額外的編輯,您需要重新加載我的答案才能看到添加的內容。 **注意:**這不是「踢分」評論。 –

回答

2

首先,我們正在處理「文件」而不是「文本」輸入。

因此,這部分代碼的$_POST['file'],需要改變以$_FILES['file']

但是你的代碼,這部分

mysql_query("UPDATE credentials SET cv=$cv WHERE username=$usrName"); 

多數民衆贊成沒有你2個原因。

你在混合APIs,你需要引用字符串值,技術上需要閱讀:(請參閱旁邊的代碼行)。

旁註:mysqli_query如果您要使用您正在使用的條件語句if (!mysqli_query($conn,$UpdateQuery)),則不應包含(僅在下面)。

mysqli_query($conn, "UPDATE credentials SET cv='$cv' WHERE username='$usrName'"); 
  • 不同的MySQL的API /功能不混用。

您需要使用同一個連接才能查詢。

然而看到這雖然,

if (!mysqli_query($conn,$UpdateQuery)) { 
    die('Error: ' . mysqli_error($conn)); 
} 

你可能忘記了$UpdateQuery變量添加到您的查詢,這應該理解爲

$UpdateQuery = "UPDATE credentials SET cv=`$cv` WHERE username='$usrName'"; 

錯誤報告會扔你一個未定義的變量UpdateQuery通知。

旁註:確保文件的大小是允許的。如果它太大,那麼你將需要增加它的值。

請教關於堆棧以下職位:


重寫:

$cv = mysqli_real_escape_string($conn, $_FILES['file']); 

    $UpdateQuery = "UPDATE credentials SET cv='$cv' WHERE username='$usrName'"; 

    // or using '".XXX."' syntax. In rare cares, that makes a difference. 
    // $UpdateQuery = "UPDATE credentials SET cv='".$cv."' WHERE username='".$usrName."'"; 

    if (!mysqli_query($conn,$UpdateQuery)) { 
     die('Error: ' . mysqli_error($conn)); 
    } 

    else{ 
     echo "Success!"; 
     } 

你也開到一個SQL注入。最好使用準備好的聲明。

參考的BLOB和TEXT類型:


密碼

我還注意到,您可能以純文本格式存儲密碼。這不被推薦。下面的

用途之一:

其他鏈接:

+0

儘管這不是我的問題的直接解決方案,但您的答案已經教會了我很多東西。尤其是那些鏈接很有幫助。完成這個項目,我終於感覺有點更有信心與PHP ..非常感謝你 – Shadid

+0

@Shadid不客氣。 –

0

在您發佈上傳表單更新查詢將無法運行,因爲它藏在裏面if(isset($_POST['submit']))。您需要移除if(isset($_POST['upload']))才能提交工作。

相關問題