Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: почему-то не работает UPDATE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
SofiaKit
Отправлено: 16 Июля, 2011 - 21:58:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




не увеличивается счетчик скачивания файлов, не могу понять почему, вроде все верно.

Вот смотрите:

имеется ссылка в документе
PHP:
скопировать код в буфер обмена
  1. <? echo "<a href=\"files/download.php?id=".$row['files_id']."\">Скачать</a>";?>


в качестве $row['files_id'] возьмем к примеру 1, далее есть документ с именем
download.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("bd.php");
  3. if ( !isset( $_GET['id'] ) ) {
  4.   // если не передан ID файла
  5.   header ("HTTP/1.0 404 Not Found");
  6.   die();
  7. }
  8. $id = (int)$_GET['id'];
  9. if ( $id < 1 ) {
  10.   header ("HTTP/1.0 404 Not Found");
  11.   die();
  12. }
  13. // Узнаем имя файла для скачивания
  14. $query = "SELECT files_name FROM files WHERE files_id=".$id;
  15. $res = mysql_query( $query );
  16. if ( mysql_num_rows( $res ) == 0 ) {
  17.   header ("HTTP/1.0 404 Not Found");
  18.   die();
  19. }
  20. $filename = mysql_result( $res, 0, 0 );
  21. // если файла нет
  22. if (!file_exists($filename)) {
  23.   header ("HTTP/1.0 404 Not Found");
  24.   die();
  25. }
  26. // сообщаем размер файла
  27. header( 'Content-Length: '.filesize($filename) );
  28. // дата модификации файла для кеширования
  29. header( 'Last-Modified: '.date("D, d M Y H:i:s T", filemtime($filename)) );
  30. // сообщаем тип данных - zip-архив
  31. header('Content-type: application/zip');
  32. // файл будет получен с именем $filename
  33. header('Content-Disposition: attachment; filename="'.$filename.'"');
  34. // начинаем передачу содержимого файла
  35. readfile($filename);
  36. // Увеличиваем счетчик количества закачек
  37. mysql_query( "UPDATE files_download SET files_download=files_download+1 WHERE files_id='$id'" );
  38. ?>


в БД столбец files_download имеет значение int(64) по умолчанию 0, файл при запросе скачивается, но 0 не увеличивается на 1 Не понял , а в коде вроде все верно. Почему-же не Апдейтится?
 
 Top
EuGen Администратор
Отправлено: 16 Июля, 2011 - 22:08:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Попробую "телепатически" - сделайте так:
UPDATE files_download SET files_download.files_download=files_download.files_download+1 WHERE files_download.file_id='$id'

А вообще, посмотрите вывод mysql_error() после Вашего запроса UPDATE


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
PATCH
Отправлено: 16 Июля, 2011 - 22:12:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




PHP:
скопировать код в буфер обмена
  1. $query = ("SELECT files_download FROM files_download WHERE files_id='$id'");
  2. $row = mysql_fetch_array ($query);
  3. $new_count = $row['files_download']+1;
  4.  
  5. mysql_query( "UPDATE files_download SET files_download='$new_count'  WHERE files_id='$id'" );




PHP:
скопировать код в буфер обмена
  1. mysql_query( "UPDATE files_download SET files_download=files_download+1 WHERE files_id='$id'" );

я непонел как мы можем складывать сумму+1 не вытащив с базы ету сумму Не понял

хотя если нам в базе надо тупо изменить 0 на 1 то можно так

PHP:
скопировать код в буфер обмена
  1. mysql_query( "UPDATE files_download SET files_download='1' WHERE files_id='$id'" );

(Отредактировано автором: 16 Июля, 2011 - 22:15:30)

 
 Top
Slavenin
Отправлено: 16 Июля, 2011 - 22:48:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




PHP:
скопировать код в буфер обмена
  1. $sql = "UPDATE files_download SET files_download=((select files_download from files_download  WHERE files_id='$id') +1) WHERE files_id='$id'"


но это на мой взгляд извращение Закатив глазки правильнее будет как советует PATCH Улыбка
 
 Top
PATCH
Отправлено: 16 Июля, 2011 - 22:58:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




хм запрос в запросе прикольно)
 
 Top
SofiaKit
Отправлено: 16 Июля, 2011 - 23:01:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




EuGen дело в том, что по вашему примеру я якобы буду склеивать 2 таблицы, даже если и склею, я содержимое не увижу.
PATCH на сколько я знаю, неважно какая сумма там стоит, 0, или 500, UPDATE меняет значение, если +1 необходимо, то должно плюсовать, зачем вычитать чтоб прибавить? не поняла ваше мышление.
Slavenin а разве нельзя ипользовать UPDATE без выборки? вчера еще можно было Не понял
 
 Top
EuGen Администратор
Отправлено: 16 Июля, 2011 - 23:03:52
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SofiaKit пишет:
EuGen дело в том, что по вашему примеру я якобы буду склеивать 2 таблицы

Это еще почему? Я написал запрос, отделив имя таблицы от имени поля так, чтобы было понятнее. Вообще лучше не задавать их одинаковыми - путаница может возникнуть или ошибки в ряде случаев.
Все же посмотрите mysql_error() что сообщает.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
PATCH
Отправлено: 16 Июля, 2011 - 23:05:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




она не совсем четко изложила мысль если нам надо чтобы в таблицы было значение вместо 0 было 1 то делаем простой запрос как я описал в конце своего поста если нам надо с плюсовать то откудо нам знать что там в этой таблицы плюсоватЬ? без выборки? и где я что вычитал пояснитика Оо. честно я знаю базово SQL запросы но как я описал должно работать и не где я не вычитал))
если все таки этот код типо рабочий то походу должно быть так я лично хЗ) такими запросами не занимался)

mysql_query( "UPDATE files_download SET files_download='files_download+1' WHERE files_id='$id'" );

(Отредактировано автором: 16 Июля, 2011 - 23:13:33)

 
 Top
Slavenin
Отправлено: 16 Июля, 2011 - 23:11:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




а mysql на это
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `mmvb`.`dataT` SET `DECIMALS` = (`DECIMALS` + 1) WHERE `dataT`.`ID` =1;
пишет
Цитата:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 WHERE `dataT`.`ID` = 1' at line 1

так что сомневаюсь что это можно было вчера Хм ...

(Отредактировано автором: 16 Июля, 2011 - 23:13:02)

 
 Top
SofiaKit
Отправлено: 16 Июля, 2011 - 23:15:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




в таком случае почему этот пример в оригинале работает http://www[dot]rss[dot]kg/post/3062/

а когда я изменила имя файла и пару названий таблиц, перестало считать? почему там прибавляет, хотя вы утверждаете что ЭТО НЕВОЗМОЖНО Ха-ха , думаю тогда Вам будет интересно почитать про УНИКАЛЬНЫЙ код запроса и UPDATE, для вас будет открытием, я уверенна Радость ну а я.... я дальше искать буду где-же я ошиблась, или может ктонибудь знающий все-же отзовется.
 
 Top
PATCH
Отправлено: 16 Июля, 2011 - 23:21:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




SofiaKit пишет:
в таком случае почему этот пример в оригинале работает http://www[dot]rss[dot]kg/post/3062/

а когда я изменила имя файла и пару названий таблиц, перестало считать? почему там прибавляет, хотя вы утверждаете что ЭТО НЕВОЗМОЖНО , думаю тогда Вам будет интересно почитать про УНИКАЛЬНЫЙ код запроса и UPDATE, для вас будет открытием, я уверенна ну а я.... я дальше искать буду где-же я ошиблась, или может ктонибудь знающий все-же отзовется.

т.е ты копировал все что там есть создавала точно такую же таблицу и проверяла код в оригинале? или на статью полагаешся?)) не 1 комента рабочий он или нет)
п.с а если он типо рабочий проверьте таблицы в бд название что бы соответствовали названиям в коде.

(Отредактировано автором: 16 Июля, 2011 - 23:22:49)

 
 Top
SofiaKit
Отправлено: 16 Июля, 2011 - 23:27:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




PATCH в предыдущем посте я указала что КОД В ОРИГИНАЛЕ РАБОЧИЙ, как же вы програмите, если такой не внимательный, что даже не то что между строчек пропускаете, а вообще не читаете что Вам отвечают Радость , он перестает работать когда я его исправляю под свою таблицу.
 
 Top
Slavenin
Отправлено: 16 Июля, 2011 - 23:29:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




SofiaKit, про синтаксис update я знаю много, судя по всему много больше, чем вы, Язычок приведенный мной пример и ответ сервера, был взят из реальной живой базы, думаю что афтор приведенной вами статьи сам не пробовал выполнить свой запрос... сделайте проще, зайдите в phpMyAdmin ручками напишите запрос на обновление конкретной строки и посмотрите что вам скажет на это сервер... Хм
 
 Top
PATCH
Отправлено: 16 Июля, 2011 - 23:31:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




откудо я могу знатЬ)) мб вы прочитали статью и сказали ОН РАБОЧИЙ)

PHP:
скопировать код в буфер обмена
  1. mysql_query( "UPDATE files_download SET files_download=files_download+1 WHERE id=".$id );
- ровненько по ОРИГИНАЛУ (синтаксис)

а вообще название таблице совпадает со строкой) мб в строке files_download=files_download+1 он воспринимает второй files_download как таблицу м? в оригинале то разные имена таблиц, столбцов..
решение: измените имя столбца или таблицы так что бы они не совпадали


п.с если уж это не поможет) я хз ждите WebgyrY) мб объявитсо кто нитЬ) или же вы всетаки воспользуетесь моим кодом) который читабельный и понятный)

Slavenin пишет:
SofiaKit, про синтаксис update я знаю много, судя по всему много больше, чем вы, приведенный мной пример и ответ сервера, был взят из реальной живой базы, думаю что афтор приведенной вами статьи сам не пробовал выполнить свой запрос... сделайте проще, зайдите в phpMyAdmin ручками напишите запрос на обновление конкретной строки и посмотрите что вам скажет на это сервер...



ТЫ ЧТО Она проверяЛА Он РабОчий) чуть выше твоего поста мне коректный ответ) Радость

(Отредактировано автором: 16 Июля, 2011 - 23:36:11)

 
 Top
EuGen Администратор
Отправлено: 16 Июля, 2011 - 23:36:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Я уже написал, посмотрите вывод mysql_error - Вы это делали? что Вы там видите?
Подозреваю, что напутали с называниями полей/таблиц


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB