2017-07-31 14 views
-1

我試圖讓用戶在網站上註冊。但是,當用戶輸入他們的詳細信息並按下提交按鈕時,詳細信息不會像他們應該那樣插入到數據庫表中。然而,圖片插入功能仍然有效,但由於新用戶的詳細信息未上傳,圖片與用戶不匹配。任何幫助將不勝感激,因爲我正在做的工作將在不到48小時內提交。我不能得到正在輸入的數據上載到數據庫的形式

此錯誤保持出現

Warning: move_uploaded_file(): Unable to move '/tmp/phpuRNmad' to '../images/242167777kieran.jpeg' in /var/www/vhosts/kmoreland02.students.cs.qub.ac.uk/httpdocs/deals4students/index.php on line 31

這裏是形式代碼

<div id="register"> 
        <div class="container"> 
         <div class="row"> 
          <div class="col-md-12"> 
           <div class="title"> 
            <h2 class="wow bounce">Become a Registered User!</h2> 
            <p class="wow fadeIn" data-wow-delay="0.6s">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy.</p> 
           </div> 
           <form action="#" method="post" class="wow fadeInUp" data-wow-delay="0.9s" enctype="multipart/form-data" autocomplete="off"> 
            <div class="alert alert-error"></div> 
            <div class="col-md-3 col-sm-3"></div> 
            <div class="col-md-4 col-sm-4"> 
             <input name="newforename" type="text" class="form-control" id="newforename" placeholder="Enter your forename" required> 
             <input name="newsurname" type="text" class="form-control" id="newsurname" placeholder="Enter your surname" required > 
             <input name="newemail" type="text" class="form-control" id="newemail" placeholder="Enter your email" required > 
             <input name="newuniversity" type="text" class="form-control" id="newuniversity" placeholder="Enter your university/college/inst." required> 
             <input name="newpassword" type="password" class="form-control" placeholder="Password" required /> 
             <label>Select your Profile Picture: </label> <input name="uploads[]" type="file" multiple /> 
             <input name="create" type="submit" class="btn btn-block btn-success" value="Register"/> 
            </div> 


          </div> 
          <div class="col-md-3 col-sm-3"></div> 
          </form> 


         </div> 
        </div> 
       </div> 

這裏是代碼爲用於插入的數據上傳到分貝

<?php 

include("conn.php"); 

if(isset($_POST["create"])){ 


    $getforename = mysqli_real_escape_string($conn, $_POST["newforename"]); 
    $getsurname = mysqli_real_escape_string($conn, $_POST["newsurname"]); 
    $getemail = mysqli_real_escape_string($conn, $_POST["newemail"]); 
    $getuniversity = mysqli_real_escape_string($conn, $_POST["newuniversity"]); 
    $getpassword = mysqli_real_escape_string($conn, $_POST["newpassword"]); 


    $insertu = "INSERT INTO DealsUsers (id, Forename, Surname, Email, University/College, password) VALUES (NULL,'$getforename','$getsurname','$getemail','$getuniversity','$getpassword')"; 

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


    $last_id = mysqli_insert_id($conn); 

    $total = count($_FILES['uploads']['name']); 
    if($total >0){ 
     for($i=0; $i<$total; $i++){ 
     $tmppath = $_FILES['uploads']['tmp_name'][$i]; 
     $ran = rand(); 
     $newfilepath = "../images/".$ran.$_FILES['uploads']['name'][$i]; 
     $pathname = $ran.$_FILES['uploads']['name'][$i]; 

     move_uploaded_file($tmppath, $newfilepath); 
     $insertpp = "INSERT INTO DealsUserImg(user_id, path) 
        VALUES('$last_id', '$pathname')"; 

     $resultpp = mysqli_query($conn, $insertpp) or die(mysqli_error($conn));; 
     } 
    } 
} 
+1

是/ images /文件夾可寫嗎?檢查文件夾的權限並確保允許sctipt寫入。你在什麼操作系統上? – Cagy79

+0

是的,我檢查,只是知道和權限允許讀取寫 –

+0

請不要使用>字符的個人格式設置偏好,它有一個特殊的目的。我不得不編輯出來。 –

回答

1

後一一點點研究這在Windows機器上爲我工作:

<?php 

include("conn.php"); 

if (isset($_POST["create"])) { 
    $getforename = mysqli_real_escape_string($conn, $_POST["newforename"]); 
    $getsurname = mysqli_real_escape_string($conn, $_POST["newsurname"]); 
    $getemail = mysqli_real_escape_string($conn, $_POST["newemail"]); 
    $getuniversity = mysqli_real_escape_string($conn, $_POST["newuniversity"]); 
    $getpassword = mysqli_real_escape_string($conn, $_POST["newpassword"]); 

    $insertu = "INSERT INTO DealsUsers (`id`, `Forename`, `Surname`, `Email`, `University/College`, `password`) VALUES (NULL,'$getforename','$getsurname','$getemail','$getuniversity','$getpassword')"; 
    $result = mysqli_query($conn, $insertu) or die(mysqli_error($conn)); 
    $last_id = mysqli_insert_id($conn); 

    $total = count($_FILES['uploads']['name']); 
    if ($total > 0) { 
     for ($i = 0; $i < $total; $i++) { 
      $tmppath = $_FILES['uploads']['tmp_name'][$i]; 
      $ran = rand(); 
      $newfilepath = "../images/" . $ran . $_FILES['uploads']['name'][$i]; 
      $pathname = $ran . $_FILES['uploads']['name'][$i]; 

      move_uploaded_file($tmppath, $newfilepath); 

      $insertpp = "INSERT INTO DealsUserImg (`user_id`, `path`) VALUES('$last_id', '$pathname')"; 
      $resultpp = mysqli_query($conn, $insertpp) or die(mysqli_error($conn)); 
     } 
    } 
} 

你的錯誤是沒有用反引號包圍第一個語句中的列名,這導致了未處理的錯誤。您還可以刪除id以及MySQL語句中的關聯。即使沒有包含在聲明中,ID也會自動設置。

你下一步應該做什麼:

  1. 和檢查,如果用戶已經存在加密保存到數據庫之前(password_hash()散列密碼,password_verify()檢查它針對明文口令)的口令。
  2. 在將其保存到數據庫之前驗證所有輸入。用HTML或JavaScript進行客戶端驗證是不夠的!
  3. 添加驗證碼(與Google ReCaptcha類似)以防止腳本被新用戶感染。
  4. 看看PHP Prepared Statements
  5. 目前有可能未經您的許可上傳多個文件。從代碼中的上傳字段名稱和for循環中刪除括號,該代碼負責保存上傳數組中的所有文件。它只是一個虛擬角色,所以不需要讓潛在的垃圾郵件發送者有機會上傳儘可能多的圖片到他的網站上。
  6. 檢查上傳的文件是否真的是一個圖像,並在一個特定的文件大小。目前,每個人都可以上傳所有大小(直到upload_max_filesize命中)到您的網站,甚至執行它,如果他在圖像文件夾中訪問它。
+0

我在插入查詢中添加了後面的標記,但仍然沒有運氣。現在圖像上傳沒有錯誤,但用戶的詳細信息仍然沒有插入到數據庫中 –

+0

第一次查詢後是否出現錯誤? – Spingolini

+0

當我在網站上輸入數據時沒有任何內容出現 –

相關問題