[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не идет запись в БД
Shkiper
Всем привет. Написал скрипт.
<?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

Спустя 2 минуты, 9 секунд (7.07.2012 - 14:59) Shkiper написал(а):
DarkLynx извините забыл дописать. Функция addnews_files содержиться в классе snippets. И в самом конце файла snippets.class.php идет переменная:

$snipet = new snippets;

спасибо за замечание :rolleyes:

Спустя 14 минут, 15 секунд (7.07.2012 - 15:13) DarkLynx написал(а):
Честно говоря, пока ошибку не нашел.
Нашел другую ошибку.. Вы используете

$_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. Почитайте мануал. И мануал на ирбисе то же самое скажет. Попробуйте то что вы написали у себя протестить. И результат мне покажите.

Цитата
Цитата
$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 данные!

Ну а теперь сделай вывод, кто тут НЕПРАВ?


Где вы видете что я записываю всего 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 написал(а):
Я не нуждаюсь в комментировании моих знаний и умений. rolleyes.gif

Спустя 1 час, 14 минут, 5 секунд (7.07.2012 - 17:21) DarkLynx написал(а):
Shkiper
Вы в базу записываете $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 написал(а):
Погоди-ка я тут кое-что заметил:

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 - тоже переводится в текст прежде, чем отправиться, и уже обычный текст отправляется.

Спустя 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) очень требовательная, да на все, пропустишь или лишний пробел поставишь работать не будет
так на заметку ))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.