Есть функция загрузки файла, в данном случае изображения.
function upload($_FILES,$url,$maxsize = 1024){
@mkdir("img", 777);
if($_FILES['IMG']['name'] !=''){
//Проверяем размер файла
if($_FILES['IMG']['size'] != 0 AND $_FILES['IMG']['size']<=($maxsize*1024)) {
//Проверяем расширение файла
$ext=array(".gif", ".jpeg", ".jpg");
if(in_array(strrchr($_FILES['IMG']['name'],"."),$ext)){
//Проверяем загрузился ли файл на сервер
if(is_uploaded_file($_FILES['IMG']['tmp_name'])) {
//Перемещаем загруженный файл в необходимую папку $url
if(move_uploaded_file($_FILES['IMG']['tmp_name'], $url."/".md5(basename($_FILES['IMG']['name'])))) {
return TRUE;
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
}
}
Но было замечено, что некоторые изображения получают фнкцией md5 одинаковый код, оттого в папку с изображениями не перемещаются, то есть в базе данных фигурируют, а в папке их нет. А одна статья вообще в базу данных не записывает никакого url. Отчего так может быть? Помогите пожалуйста или советом мудрым или скрипты мои кто не сочтет за труд посмотреть. Я в панике.
Спустя 10 минут, 23 секунды (16.01.2011 - 12:17) Snus написал(а):
Svetlaya
Делай названия файлов в microtime().jpg(gif, png)
Делай названия файлов в microtime().jpg(gif, png)
Спустя 2 минуты, 17 секунд (16.01.2011 - 12:19) Svetlaya написал(а):
А что и зачем это? Обьясните мне глупой.
Спустя 12 минут, 21 секунда (16.01.2011 - 12:31) Snus написал(а):
Svetlaya
База данных должна быть примерно следующей структуры:
id | fileName | fileType | filePath | upDate
Где filePath - название файла (лучше даже полный путь к твоему файлу),
название это генерировать еще лучше так:
и пишешь в базу $filePath, потом достаешь нужную запись в бд и генерируешь html-год:
База данных должна быть примерно следующей структуры:
id | fileName | fileType | filePath | upDate
Где filePath - название файла (лучше даже полный путь к твоему файлу),
название это генерировать еще лучше так:
$fileDir = 'files/';
$ext = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$ext;
и пишешь в базу $filePath, потом достаешь нужную запись в бд и генерируешь html-год:
$query = "SELECT `fileName`, `filePath` FROM `files` WHERE `id` = '1'";
$sql = mysql_query($query) or die(mysql_error());
list($fileName, $filePath) = mysql_fetch_array($sql);
echo '<h2>'.$fileName.'</h2>';
echo '<img src="'.$filePath.'" title="'.$fileName.'">';
Спустя 11 минут, 8 секунд (16.01.2011 - 12:42) Svetlaya написал(а):
Мне в принципе имя файла не нужно, ибо изображение просто иллюстрирует текст.
А структура таблицы у меня аналогичная с вашим примером. То есть в каждой строке все данные по статье. И из базы вот как достается изображение.
Мне интересно отчего одни записываются по человечески картинки, а другие блажат. Ведь должна же быть какая-то определенная причина.
А структура таблицы у меня аналогичная с вашим примером. То есть в каждой строке все данные по статье. И из базы вот как достается изображение.
$Q2 = mysql_query("SELECT * FROM tnews WHERE id={$_REQUEST['id']}");
$r = mysql_fetch_array($Q2);
if($r['img_url']!==''){
?>
<div class="news_box">
<div id="bg-heading"><span class="heading"><?=stripslashes($r['heading']);?></span>
<span class="date"><?=substr($r['date_up'],8,2);?>.<?=substr($r['date_up'],5,2);?>.<?=substr($r['date_up'],0,4);?></span></div>
<div class="title"><?=stripslashes($r['title']);?></div>
<div class="subtitle"><?=stripslashes($r['subtitle']);?></div>
<img class="img_news" src="<?=$url;?>/<?=$r['img_url'];?>" /><div class="text"><?=nl2br(stripslashes($r['news']));?>
</div>
<div class="author_news"><?=stripslashes($r['author']);?></div><br />
<span class="full_views">Просмотров <?=$r['views'];?></span>
</div>
Мне интересно отчего одни записываются по человечески картинки, а другие блажат. Ведь должна же быть какая-то определенная причина.
Спустя 3 минуты, 56 секунд (16.01.2011 - 12:46) Snus написал(а):
Svetlaya
А у Вас запись в БД после проверки на запись файла или до?
А у Вас запись в БД после проверки на запись файла или до?
Спустя 5 минут, 15 секунд (16.01.2011 - 12:51) Svetlaya написал(а):
После
//Работаем с файлом
if(upload($_FILES,$url)) {
//Обзываем файл
$img_url = md5(basename($_FILES['IMG']['name']));
//Выполняем запрос
$query = ("INSERT INTO tnews VALUES(NULL,'".$heading."','".$title."','".$subtitle."','".$text."','".$author."','".$img_url."','".$date."','".$prew."','0')");
Спустя 6 минут, 54 секунды (16.01.2011 - 12:58) Snus написал(а):
Svetlaya
Попробуй
Потому, что я могу разные файлы с одинаковыми именами загружать. И будут они перезаписываться все время. Или вообще игнорироваться.
Попробуй
md5(basename($_FILES['IMG']['name']))заменить на тот вариант, что я тебе написал.
Потому, что я могу разные файлы с одинаковыми именами загружать. И будут они перезаписываться все время. Или вообще игнорироваться.
Спустя 11 минут, 10 секунд (16.01.2011 - 13:10) Svetlaya написал(а):
А можно конкретную строчку что на что заменить. А то я если честно не очень поняла. Но дело похоже, вы правы, в одинаковых названиях файлов.
Спустя 5 минут, 32 секунды (16.01.2011 - 13:15) Snus написал(а):
Svetlaya
на
И соответственно, тут тоже
и запишешь в БД $filePath вместо $img_url. И не забывай, что в БД уже пишется полный путь. Так что вывод на экран будет таким:
$img_url = md5(basename($_FILES['IMG']['name']));
на
$fileDir = 'files/';
$ext = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$ext;
И соответственно, тут тоже
if(move_uploaded_file($_FILES['IMG']['tmp_name'], $filePath)) {
и запишешь в БД $filePath вместо $img_url. И не забывай, что в БД уже пишется полный путь. Так что вывод на экран будет таким:
$query = "SELECT `fileName`, `filePath` FROM `files` WHERE `id` = '1'";
$sql = mysql_query($query) or die(mysql_error());
list($fileName, $filePath) = mysql_fetch_array($sql);
echo '<h2>'.$fileName.'</h2>';
echo '<img src="'.$filePath.'" title="'.$fileName.'">';
Спустя 1 час, 52 минуты, 47 секунд (16.01.2011 - 15:08) Svetlaya написал(а):
Уважаемый Snus, как будет выглядеть функция upload?
Что тут изменить?
Извините, что так пристала к вам, но уж очень хочется разобраться, а понимание все не приходит.
function upload($_FILES,$fileDir,$maxsize = 1024){
@mkdir("img", 0777);
if($_FILES['IMG']['name'] !=''){
//Проверяем размер файла
if($_FILES['IMG']['size'] != 0 AND $_FILES['IMG']['size']<=($maxsize*1024)) {
//Проверяем расширение файла
$ext=array(".gif", ".jpeg", ".jpg");
if(in_array(strrchr($_FILES['IMG']['name'],"."),$ext)){
$extt = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$extt;
//Проверяем загрузился ли файл на сервер
if(is_uploaded_file($_FILES['IMG']['tmp_name'])) {
//Перемещаем загруженный файл в необходимую папку $url
if(move_uploaded_file($_FILES['IMG']['tmp_name'], $filePath)) {
return TRUE;
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
}
}
Что тут изменить?
if($_POST['do'] =='') {
<form name="" method="POST" enctype="multipart/form-data">
Загрузить изображение:<br/>
<input type="file" name="IMG" /> <br/>
<input name="do" type="submit" value="Сохранить"/>
</form>
<?php
}
else {
if(upload($_FILES,$fileDir)) {
$ext = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$ext;
$query = ("INSERT INTO img VALUES(NULL,'".$filePath."',)");
$q2 = @mysql_query($query);
if($q2) { echo 'Изображение добавлено'; }
}
else{echo 'Ошибка';}
}
Извините, что так пристала к вам, но уж очень хочется разобраться, а понимание все не приходит.
Спустя 7 минут, 9 секунд (16.01.2011 - 15:15) Snus написал(а):
Svetlaya
Достаточно 1 раз прописать, а то Вы дважды генерируете микротайм и случайное число и названия в БД и изображения будут отличаться.
$extt = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$extt;
Достаточно 1 раз прописать, а то Вы дважды генерируете микротайм и случайное число и названия в БД и изображения будут отличаться.
Спустя 1 минута, 46 секунд (16.01.2011 - 15:17) Svetlaya написал(а):
У меня что-то совсем в базу ничего не заносится
Спустя 43 секунды (16.01.2011 - 15:18) Snus написал(а):
function upload($_FILES,$fileDir,$maxsize = 1024){
@mkdir("img", 0777);
if($_FILES['IMG']['name'] !=''){
//Проверяем размер файла
if($_FILES['IMG']['size'] != 0 AND $_FILES['IMG']['size']<=($maxsize*1024)) {
//Проверяем расширение файла
$ext=array(".gif", ".jpeg", ".jpg");
if(in_array(strrchr($_FILES['IMG']['name'],"."),$ext)){
$extt = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$extt;
//Проверяем загрузился ли файл на сервер
if(is_uploaded_file($_FILES['IMG']['tmp_name'])) {
//Перемещаем загруженный файл в необходимую папку $url
if(move_uploaded_file($_FILES['IMG']['tmp_name'], $filePath)) {
return $filePath;
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
} else { return FALSE;}
}
}
if(($filePath = upload($_FILES,$fileDir)) !== FALSE) {
$query = ("INSERT INTO img VALUES(NULL,'".$filePath."',)");
$q2 = @mysql_query($query);
if($q2) { echo 'Изображение добавлено'; }
}
else{echo 'Ошибка';}
}
Спустя 58 секунд (16.01.2011 - 15:18) Snus написал(а):
Цитата (Svetlaya @ 16.01.2011 - 12:17) |
У меня что-то совсем в базу ничего не заносится |
Покажите структуру Вашей БД
И никогда не закрывайте запрос в БД собачкой @, лучше замените на mysql_query($query) or die(mysql_error());
Спустя 4 минуты, 21 секунда (16.01.2011 - 15:23) Svetlaya написал(а):
Ну это я для примера создала. Потом если получится вставлю в реальный код.
Спустя 2 минуты, 5 секунд (16.01.2011 - 15:25) Snus написал(а):
Svetlaya
И вот, что я еще у Вас заметил на первых двух строчках:
Директорию img он у вас создает, а не $url. Соответственно, если Вы выполните функцию upload($_FILES, 'test'); Файл он вам не запишет.
И вот, что я еще у Вас заметил на первых двух строчках:
function upload($_FILES,$url,$maxsize = 1024){
@mkdir("img", 777);
Директорию img он у вас создает, а не $url. Соответственно, если Вы выполните функцию upload($_FILES, 'test'); Файл он вам не запишет.
Спустя 5 минут, 27 секунд (16.01.2011 - 15:30) Svetlaya написал(а):
так в $fileDir у меня записано "img". Или это не правильно?
Спустя 1 минута, 47 секунд (16.01.2011 - 15:32) Snus написал(а):
Svetlaya
function upload($_FILES, $fileDir, $maxsize = 1024){
@mkdir($fileDir, 0777);
if(empty($_FILES['IMG']['tmp_name'])) return FALSE;
if($_FILES['IMG']['size'] > ($maxsize*1024)) return FALSE;
$ext = array(".gif", ".jpeg", ".jpg");
if(in_array(strrchr($_FILES['IMG']['name'],"."),$ext)){
$extt = substr($_FILES['IMG']['name'], -3);
$filePath = $fileDir.microtime().'_'.rand(1,99).'.'.$extt;
if(move_uploaded_file($_FILES['IMG']['tmp_name'], $filePath)) {
return $filePath;
} else { return FALSE; }
} else { return FALSE;}
}
Спустя 3 минуты, 13 секунд (16.01.2011 - 15:35) alex12060 написал(а):
сколько не пытался, все въехать не могу, что происходит с скриптом?
Спустя 8 минут, 24 секунды (16.01.2011 - 15:44) Svetlaya написал(а):
Всё равно не сохраняет. Может тут какая-то ошибка, в самом файле с формой?
Ага. Картинки он сохранил мимо директории $fileDir, прямо в корень папки со скриптами, и в базу не внес.
<?php
require("config.inc.php");
require("functions.inc.php");
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS) or die("Не могу подключиться" );
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
mysql_query("SET NAMES utf8");
if($_POST['do'] =='') {
?>
<form name="" action="?action=new" method="POST" enctype="multipart/form-data">
Загрузить изображение:<br/>
<input type="file" name="IMG" /> <br/>
<input name="do" type="submit" value="Сохранить"/>
</form>
<?php
}
else {
if(($filePath = upload($_FILES,$fileDir)) !== FALSE) {
$query = ("INSERT INTO img VALUES(NULL,'".$filePath."',)");
$q2 = @mysql_query($query);
if($q2) { echo 'Изображение добавлено'; }
}
else{echo 'Ошибка';}
}
?>
Ага. Картинки он сохранил мимо директории $fileDir, прямо в корень папки со скриптами, и в базу не внес.
Спустя 5 минут, 21 секунда (16.01.2011 - 15:49) inpost написал(а):
Svetlaya
Я бы советовал имя давать так: date("Y_m_d_H_i_s").'_'.md5('name'). То есть в начале будет дата писаться, далее md5 от базового имени. Тогда проблем вообще не будет, и в дальнейшем модерировать очень просто будет по дате.
Я бы советовал имя давать так: date("Y_m_d_H_i_s").'_'.md5('name'). То есть в начале будет дата писаться, далее md5 от базового имени. Тогда проблем вообще не будет, и в дальнейшем модерировать очень просто будет по дате.
Спустя 1 минута, 43 секунды (16.01.2011 - 15:51) inpost написал(а):
Ответ был на самый первый топик. Имя задаётся тут:
move_uploaded_file($_FILES['IMG']['tmp_name'], $url."/".md5(basename($_FILES['IMG']['name'])))
Добавь к md5 отдельно дату, проблемы сами уйдут.
move_uploaded_file($_FILES['IMG']['tmp_name'], $url."/".md5(basename($_FILES['IMG']['name'])))
Добавь к md5 отдельно дату, проблемы сами уйдут.
Спустя 17 минут, 50 секунд (16.01.2011 - 16:09) Dron19 написал(а):
Цитата (Snus @ 16.01.2011 - 09:31) |
Svetlaya База данных должна быть примерно следующей структуры: id | fileName | fileType | filePath | upDate Где filePath - название файла (лучше даже полный путь к твоему файлу), название это генерировать еще лучше так: $fileDir = 'files/'; и пишешь в базу $filePath, потом достаешь нужную запись в бд и генерируешь html-год: $query = "SELECT `fileName`, `filePath` FROM `files` WHERE `id` = '1'"; |
ни в коем случае!!! А если расширение jpeg???? То у нее в базе будет лежать фотка с таким бредовым названием 2345925_56.peg И что дальше?
Спустя 32 секунды (16.01.2011 - 16:09) Dron19 написал(а):
вырезать тут лучше регуляркой!
Спустя 46 минут, 22 секунды (16.01.2011 - 16:56) alex12060 написал(а):
<?php
require("config.inc.php");
require("functions.inc.php");
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS) or die("Не могу подключиться" );
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
mysql_query("SET NAMES utf8");
if($_POST['do'] =='') {
?>
<form name="" action="?action=new" method="POST" enctype="multipart/form-data">
Загрузить изображение:<br/>
<input type="file" name="IMG" /> <br/>
<input name="do" type="submit" value="Сохранить"/>
</form>
<?php
}
else {
if(($filePath = upload($_FILES,$fileDir)) !== FALSE) {
$query = ("INSERT INTO img VALUES(NULL,'".$filePath."',)");
$q2 = @mysql_query($query);
if($q2) { echo 'Изображение добавлено'; }
}
else{echo 'Ошибка';}
}
?>
Давай разберем.
У тебя идет - соединение с БД.
Далее проверка, если параметр do пустой, то выводим форму, иначе, делаем загрузку.
Ну а какого фига у тебя в форме написано тогда: ?action=new
Будь аккуратнее в будущем ;)