<?php
if(!isset($_GET['author']))
{
die("Вы не можете загружать файлы, т.к. поле автора пустое");
}
else if ($_GET['author'] != $_COOKIE['user']['login'])
{
die("Произошла ошибка. Данные переданные в данный скрипт не соответствуют данным вашего аккаунта.");
}
else
{
require './data/db.php';
require './classes/snippets.class.php';
$group = $snipet->user_group($_COOKIE['user']['login'], $_COOKIE['user']['password']);
if($group['add_files'] != 1)
{
exit("<p><span style='color: red;'>У вас нет доступа к данному разделу АдминПанели</span></p>" . $add_files['add_files']);
}
$login = $_GET['author'];
if(count($_POST) > 0)
{
echo $snipet->addnews_files($_FILES, $_POST, $login, $_SERVER['DOCUMENT_ROOT']);
}
echo "
<fieldset>
<legend>Форма загрузки</legend>
<form method='post' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='5242880'>
<input type='file' name='upload'/><br />
<input type='submit' name='send' value='Загрузить'>
</form>
</fieldset>
";
$select_files = mysql_query("SELECT `id`, `name`, `size` FROM `files` WHERE `author`='".$login."' AND `activate`='0'") or die(mysql_error());
if(mysql_num_rows($select_files) > 0)
{
echo "
<fieldset>
<legend>Список файлов</legend>";
while($file = mysql_fetch_assoc($select_files))
{
echo "<a href=''>" . $file['name'] . "</a> [".$file['size']." кб]<br />";
}
echo "
</fieldset>
";
}
}
Как вы заметили в нем идет подключение обычного файла db.php и snippets.class.php. Так вот потом там идет запрос функции которая определяет группу пользователя и его привилегии. Далее самое основное
if(count($_POST) > 0)
{
echo $snipet->addnews_files($_FILES, $_POST, $login, $_SERVER['DOCUMENT_ROOT']);
}
Ниже код этой функции
public function addnews_files ($files,$post, $author, $server)
{
if($files['upload']['size'] > $_POST['MAX_FILE_SIZE'])
{
return "Размер файла превышает указанный размер загружаемого файла. Выберите другой файл";
}
else if($files['upload']['error'] == UPLOAD_ERR_PARTIAL)
{
return "Данный файл небыл получен полностью. Произошла какая-то ошибка при загрузке. Вернитесь и попробуйте загрузить файл обратно";
}
else if($files['upload']['error'] == UPLOAD_ERR_NO_FILE)
{
echo "Файл небыл загружен по техническим ошибкам. Попробуйте загрузить файл позже";
}
else
{
$name = $files['upload']['name'];
$size = $files['upload']['size'] / 1024;
$tmp = $files['upload']['tmp_name'];
if(move_uploaded_file($tmp, $server . '/uploads/files/' . $name))
{
$insert_file = mysql_query("INSERT INTO `files` (`name`,`date`,`author`,`size`,`click`) VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')") or die(mysql_error());
if($insert_file == true)
{
return "Файл успешно загружен";
}
else
{
unlink('/uploads/files/' . $name);
return "Произошла неизвестная ошибка. Попробуйте заново";
}
}
else
{
return "Произошла неизвестная ошибка. Попробуйте заново";
}
}
Код, который я привел в самым первым открывается в модальном окне window.open на JavaScript`e и в него передаеться 1 $_GET параметр - это author=Имя_автора. Это на всякий "пожарный"
Так вот как только я выбираю файл в форме и нажимаю Загрузить страничка как положено обновляется и над формой загрузки должен быть выдать результат загрузки. Мне выдает Файл успешно загружен. Когда я проверяю БазуДанных там пусто, и папка где должен был сохраниться файл пуста. Почему??? Ведь мне выдало Файл успешно загружен. А это сообщение будет выдано если файл будет загружен а далее добавлен в БазуДанных, но не там ни там его нет. Почему??? :blink:
Спустя 6 минут, 23 секунды (7.07.2012 - 14:57) DarkLynx написал(а):
Я так понял это не весь код.. Или где
$snipet = new ClassName
$snipet = new ClassName
Спустя 2 минуты, 9 секунд (7.07.2012 - 14:59) Shkiper написал(а):
DarkLynx извините забыл дописать. Функция addnews_files содержиться в классе snippets. И в самом конце файла snippets.class.php идет переменная:
спасибо за замечание :rolleyes:
$snipet = new snippets;
спасибо за замечание :rolleyes:
Спустя 14 минут, 15 секунд (7.07.2012 - 15:13) DarkLynx написал(а):
Честно говоря, пока ошибку не нашел.
Нашел другую ошибку.. Вы используете
в условии, хотя эти данные записаны в переменную
И так на будущее, если вы в функции делаете return. Она прекращает дальнейшее выполнение, по этому не имеет смысл в функции писать столько if elseif
Нашел другую ошибку.. Вы используете
$_POST['MAX_FILE_SIZE']
в условии, хотя эти данные записаны в переменную
$post
И так на будущее, если вы в функции делаете return. Она прекращает дальнейшее выполнение, по этому не имеет смысл в функции писать столько if elseif
Спустя 4 минуты, 24 секунды (7.07.2012 - 15:18) Shkiper написал(а):
Цитата |
И так на будущее, если вы в функции делаете return. Она прекращает дальнейшее выполнение, по этому не имеет смысл в функции писать столько if elseif |
а что вы советуете???
Спустя 2 минуты (7.07.2012 - 15:20) Ramzil_Nixon написал(а):
$insert_file = mysql_query("INSERT INTO `files` (`name`,`date`,`author`,`size`,`click`) VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')") or die(mysql_error());
mysql_query("INSERT INTO `files` SET `name` = '".$login."', `size` = '".$size."'") or die(mysql_error());
Попробуй так, давай удачи. И Еще один совет. Не надо дергать столбцы просто так если их не используешь..
Спустя 5 минут, 10 секунд (7.07.2012 - 15:25) DarkLynx написал(а):
Цитата (Ramzil_Nixon @ 7.07.2012 - 12:20) |
$insert_file = mysql_query("INSERT INTO `files` (`name`,`date`,`author`,`size`,`click`) VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')") or die(mysql_error()); mysql_query("INSERT INTO `files` SET `name` = '".$login."', `size` = '".$size."'") or die(mysql_error()); Попробуй так, давай удачи. И Еще один совет. Не надо дергать столбцы просто так если их не используешь.. |
Что за неизвестная конструкция
INSERT INTO SET
??
Дайте ссылку где такое прочитали
Спустя 34 секунды (7.07.2012 - 15:25) Shkiper написал(а):
Ramzil_Nixon
Цитата |
mysql_query("INSERT INTO `files` SET `name` = '".$login."', `size` = '".$size."'") or die(mysql_error()); |
Вы ошибаетесь. Данный метод использует не в INSERT INTO а в UPDATE(прочтите мануал).
Цитата |
Не надо дергать столбцы просто так если их не используешь.. |
Где вы видите данную неувязку???
Спустя 4 минуты, 8 секунд (7.07.2012 - 15:30) Ramzil_Nixon написал(а):
Цитата (Shkiper @ 7.07.2012 - 12:25) |
Вы ошибаетесь. Данный метод использует не в INSERT INTO а в UPDATE(прочтите мануал). |
Цитата |
Данный метод использует не в INSERT INTO а в UPDATE |
В INSERT INTO тоже есть такой метод
Давай ты меня еще и учить будешь!?
Рекомендую тебе прочитать очень-очень внимательно!!!
Цитата (Shkiper @ 7.07.2012 - 12:25) |
Где вы видите данную неувязку??? |
$insert_file = mysql_query("INSERT INTO `files` (`name`,`date`,`author`,`size`,`click`) VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')") or die(mysql_error());
Вот смотри, я тебе покажу неувязку: дергает все стоблцы, а записывает всего 3 данные!
Ну а теперь сделай вывод, кто тут НЕПРАВ?
Спустя 8 минут, 57 секунд (7.07.2012 - 15:39) Shkiper написал(а):
Ramzil_Nixon там что-то не то. Спросите у twin`a. Почитайте мануал. И мануал на ирбисе то же самое скажет. Попробуйте то что вы написали у себя протестить. И результат мне покажите.
Цитата | ||
Вот смотри, я тебе покажу неувязку: дергает все стоблцы, а записывает всего 3 данные! Ну а теперь сделай вывод, кто тут НЕПРАВ? |
Где вы видете что я записываю всего 3????
Я задействую 5 таблиц
Цитата |
(`name`,`date`,`author`,`size`,`click`) |
и пять вставляю
Цитата |
'".$name."','".date("Y-m-d")."','".$login."','".$size."','0' |
где вам 3 показалось???
Спустя 1 минута, 50 секунд (7.07.2012 - 15:40) Ramzil_Nixon написал(а):
Цитата (Shkiper @ 7.07.2012 - 12:39) |
Попробуйте то что вы написали у себя протестить. И результат мне покажите. |
Я с этим месяцем уже год работаю, кстати тебе тоже рекомендую. Прекрасно работает и все понятно
Спустя 9 минут, 49 секунд (7.07.2012 - 15:50) Shkiper написал(а):
Впервые вижу такой метод и не верю что он работает. Но если так на ирбисе написано, то может и работает, хотя у меня остались большие сомнения.
Цитата |
Где вы видете что я записываю всего 3???? Я задействую 5 таблиц Цитата (`name`,`date`,`author`,`size`,`click`) и пять вставляю Цитата '".$name."','".date("Y-m-d")."','".$login."','".$size."','0' где вам 3 показалось??? |
вопрос остался не решенным.
Спустя 6 минут, 38 секунд (7.07.2012 - 15:57) Ramzil_Nixon написал(а):
Цитата (Shkiper @ 7.07.2012 - 12:50) |
Впервые вижу такой метод и не верю что он работает. Но если так на ирбисе написано, то может и работает, хотя у меня остались большие сомнения. |
Ты пробовай прежде чем осуждать! Потом мне спасибо даже скажешь!
Спустя 6 минут, 19 секунд (7.07.2012 - 16:03) Shkiper написал(а):
Цитата |
Ты пробовай прежде чем осуждать! Потом мне спасибо даже скажешь! |
Я не видел ни где такого кода ранее и все нормальные программисты пишут так как я написал(это не намек что вы не нормальный). На счет спасибо, не уверен. даже если он и работает отличий, кроме написания кода - не вижу.
Спустя 3 минуты, 25 секунд (7.07.2012 - 16:07) Ramzil_Nixon написал(а):
Цитата (Shkiper @ 7.07.2012 - 13:03) |
все нормальные программисты пишут так как я написал(это не намек что вы не нормальный) |
Понятно. С такими темпами ты очень трудно освоишь PHP. Давай удачи!
Спустя 49 секунд (7.07.2012 - 16:07) Shkiper написал(а):
Я не нуждаюсь в комментировании моих знаний и умений.
Спустя 1 час, 14 минут, 5 секунд (7.07.2012 - 17:21) DarkLynx написал(а):
Shkiper
Вы в базу записываете $login. Но параметр функции куда он поступает - $author.
Вы в базу записываете $login. Но параметр функции куда он поступает - $author.
Спустя 2 минуты, 26 секунд (7.07.2012 - 17:24) DarkLynx написал(а):
Цитата (Ramzil_Nixon @ 7.07.2012 - 12:20) |
$insert_file = mysql_query("INSERT INTO `files` (`name`,`date`,`author`,`size`,`click`) VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')") or die(mysql_error()); mysql_query("INSERT INTO `files` SET `name` = '".$login."', `size` = '".$size."'") or die(mysql_error()); Попробуй так, давай удачи. И Еще один совет. Не надо дергать столбцы просто так если их не используешь.. |
Действительно есть такая конструкция. Не знал.. Но как я понял она годится только для единой вставки данных.
Спустя 4 минуты, 33 секунды (7.07.2012 - 17:28) Ramzil_Nixon написал(а):
Погоди-ка я тут кое-что заметил:
date() в SQL Запрещено!
Сначало:
Потом уж:
VALUES ('".$name."','".date("Y-m-d")."','".$login."','".$size."','0')
date() в SQL Запрещено!
Сначало:
$Date = date("Y-m-d");
Потом уж:
VALUES ('".$name."','".$Date."','".$login."','".$size."','0')
Спустя 35 минут, 45 секунд (7.07.2012 - 18:04) inpost написал(а):
Ramzil_Nixon
Кто тебе сказал, что это SQL ? Это PHP формирует запрос, а уже потом отправляет сформированных. date() - переводит в цифры прежде, чем отправить. $name - тоже переводится в текст прежде, чем отправиться, и уже обычный текст отправляется.
Кто тебе сказал, что это SQL ? Это PHP формирует запрос, а уже потом отправляет сформированных. date() - переводит в цифры прежде, чем отправить. $name - тоже переводится в текст прежде, чем отправиться, и уже обычный текст отправляется.
Спустя 1 час, 57 минут, 54 секунды (7.07.2012 - 20:02) Shkiper написал(а):
DarkLynx ехххоу исправил опечатку и заработало. Но не понимаю что от этого зависело то.
Спустя 25 минут, 50 секунд (7.07.2012 - 20:28) inpost написал(а):
DarkLynx
Удобнее и для единичной вставки. Второй менее удобный, но для множественных.
Удобнее и для единичной вставки. Второй менее удобный, но для множественных.
Спустя 1 час, 19 минут, 41 секунда (7.07.2012 - 21:48) YVSIK написал(а):
Shkiper
INSERT INTO и особенно её вторая часть(VALUES) очень требовательная, да на все, пропустишь или лишний пробел поставишь работать не будет
так на заметку ))
INSERT INTO и особенно её вторая часть(VALUES) очень требовательная, да на все, пропустишь или лишний пробел поставишь работать не будет
так на заметку ))