|
 280.4 Кб |
|
| Здравствуйте уважаемые посетители и администраторы форума.
Возникла такая проблема.
Делаю сайт на PHP + MySQL, хочу чтобы там можно было скачивать книги. Но при нажатии на "скачать", выводится страница с таким текстом "Rar!" и прочая абракадабра.
Создала 2 файла, который будут отвечать за это действие.
Первый - view_books.php
<?php
include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$new_view = $myrow["view"] + 1;
$update = mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="Description" content="<?php echo $myrow['meta_d']; ?>" />
<meta name="Keywords" content="<?php echo $myrow['meta_k']; ?>" />
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<title><?php echo $myrow['title']; ?></title>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<link href="style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.стиль31 {font-size: 14px}
-->
</style>
</head>
<body>
<table width="1150" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
<!--Подключаем шапку-->
<? include("blocks/header.php"); ?>
<td ><div align="center">
<table width="1150" cellpadding="0" cellspacing="0">
<tr>
<!--левую часть-->
<? include ("blocks/lefttd.php"); ?>
<td width="742" valign="top"><? include ("blocks/form_poisk.php");?> <p>
<?
printf ("
<p class='view_title'>%s</p>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span>
<span class='lesson_add'>Дата добавления: %s</span> <span class='lesson_add'>Просмотров: %s</span>
<span class='lesson_add'>Размер: %s</span>
<span class='lesson_add'>Закачек: %s</span>
<span class='lesson_add'><a style='font-size:12px; color:#cc0000' href='%s'>Скачать: </a></span></p><p class='lesson_left'>%s</p>",$myrow["title"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["link"],$myrow["text"]);
?>
<form action="vote_res_books.php" method="post" name="vv">
<p class="pvot">Поставить оценку: 1 <input name="score" type="radio" value="1" /> 2 <input name="score" type="radio" value="2" /> 3 <input name="score" type="radio" value="3" /> 4 <input name="score" type="radio" value="4" /> 5 <input name="score" type="radio" value="5" checked/>
<input class="sub_vote" name="submit" type="submit" value="Оценить" />
<input name="id" type="hidden" value="<? echo "$id";?>" />
</p>
</form>
<?
echo "<p class='post_comment'>Коммментарии:</p>";
$result3 = mysql_query ("SELECT * FROM comments_books WHERE post='$id'",$db);
if (mysql_num_rows ($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do
{
printf ("<div class='post_div'><p class='post_comment_add'>Комментарий добавил(а): <strong>%s </strong><br> Дата: <strong> %s</strong></p><p class='post_comment_addd'> %s</p></div>",$myrow3["author"], $myrow3["date"], $myrow3["text"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}
$result4 = mysql_query ("SELECT img FROM comments_setting",$db);
$myrow4 = mysql_fetch_array ($result4);
?>
<p class='post_comment'>Добавить Ваш комментарий:</p>
<form action="comment_books.php" method="post" name="form_com">
<p class='post_comment_add'><label>Ваше имя: </label><input name="author" type="text" size="42" maxlength="40" /></p>
<p class='post_comment_add'><label>Текст комментария: <br><textarea name="text" cols="40" rows="4"></textarea></label></p>
<p class='post_comment_add'>Введите сумму чисел с картинки</p>
<p class='post_comment_add' ><img style='margin-top:9px;' src="<? echo $myrow4["img"]; ?>" alt="Финансовая грамотность" width="58" height="31" />
<input style='margin-bottom:10px;' name="pr" type="text" size="5" maxlength="5" /></p>
<input name="id" type="hidden" value="<? echo $id; ?>" />
<p class='post_comment_add' ><input name="sub_com" type="submit" value="Комментировать" /></p>
</form>
</p></td>
<!--Подключаем правую часть-->
<div align="center">
<? include("blocks/pravtd.php"); ?>
</div>
</tr>
</table>
</div></td>
</tr>
<!--Подключаем низ-->
<? include ("blocks/footer.php")?>
</table>
</body>
</html>
|
2-й файл - download.php
<title>Обратно</title>
<?
include ("blocks/bd.php");
if (isset($_POST['score']))
{$score = $_POST['score'];}
if (isset($_POST['id']))
{$id = $_POST['id'];}
$result = mysql_query("SELECT rating,q_vote,zaka,link FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$link = $myrow ['link'];
$new_rating = $myrow['rating'] + $score;
$new_q_vote = $myrow ['q_vote'] + 1;
$new_zaka = $myrow['zaka'] + 1;
$update = mysql_query("UPDATE books SET rating = '$new_rating', q_vote = '$new_q_vote' zaka = '$new_zaka' WHERE id='$id'",$db);
if ($update)
{
echo "<html><head>
<meta http-equiv='Refresh' content='0'; URL='$link'>
</head></html>";
exit();
}
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
|
Также прикрепляю фото заполнения таблицы БД,
Огромнейшая просьба, если кто знает что нужно исправить в коде или в заполнении таблицы, чтобы файл начал скачиваться, подскажите, пожалуйста!!! | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 14:11)
| | У вас прямая ссылка на файл получается, и она верная? И удалите вы этот ужас со страницы - <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 14:27)
| | В базе адрес прописан так:
books/blog.rar
А в адресной строке браузера, при нажатии на ссылку:
http://localhost/phpsite/books/blog.rar | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 14:32)
| | Ну если ссылка эта верная, то у вас должно появиться окно предлагающее скачать файл. Проверьте просто так на локальном сервере: <a href="phpsite/books/blog.rar">download</a> | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 14:35)
| | Вы хотите сказать, что код правильный, да?
А у меня при и нажатии на ссылку открывается страница с таким тестом :
Rar!ПђsіEtЂ‚H]&? *жY§r¬83(Љ Є гбв ®ўЁвм Ў«®Ј.exeПЃђ Ѓ`ѓђПЂ` ‚ђ%ХTМЊС�^8’гmЃ"DK‘K±ШЬѓ•9+"rF r bIЌ"P¤*Є™)A"F"ЏЏb”— |№оKl2ЛlцдМЙ™ff9ielr4Вйќ$Ў’
Это только маленькая часть того чуда, которым заполнена вся страница | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 14:40)
| | Много букв. Скажите, то что Вы пытаетесь скачать находится в базе или это файл? | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 14:42)
| | это файл, заархивированая книга | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 14:46)
| | Может заголовок поможет?
<?
header("Content-type: application/x-rar-compressed");
| Только его нужно в функцию упрятать. | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 14:52)
| | Какую функцию? Файл отдается прямой ссылкой. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 14:56)
| | Ну если не идет прямой, можно криво попробовать...
А .zip не пробовали? | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 14:40)
| | Я не смотрю весь ваш код, там много лишнего, что к вопросу не имеет отношения, а вот если у вас файл на месте, и ссылка верна то будет предложено скачать его. Но такое впечатление, что ваш сервер расширение .rar обрабатывает как исполняемый файл. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 14:49)
| | слушайте, а zip, почему-то открывает. Ура хоть этому)
Так это мне что теперь кучу файлов в zip переархивировать? | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:06)
| | у меня установлен "Денвер3" (Aphach).
А что нужно сделать с ним, чтобы он правильно открывал .rar | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:12)
| | Смешно, я не пользовался этим архивом, а у меня та же история. Попробую докопаться, если найдете - отпишите пожалуйста. | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:12)
| | Добавьте в файл .htaccess строчку, и все будет скачиваться.
Addtype application/x-rar-compressed .rar
|
| |
|
|
|
|
|
|
|
для: Drago
(10.10.2008 в 16:36)
| | И Вам спасибо. Это я уже сделал. А вот сам апач как настроить? На хостинге у меня все работает, неужели тоже чере штакес? По крайней мере в моих ничего подобного нету... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 17:04)
| | Нужно добавить в файл mime.types строку
application/x-rar-compressed rar
|
| |
|
|
|
|
|
|
|
для: Drago
(10.10.2008 в 18:59)
| | Так я же написал выше, что не хочет он это кушать... Может в Денвере какие то особенности... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 19:08)
| | Видимо что-то в самом Денвере, либо еще что-то необходимо, так как добавление типов в конфиг и миме в Денвере ничего не дает. | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 19:08)
| | А может, апач нужно перезагрузить? | |
|
|
|
|
|
|
|
для: Drago
(10.10.2008 в 19:25)
| | Не поможет :) | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 19:26)
| | Почему же? | |
|
|
|
|
|
|
|
для: Drago
(10.10.2008 в 19:45)
| | Не знаю :) У меня (да как я понимаю и у автора) в Денвере это не работает. Может Денвера сборка у меня такая, есть в ней некоторые вещи кроме этого, которые тоже не работают. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 19:47)
| | Странно, потому что на моем денвере все заработало после того, как я добавил строку в файл mime.types и перезагрузил денвер. | |
|
|
|
|
|
|
|
для: Drago
(10.10.2008 в 19:53)
| | Ну значит проблемы в модуле Апач есть в моей сборке. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 20:03)
| | Вот, у меня так заработало:
application/octet-stream bin dms lha lzh exe class rar r00 r01 r02 r03
|
| |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 20:16)
| | Пробовал - не хочет. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 20:42)
| | Ну дык переставьте Денвер, дело недолгое. Видимо у Вас версия битая, я видел, что проблемы и в других местах... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 21:05)
| | Зато в других местах работает, переставим, придет еще время ;-) | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:06)
| | Ой нет, при rar-архиве будет переход на страницу и вывод этого файла в окно (если запрос с сервера). Его можно только забрать как объект. | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:06)
| | Можно отдавать файл не по прямой ссылке, а через скрипт. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 15:23)
| | doc, xls - сохраняются, djvu - открываются.
а что делать таки с rar, где скрипт подсмотреть? | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:32)
| | Вы сильно не переживайте, на хостинге наверняка все правильно настроено. А я все равно докопаюсь.
Странно, апач application/x-rar-compressed rar кушать не хочет, может что не так?
пойду на форум про апач... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 15:42)
| | спасибо за участие) | |
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:47)
| | Вот пока, чтоб не стопориться, в начало Вашего скрипта пропишите это:
<?
if(isset($_GET['p']))$p = $_GET['p'];else $p = null;
if($p){
header("Content-type: application/x-rar-compressed");
echo file_get_contents($p);
exit();
}
?>
| а ссылку сделайте так:
<?
"<a style='font-size:12px; color:#cc0000' href='?p=".$myrow['link']."'>Скачать: </a>"
| а потом уберете.
В принципе, можно скрипт не останавливать, если других заголовков нет. Или сессий... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 15:55)
| | И добавить:
<?
header("Content-Length: ".filesize("Имя файла"));
header("Content-Disposition: attachment; filename=Имя файла");
header("Content-type: application/rar");
fpassthru($f);
|
| |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 16:03)
| | Спасибо, но проблема не в том. Проблема - как апач настроить, чтоб он rar не исполнял... | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 16:29)
| | По идее, нужно добавить в конфиг Апач: AddType application/x-rar-compressed .rar
Но не работает, у меня по крайней мере, попробуйте у себя. | |
|
|
|
|
|
|
|
для: Николай2357
(10.10.2008 в 15:42)
| | Расширение rar вообще не значится среди типов в Апач. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 15:58)
| | Вот вот. А как тогда? | |
|
|
|
|
|
|
|
|
для: hitball
(10.10.2008 в 15:32)
| | Я вам давал ссылку - как отдавать файл на скачивание через скрипт, а не по прямой ссылке. | |
|
|
|
|
|
|
|
для: sim5
(10.10.2008 в 15:52)
| | Николай2357 и sim5, спасибо Вам огромное за советы, но я наврядли пока разберусь со всеми этими кодами (в голове - целина непаханая), так, что пока просто поменяю во всех файлах расширение с rar на zip. Грустно конечно.
Но теперь нашла еще одну ошибку: не работает счетчик закачек.
Это переделаный 2-й файл - download.php
<title>Обратно</title>
<?
include ("blocks/bd.php");
if (isset($_POST['id']))
{$id = $_POST['id'];}
else {
exit('Вы ошиблись при наборе адреса странички');
}
$result = mysql_query("SELECT zaka,link FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$link = $myrow ['link'];
$zaka = $myrow ['zaka'];
$new_zaka = $myrow ['zaka'] + 1;
$update = mysql_query("UPDATE books SET zaka = '$new_zaka' WHERE id='$id'",$db);
if ($update)
{
echo "<html><head>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$link'>
</head></html>";
exit();
}
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
|
В коде:
zaka - это колечество закачек.
Мне кажется где-то в первом файле (приведен первым наверху) - view_books.php,
я пропустила место где указывается ссылка на файл download.php и подскажите пожалуйста, как ее правильно оформить. | |
|
|
|
|
 2.8 Кб |
|
|
для: hitball
(10.10.2008 в 22:23)
| | Вот, не мучайтесь. Не надо менять расширение. ===================================================================>
Все будет работать. Сейчас гляну, что там с закачками.
Ну вот так попробуйте. Я не тестировал правда, слишком муторно. Если не пойдет, выкладывайте всё, вместе с SQL, я поставлю и попробую разобраться. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 02:17)
| | Вы так и оставили свой код скачивания, ну а что будет сохранять пользователем у себя в таком случае? Ну это ведь не так лучше, как и переименовать rar в zip. | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 05:59)
| | Доброе утро)
Не поняла ваш вопрос.>Вы так и оставили свой код скачивания, ну а что будет сохранять пользователем у себя в таком случае? Ну это ведь не так лучше, как и переименовать rar в zip. | |
|
|
|
|
 2.9 Кб |
|
|
для: hitball
(11.10.2008 в 09:30)
| | 1. Найдите файл mime.types Он находится по адресу Z:\usr\local\apache\conf
2. Откройте его в редакторе.
3. Найдите строчку application/octet-stream bin dms lha lzh exe class so dll dmg
4. Замените ее на application/octet-stream bin dms lha lzh exe class so dll dmg rar r00 r01 r02 r03
5. Сохраните файл.
6. Перезапустите Денвер.
Теперь у Вас rar файлы должнны обрабатываться корректно.
Ну а вот это уже конечный вариант, правда повторюсь - не тестировал. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 09:56)
| | спасибо за разжеваный материал)))
Но не помогло | |
|
|
|
|
 2.9 Кб |
|
|
для: hitball
(11.10.2008 в 10:12)
| | Странно, и очень жаль.
Ну тогда так. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 10:22)
| | в первом варианте вообще при нажатии на скачать не появляется окно скачивания, а второй не открывается ваш зиповский документ (пишет на всю страницу кракозяблики).) | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 10:31)
| | Все, терпение лопнуло. Давайте все в аттач. Вместе с SQL. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 10:34)
| | только не смейтесь!
я не знаю что такое аттач | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 10:37)
| | Аттач, это файл прикрепленный. От слова attach (прикреплять).
А SQL знаете как сделать? | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 10:42)
| | Нет, спасибо за то, что возитесь со мной | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 10:45)
| | Благодарить будете, когда все заработает, а так может зря...
Что бы сделать .sql файл Вашей базы, в PHPmyadmin выбирете базу и нажмите сверху ссылку "экспорт" Потом внизу "пошел" по моему. Сохраните в крневую деррикторию сайта. Зазипуйте весь сайт и в студию(в аттач). Будем просить помощь зала.
PS Забыл, нужно еще поставить галочку, там где предлагается zip сделать... | |
|
|
|
|
 5.9 Кб |
|
|
для: Николай2357
(11.10.2008 в 10:51)
| | Вроде бы так | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 10:57)
| | Не. я так до второго пришествия не разберусь. Весь сайт надо, с шапками, формами и т.д. | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 09:30)
| | Если вы сделаете так как предлагал Николай2357, то у пользователя файл будет сохраняться под именем download.php (по имени вашего скрипта обработчика), а также пользователь не будет видеть размер файла. Все это от того, что не передаются все необходимые заголовки. Делайте так, для отдачи файла пользователю скриптом:
<?
//это проверка запроса, что ранее и предлагал вам Николай2357
$p = isset($_GET['p']) ? trim($_GET['p']) : = null;
//если запрос пришел
if($p) {
//получаем путь и имя файла
$fp = "./path/".$p; //где path ваш путь к файлу
//читаем файл
$f = fopen($fp, 'rb');
//передаем заголовки:
//размер файла
header("Content-Length: ".filesize($p));
//имя файла
header("Content-Disposition: attachment; filename=$p");
//тип файла
header("Content-type: application/rar");
//выводим файл пользователю
fpassthru($f);
exit();
}
?>
|
Теперь проверьте, и в окне загрузки посмотрите разницу, что было "до" и что "теперь" ) | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 11:05)
| | Да я переделал уже, все равно что то не так. | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 11:05)
| | . | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 11:21)
| | А, ну я вчера (это у меня означает сегодня. но рано утром:) смотрел, когда еще было на то, на это и ответил ;-) | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 05:59)
| | Извиняюсь, меня не совсем так поняли. Нужно было поподробнее.
Я имел ввиду временный вариант, что бы проверить. А когда на хостинг, это убрать и отдавать файл по прямой ссылке. Попробую по полочкам тогда. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 09:41)
| | УРРРРРРРРРРРРРРРРРРРААААААААААААА!!!!
rar скачался!!!
какое счастье!!!!
Сделала как в примере Николая и все получилось))) (Поменяла ссылку и вставила код наверху)
Огромное человеческое СПАСИБИЩЕ!!! | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:20)
| | Блин, а счетчик закачек так и не работает | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:22)
| | SET zaka = '$new_zaka' - у вас что поле zaka имеет строковый тип? | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 11:25)
| | тип поля int | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:33)
| | Залейте всё сюда, так проще разобраться, когда тестировать можно. Давно бы все работало. | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:33)
| | Тогда нет необходимости поступать так как это делаете вы - извлекаете значение поля закачек, добавляете к нему единицу и записываете опять в базу. Это можно сделать непосредственно в запросе:
<?
mysql_query("UPDATE books SET zaka = zaka+1 WHERE id='$id'",$db);
|
Без всякого предварительного извлечения этого значения из базы. Если у вас не происходит обновление, то проверьте, получаете ли вы перменную $id, то есть, есть ли она у вас в строке запроса.
Но заметьте - тогда, если ID у вас есть в строке запроса, то нет смысла выставлять имя файла для скачавния в строку запроса, достаточно этого ID. Вы ведь все равно получаете путь/имя к файлу, а значит это уже 50% для того, чтобы отказаться от скачавания по прямой ссылке - сделайте ее на 100% скриптом, и удалите имя файла из строки запроса как параметр. Кстати, в таблице желательно иметь только имя файла, а вот путь к нему, лучше держать в файле конфигурации или таблице конфигурации. | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 11:43)
| | сделала как вы сказали, но мне кажется где-то в первом файле (приведен первым наверху) - view_books.php, я пропустила место где указывается ссылка на файл download.php и в этом ошибка, наверное. | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:53)
| | Сейчас трудно судить, что на данный момент у вас в ссылке есть, с учетом того, что вам предлагал Николай, и что вы могли изменить. Но, ваша ссылка, должна иметь в конечном итоге вид, типа:
<a href="paht/download.php?vars...">Скачать: </a>
|
где vars..., это список параметров. Для того чтобы обновить счетчик скачиваний, вам нужно передать номер id записи, а также, если вы по прямой ссылке отдаете файл, или скриптом, но по имени файла, передать имя этого файла. Значит у вас доложно выглядеть примерно так:
<a href="paht/download.php?id=15&p=name.rar">Скачать: </a>
|
Вот тут вам нужно решить - либо так и оставить, либо удалить из запроса p=name.rar, и все определять по id=номер. Другими словами - вы производите лишнюю операцию.
PS. Уберите все стили определенные в тегах, укажите элементам классы, и перенесите все стили в CSS файл, это вам облегчит "жизнь верстальщика" и разгрузит код страницы. К тому же, избавитесь от бесчисленных в коде - все это можно решить стилями. | |
|
|
|
|
 2.8 Кб |
|
|
для: hitball
(11.10.2008 в 11:53)
| | A зачем как наверху, я же Вам поправил. Только проверить не смог.
<?
printf ("
<p class='view_title'>%s</p>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span>
<span class='lesson_add'>Дата добавления: %s</span> <span class='lesson_add'>Просмотров: %s</span>
<span class='lesson_add'>Размер: %s</span>
<span class='lesson_add'>Закачек: %s</span>
<span class='lesson_add'><a style='font-size:12px; color:#cc0000' href='download.php?id=%s'>Скачать: </a></span></p><p class='lesson_left'>%s</p>",$myrow["title"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["id"],$myrow["text"]);
?>
| И donload.php тоже. Вот так попробуйте.(аттач)
Только не понятно, зачем $_POST['score']... Количество закачек будет изменяться, если оцкнку нажать. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 12:29)
| | А как оценка с количеством закачек связана? :) Пользователь может скачать сегодня, а оценить завтра, или вообще не дать оценку. "Развязать" надо это дело ) | |
|
|
|
|
|
|
|
для: sim5
(11.10.2008 в 12:32)
| | Отлучюсь на пару часов, приеду - буду разгребать | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 11:53)
| | Там все гораздо прозаичней, можно и не закачивать ничего, просто оценку нажать и будет +1.
Вот в начало download.php добавьте это:
<?
if (isset($_POST['submit']))$submit = 1;else $$submit = null;
| а ниже вот так:
<?
if(!$submit)$zaka = ", zaka = zaka+1";
$update = mysql_query("UPDATE books SET rating = '$new_rating', q_vote = q_vote+1 $zaka WHERE id='$id'",$db);
| и будет щастье. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 12:51)
| | Переделаный файл download.php выглядит так, но счетчик закачек все равно не считает. А поле $_POST['score'] - это, уж извените меня за невнимательность, относится к другому файлу, который я создавала из этого, тот файл отвечает за рейтинг книги и количество проголосовавших.
В новом варианте я его удалила.
<title>Обратно</title>
<?
include ("blocks/bd.php");
<?
//это проверка запроса, что ранее и предлагал вам Николай2357
$p = isset($_GET['p']) ? trim($_GET['p']) : = null;
//если запрос пришел
if($p) {
//получаем путь и имя файла
$fp = "./path/".$p; //где path ваш путь к файлу
//читаем файл
$f = fopen($fp, 'rb');
//передаем заголовки:
//размер файла
header("Content-Length: ".filesize($p));
//имя файла
header("Content-Disposition: attachment; filename=$p");
//тип файла
header("Content-type: application/rar");
//выводим файл пользователю
fpassthru($f);
exit();
}
if (isset($_POST['submit']))
$submit = 1;
else $$submit = null;
if (isset($_POST['id']))
{$id = $_POST['id'];}
else {
exit('Вы ошиблись при наборе адреса странички');
}
$result = mysql_query("UPDATE books SET link, zaka = zaka+1 WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$link = $myrow ['link'];
if(!$submit)
$zaka = ", zaka = zaka+1";
$update = mysql_query("UPDATE books $zaka WHERE id='$id'",$db);
if ($update)
{
echo "<html><head>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$link'>
</head></html>";
exit();
}
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
|
| |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 18:54)
| | Ну подумайте сами. Обращение к этой странице просиходит только тогда, когда пользователь будет делать запрос на скачивание файла, а это в свою очередь присходит по ссылке, то есть GET запросом. От куда в это время взяться POST запросу, по которому вы определяете закачку? Получается, что вот это:
if (isset($_POST['submit']))
$submit = 1;
else $$submit = null;
if (isset($_POST['id']))
{$id = $_POST['id'];}
else {
exit('Вы ошиблись при наборе адреса странички');
}
$result = mysql_query("UPDATE books SET link, zaka = zaka+1 WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$link = $myrow ['link'];
if(!$submit)
$zaka = ", zaka = zaka+1";
у вас лишнее на странице. Просто вам надо в url тега А, по которому идет запрос файла на скачивание, добавить этот GET параметр, например pid=номер_записи_из_базы.
Тогда сразу после скачивания в запросе на оновление счетчика:
$update = mysql_query("UPDATE books SET zaka = zaka+1 WHERE id=".intval($_GET['pid]),$db);
Я ведь об этом вам еще ранее говорил. И в записи:
$fp = "./path/".$p; //где path ваш путь к файлу
path - это как пример, вы должны заменить это на ваш реальный адрес. Вы получаете путь и адрес из базы как я понимаю, значит лучше бы было брать тогда его, а имя получать из него как basename(тут ваш путь из таблицы), и тогда имя файла в ссылку можно было не втсалять, а работать по ID. Впрочем это я опять по кругу пошел :) | |
|
|
|
|
|
|
|
для: hitball
(11.10.2008 в 18:54)
| | Вот не слушает меня упрямь человек. Ну я же сделал все, там работать должно на ура. И файла два не надо на рейтинги и закачки. Я же вот это написал,
<?$update = mysql_query("UPDATE books SET rating = '$new_rating', q_vote = q_vote+1 $zaka WHERE id='$id'",$db); а
| Вы кастрировали. И sсore оставьте на месте. Этот файл и то и другое сделает. И не трогайте (int) а то поломают Ваш сайт хацкеры к чертовой бабушке.
Вот в общем, так примерно:
<?
include ("blocks/bd.php");
if (isset($_POST['score']))
$score = (int)$_POST['score'];else $score = null;
if (isset($_POST['id']))$id = (int)$_POST['id']; elseif (isset($_GET['id'])) $id =(int)$_GET['id']; else $id = null;
if (isset($_POST['submit']))$submit = 1;else $submit = null;
$result = mysql_query("SELECT rating,q_vote,zaka,link FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$link = $myrow ['link'];
$new_rating = $myrow['rating'] + $score;
if($submit)$zaka = "rating = '$new_rating', q_vote = q_vote+1"; else $zaka = " zaka = zaka+1";
$update = mysql_query("UPDATE books SET $zaka WHERE id='$id'",$db);
if ($update && !$submit)
{
// Вот сюда можете поставить вариамт от sim5, хотя и этот работает
header("Content-type: application/x-rar-compressed");
header("Content-Length: ".filesize($link);
header("Content-Disposition: attachment; filename=$link");
header("Content-type: application/rar");
echo file_get_contents($link);
exit();
}elseif($update){
header("Location: view_books.php");
}
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
|
PS Да, кстати, форму оценки в view_books.php переделайте так:
<form action="download.php" method="post" name="vv">
| и файл vote_res_books.php совсем Вам не нужен будет. | |
|
|
|
|
|
|
|
для: Николай2357
(11.10.2008 в 20:27)
| | Это снова я.
Хочу поблагодарить за Ваше время потраченное на решение моих проблем. Все заработало. Спасибо профессионалам за советы, без Вас бы не справилась так быстро, если бы вообще справилась.
Все прекрастно - счетчик заработал, скачивание идет, но скачивание файлов возможно только с моего сайта, с данной папки (books).
А хотелось бы, чтобы скачивание шло еще и при ссылке на rapide или другой файлообменник.
Когда же нажимаю на скачивание с подобной ссылкой, то скачиваться начинает файл с именем download.rar, которого нет и в помине. Подскажите, пожалуйста, этот последний момент. | |
|
|
|
|
|
|
|
для: hitball
(12.10.2008 в 13:14)
| | >Спасибо профессионалам за советы,
Ну мне еще до профессионала.... огого! :)))
>А хотелось бы, чтобы скачивание шло еще и при ссылке на rapide или другой файлообменник.
Когда же нажимаю на скачивание с подобной ссылкой, то скачиваться начинает файл с именем download.rar,
Вот это место поподроюнее. Как я понял, у Вас в базе ссылки не только на Ваши файлы? | |
|
|
|
|
|
|
|
для: Николай2357
(12.10.2008 в 13:31)
| | ну да, надо было сразу это сказать, да?
И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка. | |
|
|
|
|
|
|
|
для: hitball
(12.10.2008 в 13:32)
| | А ссылки на Ваши файлы относительные или абсолютные? (http:// в них есть?) :)))
>И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка.
и вот это место поподробней, что за вторая статья? | |
|
|
|
|
|
|
|
для: Николай2357
(12.10.2008 в 14:03)
| | 1. http - есть.
2. >>И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка.
У меня 2 статьи (пока:)).
Когда я нажимаю на оценить вторую статью, вылазит страница с первой статьей и не ставится оценка.
А при оценке первой - все правильно и оценка ставится. | |
|
|
|
|
|
|
|
для: hitball
(12.10.2008 в 14:07)
| | >1. http - есть.
Это хуже.
Тут два варианта. Либо отдавать файлы всё таки прямой ссылкой, тогда Вам нужно сервер до ума довести. Либо писать в базу свои файлы без http://, то есть относительный путь,
допустим так: books/vash_fail.rar
Тогда я напишу вариант.
А про статьи не понятно. Давайте подробнее. Что за статьи и откуда беруться. Может там опять камень подводный... | |
|
|
|
|
|
|
|
для: Николай2357
(12.10.2008 в 14:23)
| | Это у меня уже конвульсии начались, я имею ввиду не статьи, а все те же книги и те же файлы.
А файлы с рапиды скачивались при моем самом первом варианте кодов, но только они и скачивались). А если не попрямой ссылке, то это много переделок будет? | |
|
|
|
|
|
|
|
для: hitball
(12.10.2008 в 14:39)
| | Не расстраивайтесь, бывает хуже.
Ничего сложного нет, и даже так будет правильней, но у Вас работать не будет, так как сервер вы домашний не настроили..
Вот это место:
<?
// Вот сюда можете поставить вариамт от sim5, хотя и этот работает
header("Content-type: application/x-rar-compressed");
header("Content-Length: ".filesize($link);
header("Content-Disposition: attachment; filename=$link");
header("Content-type: application/rar");
echo file_get_contents($link);
| замените на это;
<?
header("Location: $link");
| и все будет хокей. Вы оставьте пока первый вариант, а когда на хостинг будете заливать, поставьте это.
А со "статьями" дошло наконец то. Моё упущение. Сделайте так:
<?
elseif($update){
header("Location: view_books.php?id=".$id);
|
| |
|
|
|
|
|
|
|
для: Николай2357
(12.10.2008 в 15:23)
| | Нет, ну вы точно гениальный!!!
Все заработало: "статьи" не прыгают, оценка ставится, а самое главное - идет закачка с рапиды!!!
СПАСИБИЩЕ!!! ОГРОМНОЕ, бесконечно большущее СПАСИБИЩЕ!!! | |
|
|
|
|
|
|
|
для: hitball
(12.10.2008 в 16:26)
| | Приятно нубу слышать такие слова. Обращайтесь :))) | |
|
|
|
|
|
|
|
для: Николай2357
(12.10.2008 в 16:48)
| | Это Вам спасибо! | |
|
|
|