2016-09-15 3 views
0

У меня есть этот код. Моя цель - загрузить изображение в mysql с помощью php. Это дает ошибку: 404. Я проверил свой код снова и снова, но ничего не получается. В mysqli_connection есть что-то не так, я попытался загрузить что-то еще, и это сработало нормально, но для изображения у меня проблема, ошибка: 404. У кого-нибудь есть идеи о том, в чем проблема? Примечание: имя текущего файла является upload.phpЗагрузка php изображений в mysql

<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Resim Yükleyiniz</title>      //Upload and image 
</head> 

<body> 
<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="resim" value="Resim Seçiniz"> <input type="submit" value="Yükle">      //choose an image , upload 
</form> 
</body> 

<?php 
//getting mysqli connection 
$con = mysqli_connect("mysql.hostinger.web.tr","*******-user","*****-password") or die(mysql_error()); 
mysqli_select_db($con,"********-database name") or die(mysql_error()); 

$ders = $_GET['ders']; 

//getting file content 
$dosya = $_FILES['resim']['tmp_name']; 
if(isset($dosya)){ 
    $resim = addslashes(file_get_contents($_FILES['resim']['tmp_name'])); 

    //control of if the file is an image or not 
    $resim_boyutu = getimagesize($_FILES['resim']['tmp_name']);           //This gives false if the $dosya is not an image 
    if($resim_boyutu == false) 
    echo "Lütfen resim türünden bir dosya seçiniz."; 
    else { 
    if(!mysqli_query($con,"INSERT INTO $ders VALUES ('','$resim')"))     //uploading image into the table 
     echo "Görüntü yüklenirken bir hata oluştu."; 
    else 
     echo "Görüntü yüklendi"; 
    } 
} 

else 
    echo "Lütfen resim seçiniz."; 

?> 

</html> 
+0

что вы получили в print_r ($ _ FILES)? У вас есть зарезервированные символы (например, пробелы, знаки препинания, не-ASCII) в имени изображения? – Bhavin

+0

Имеет _mat_upload.php_ – Ayak973

+0

@ Ayak973 ах действительно очень спасибо !!! Я изменил имя файла .php, но забыл изменить подключения к нему. Я дал много времени, чтобы решить этот argh .. Небольшие ошибки .. –

ответ

0

использование getimagesize() или exif_imagetype()

// integer - for example: IMAGETYPE_GIF, IMAGETYPE_JPEG etc. 
$type = exif_imagetype($_FILES['image']['tmp_name']); 

или

$info = getimagesize($_FILES['image']['tmp_name']); 
$mime = $info['mime']; // mime-type as string for ex. "image/jpeg" etc. 
$width = $info[0];  // width as integer for ex. 512 
$height = $info[1];  // height as integer for ex. 384 
$type = $info[2];  // same as exif_imagetype 

exif_imagetype ум, что гораздо быстрее, чем getimagesize. Проверьте документацию для получения дополнительной информации ,

+0

Но может ли узнать тип изображения решить ошибку 404? –

0

Много исправлять здесь. (Я часто думаю, что я должен был подписан до обзора кода, а не переполнение стека)

  • у вас есть старые ссылки mysql_ в вашем die в вашем коде, который никогда не даст вам полезный ответ. вместо этого замените на die(mysqli_error($con)).

  • Настоятельно рекомендуется также указывать базу данных при использовании mysqli_connect, а не как отдельный вызов метода. Read the Manual

  • Вы действительно должны проверить наличие файлов Коды ошибок перед действиями по данным $ _FILE. Например: if($_FILES['resim']['error'] == 0){ process upload }

  • Поскольку вы четко используете язык, не относящийся к ascii, настоятельно рекомендуется использовать accept-charset='utf-8' в вашем теге <form>.

  • Я рекомендую прочитать о saving filedata into MySQL, и я хотел бы также рекомендовать, что вы этого не сделаете, это гораздо лучше и эффективнее и проще отлаживать просто сохранить ссылку в файл в БД и сохранить файл изображения на диск сервера, а не как поле в базе данных. Reference.

  • Вы должны быть очень осторожны (читайте: изменение, срочно!), Имеющее значение $_GET неквалифицированным и подключены прямо в ваш SQL запрос: INSERT INTO $ders это действительно плохая идея и не должно быть сделано , По крайней мере, вы должны удалить недопустимые или управляющие символы с Preg_replace Regex, такие как:

    $ders = preg_replace("/[a-z0-9_]/i","",$_GET['ders']); 
    
  • Что заставляет вас думать, что вам нужно addslashes вашему file_get_contents? Я хотел бы предложить не добавляющие слэш, а не спасаясь значение данных с:

    $resim = mysqli_real_escape_string($con, 
         file_get_contents($_FILES['resim']['tmp_name'])); 
    
  • Еще лучше было бы использовать MySQLi Prepared Statements и совместить это с объектно-ориентированное программирование баз данных.Этот подход настоятельно рекомендуется.

Я не могу предоставить вам любую выходную отладку/помощь, потому что у вас есть (пока) не указан, что вызывает ваши ошибки 404, которые вы сообщаете в вашем вопросе. Добавьте эти данные (отредактируйте свой вопрос) и дайте мне знать, а затем я могу это пересмотреть.

Дополнительная: Потому что вы явно использует набор символов не-ASCII, я очень рекомендую потратить немного времени и давая this Stack Overflow Q&A чтения через, так что вы знаете, как правильно подходить к кодировок базы данных. Это потенциально может спасти вас дней стресса. Я не думаю это проблема с вами с точки зрения этого вопроса.

Я также рекомендую использовать mb_string PHP module, чтобы убедиться, что PHP правильно обрабатывает многобайтовые строки правильно.

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