2013-02-27 3 views
0

Мне была назначена задача исправления старого php-сайта с момента его переноса на более новый сервер. Сервер, на котором он сейчас включен, не позволяет использовать глобализованные переменные, и это почти весь этот сайт. Когда вы пытаетесь загрузить изображение, в моем заявлении sql отображается все, кроме идентификатора для листинга, к которому я добавляю изображение. Я надеялся, что кто-то поможет мне понять это.Загрузка файла php не работает

Это моя функция загрузки:

function upload(){ 
global $imagefolder, $id; 
global $tbl_units; 

include "globalizePOSTGET.php"; 

// $uid = uuid(); 
$minsize = 5000;   // 5kb 
$maxsize = 3000000;  // 3mb 
$ext = explode('.',basename($_FILES['userfile']['name'])); 
$ext = $ext[count($ext)-1]; 
$ext = strtolower($ext); 

if ($ext != "jpg" && $ext != "jpeg" && $ext != "png") { 
    echo "<script> alert('Image is not a png or jpeg format'); </script>"; 
    return false; 
} 

$imagename = $_POST['id']."_img".$_FILES['img'].".$ext"; 
$imagename2 = "X_".$imagename; 
$uploadfile = $imagefolder . $imagename; 
$uploadfile2 = $imagefolder . $imagename2; 
$uploadthumb = $imagefolder . "tn_" . $imagename; 

if (file_exists($uploadfile)) unlink($uploadfile); 
if (file_exists($uploadthumb)) unlink($uploadthumb); 

if (file_exists($uploadfile)) { 
    echo "<script> alert('Image already exists!'); </script>"; 
} 
else 
{ 
    if(is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
     // check the file is less than the maximum file size 
     if($_FILES['userfile']['size'] < $maxsize) { 
      $imgData = addslashes(file_get_contents($_FILES['userfile']['tmp_name']));  // prepare the image for insertion 
      $size = getimagesize($_FILES['userfile']['tmp_name']);   // get the image info.. 
      if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile2)) { 
       $Image = @imagecreatefromjpeg($uploadfile2); 
       if ($Image) { 
       $img_height = imagesy($Image); 
       $img_width = imagesx($Image); 
       imagedestroy($Image); 
       } 

       if ($img_height > $img_width) {   // portrait 
        $tempMultiplier = 150/$img_height; 
        $tempMultiplierFull = 600/$img_height; 
       } else { 
        $tempMultiplier = 150/$img_width; 
        $tempMultiplierFull = 600/$img_width; 
       } 

       $imageHeight = $img_height * $tempMultiplier; 
       $imageWidth = $img_width * $tempMultiplier; 
       $fullimageHeight = $img_height * $tempMultiplierFull; 
       $fullimageWidth = $img_width * $tempMultiplierFull; 
       createthumb($imagename2,"tn_".$imagename,$imageWidth,$imageHeight); 

       if($_FILES['userfile']['size'] > $minsize) { 
        createthumb($imagename2,$imagename,$fullimageWidth,$fullimageHeight); 
        if (file_exists($uploadfile2)) unlink($uploadfile2); 
       } else { 
        rename($uploadfile2, $uploadfile); 
       } 

       $sql = "UPDATE $tbl_units SET photo".$_FILES['img']." = \"" . $imagename . "\" WHERE id = " . $_POST['id']; 
       echo $sql; 
       if(!mysql_query($sql)) { 
        echo "<script> alert('Unable to upload file'); </script>"; 
       } else { 
        ?> <script>location.replace('memonly.php?action=edit_record&id=<?php echo $id; ?>');</script> <?php 
       } 
      } 
     } else { 
      // if the file is not less than the maximum allowed, print an error 
      $file_n = basename($_FILES['userfile']['name']); 
      $file_s = $_FILES['userfile']['size']; 
      ?> 
      <script> alert("File exceeds the maximum limit of <?php echo $maxsize; ?>\nFile <?php echo $file_n; ?> is <?php echo $file_s; ?>");</script> 
      <?php 
     } 
    } 
} 
} 

Я вторя SQL заявление по линии, которая дает мне ошибку, я думаю. После нажатия на отправке, страница сообщает мне Unable to upload file'. Which is why I echoed the sql there. I end up with a sql statement looking like this: UPDATE member_units SET photo = "_img.jpg" WHERE id = `

Кто-то, пожалуйста, помогите мне! Я очень неопытен в PHP, и я понятия не имею, что здесь делать.

Вот форма, которая делает загрузку:

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
<input type="hidden" name="_submit_check" value="1" /> 
<input type="hidden" name="id" value="<?php echo $id; ?>" /> 
<input type="hidden" name="img" value="<?php echo $img; ?>" /> 
Image URL: <input type="file" name="userfile" value="" style="font-size: 10px; width: 100%;"> 
<input type="submit" value="Submit" onClick="return validate();">&nbsp; 
<input type="button" value="Cancel" onClick="location.href='/memonly.php?action=edit_record<?php echo "&id=$id&memberid=$memberid"; ?>';"> 
</form> 
+1

что это: $ _FILES ['img']? – Shehabix

+0

Ты меня достал! Он использовал, чтобы получить '$ _POST', но другой программист сказал мне, что мне нужно изменить его на' $ _FILES', поэтому я и сделал. – jlg

ответ

2

Первое, что вам нужно сделать с такой проблемой, - это работа, в которой проблемы возникают. Так возьмите вторит заявление ...

UPDATE SET member_units фото = "_img.jpg" WHERE ID = `

Это соответствует ...

UPDATE $tbl_units SET photo".$_FILES['img']." = \"" . $imagename . "\" WHERE id = " . $_POST['id']; 

Мы можем видеть для сравнения видно, что $ _FILES ['img'] является и пустой переменной, насколько это преобразование в строку. То же самое сказано для $ _POST ['id'], а $ imagename дает короткое имя файла _img.jpg.

Отслеживание тогда вы можете увидеть, что $ ImageName происходит от ...

$_POST['id']."_img".$_FILES['img'].".$ext"; 

Это где ваш фото = "_img.jpg" приходит. Опять же, $ _FILES ['img'] и $ _POST ['id']

Тот факт, что вы достигаете утверждения echo, означает, что что-то загружается, но оно находится через массив $ _FILES ['userfile'] , со всеми связанными с ним переменными, например $ _FILES ['userfile'] ['name'], который даст вам имя файла загружаемого изображения.

Что нужно, чтобы спросить себя, это то, откуда вы ожидаете $ _POST ['id'], поскольку он отсутствует или пуст, и какое поле в вашей HTML-форме доставляет эту переменную. Затем вам нужно спросить себя, чего вы пытаетесь достичь с помощью вашей системы именования. Например, если вы хотите, чтобы файл изображения выглядел следующим образом: 1_imgLolCat.JPG, то переменный нужно будет выглядеть как

$imagename = $_POST['id']."_img".$_FILES['userfile']['name']; 

Однако заключительная часть моего ответа ниже заставляет меня думать, что вместо имени файла, что вы ищете на самом деле переменную POST, которая обозначает категорию или тип изображения, в этом случае вы можете захотеть работать с ...

$imagename = $_POST['id']."_img".$_POST['img'].".$ext"; 

... если поле HTML существует с именем «IMG»!

Наконец, посмотрите на ваш SQL заявление ...

SET photo".$_FILES['img']." = \"" . $imagename . "\" 

И дважды проверьте ваши таблицы, так что вы, по всей видимости, пытается сделать, это установить уникальную переменную в вашей таблице, которая будет зависеть от чего-то из формы. Возможно, я ошибаюсь, но я предполагаю (как я сказал выше), что вы хотите $ _POST ['img'].

Слово предупреждения, необходимо ... НУЖНО, чтобы дезинфицировать эти переменные, прежде чем вводить их в оператор SQL, подобный этому. Кто-то может легко принять

SET photo".$_POST['img'] 

и удалите всю таблицу, если для этой базы данных были установлены разрешения для использования в базе данных. Есть много других ответов относительно того, как это сделать должным образом. :)

+0

Я только узнал, что это было из-за глобальных переменных. Поскольку цель этого сайта - просто болтаться до тех пор, пока клиент не получит новый, я должен был сделать операцию быстрого типа. Спасибо за вашу помощь! – jlg

0

Похоже, поле «Идентификатор» не отправляется в HTML-форме. Думаю, это должен быть скрытый вход?

Будьте осторожны, ваш сценарий может стать целью внедрения SQL: вы используете пользовательский ввод ($ _POST ['id']) непосредственно в SQL-запросе. Вы должны проверить, действительно ли этот ввод задан и числовой.

+0

Спасибо за подсказку и не для того, чтобы высмеять код! Этот сайт фактически находится в середине редизайна, но они просто хотят, чтобы он работал должным образом, пока они не заработают новый сайт. :) – jlg

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