簡體   English   中英

嘗試使用php腳本更新MySQL數據庫(上傳文件)

[英]Trying to Update MySQL database (uploading file) using a php script

我正在嘗試創建一個登錄系統,用戶可以在其中上傳現有數據庫中的文件。 首先要求用戶登錄,然后上傳文件。 這是我的數據庫: 在此處輸入圖片說明

現在我要更新簡歷(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文件時,會出現問題。 在下面的代碼。 在此處輸入圖片說明

腳本已執行,但是我看不到數據庫中上載的任何文件。 有人可以指出我在哪里出錯。

首先,我們要處理“文件”而不是“文本”輸入。

因此,代碼的$_POST['file']部分需要更改為$_FILES['file']

但是,這部分代碼

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

失敗的原因有兩個。

您正在混合使用API​​,並且需要引用字符串值,並且從技術上來說,它應讀為:(請參閱我的旁注下方的代碼行)。

旁注:如果要使用正在使用if (!mysqli_query($conn,$UpdateQuery))的條件語句,則不應包括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通知。

旁注:確保允許文件大小。 如果太大,則需要增加其值。

請參閱以下有關Stack的文章:


改寫:

$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類型的參考:


密碼

我還注意到您可能以純文本形式存儲密碼。 不建議這樣做。

使用以下之一:

其他連結:

發布上傳表單時,更新查詢將不會運行,因為它隱藏在if(isset($_POST['submit'])) 您需要將if(isset($_POST['upload']))移出if(isset($_POST['upload']))才能起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM