2016-04-23 5 views
0

У меня возникла проблема с моим кодом, в частности с файлом move_uploaded_file. Я изменил папку, в которой я сохраняю разрешения для изображений до 777, чтобы убедиться, что это не проблема с разрешениями. Я также прочитал руководство по php о том, как использовать move_uploaded_file из w3schools.com. У меня закончились идеи о том, как загрузить изображение в папку с помощью php. Пожалуйста помоги.move_uploaded_file не работает, но нет ошибки

Вот часть кода с move_uploeaded_file:

<?php 
    if (@$_GET['action'] == "ci"){ 
     echo "<form action='account.php?action=ci' method='POST' enctype='multipart/form-data'><br /> 
     Available file extention: <stong>.PNG .JPG .JPEG</stong><br /><br /> 
     <input type='file' name='image' /><br /> 
     <input type='submit' name='change_pic' value='Change' /><br /> 
     </form>"; 
     if (isset($_POST['change_pic'])) { 
      $errors = array(); 
      $allowed_e = array('png', 'jpg', 'jpeg'); 

      $file_name = $_FILES['image']['name']; 
      $file_e = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); 
      $file_s = $_FILES['image']['size']; 
      $file_tmp = $_FILES['image']['tmp_name']; 

      if(in_array($file_e, $allowed_e) === false) { 
       $errors[] = 'This file extension is not allowed.'; 
      } 

      if ($file_s > 2097152) { 
       $errors[] = 'File size must be under 2MB'; 
      } 

      if (empty($errors)) { 
       move_uploaded_file($file_tmp, '../images/'.$file_name); 
       $image_up = '../images/'.$file_name; 
       $check = mysqli_query($connect, "SELECT * FROM users WHERE usename='"[email protected]$_SESSION['username']."'"); 
       $rows = mysqli_num_rows($check); 

       while($row = mysqli_fetch_assoc($check)) { 
        $db_image = $row['profile_pic']; 
       } 
       if($query = mysqli_query($connect, "UPDATE users SET profile_pic = '".$image_up."' WHERE username='".$_SESSION['username']."'")) 
        echo "You have successfuly changed your profile picture!"; 
     } else { 
       foreach($errors as $error) { 
        echo $error, '<br />'; 
       } 
      } 
     } 
    } 
?> 
+0

Есть несколько мест, где вы используете '@' для подавления ошибок. Вы должны удалить их, посмотреть, какие ошибки появляются, и исправить их все по-настоящему. Возможно, ваш сценарий умирает по другим причинам. – larsAnders

+1

@Anoopsaju
- это правильный способ закрыть теги. – SkrillexNukehulk

+0

@larsAnders Я постараюсь это скоро. – SkrillexNukehulk

ответ

1

Вот последний кусок кода, слегка переписаны. move_uploaded_file возвращает логическое значение, так что мы можем проверить, правда ли это или ложь, установив переменный $ результата:

 if (empty($errors)) { 
      $image_up = 'images/'.$file_name; 
      $result = move_uploaded_file($file_tmp, $image_up); 

      if($result){ 
       //this line had a typo usename -> username 
       //Also, you should change this over to using parameters and binding values ASAP. This leaves you open to hacking. 
       $check = mysqli_query($connect, "SELECT * FROM users WHERE username='"[email protected]$_SESSION['username']."'"); 
       $rows = mysqli_num_rows($check); 

       while($row = mysqli_fetch_assoc($check)) { 
        $db_image = $row['profile_pic']; 
       } 
       $q = "UPDATE users SET profile_pic = '".$image_up."' WHERE username='".$_SESSION['username']."'"; 
       if($query = mysqli_query($connect, $q)){ 
        echo "You have successfuly changed your profile picture!"; 
        } 
      } else { 
       echo "Upload failed."; 
      } 
    } else { 
      foreach($errors as $error) { 
       echo $error, '<br />'; 
      } 
     } 
    } 
} 
+0

Я не очень хорошо разбираюсь в безопасности, как вы можете видеть. Каковы обязательные значения? – SkrillexNukehulk

+0

Ознакомьтесь с [документами по параметризованным запросам с помощью mysqli] (http://php.net/manual/en/mysqli.prepare.php). – larsAnders

+0

Хорошо, я проверю. В любом случае, спасибо за быстрое исправление! Вы не резко критикуете меня, как некоторые люди. – SkrillexNukehulk

Смежные вопросы