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 :: Скрип игнорирует $error
Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
Здравствуйте, господа!
Не могу победить код - как не пытался отловить - не могу понять, почему не срабатывают условия. Понимаю, что не идет обработка $error - но как заставить работать должным образом - не ведомо мне.
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
это че? проверка существование переменой isset() и вообще если не нажата кнопка мы должны оставновить сценарий. и зачем вообще пустая переменая $error?
echo 'Шаг 1 пройден.<br />'; - зачем это выводить после каждого шага? сценарий исполняется мимолетно меньше 1 секунды ты это все прочитаеш? вреатли) для такого дела используется javascript с задержкой времени.
вот тебе выдрал со своего) тут конечно не все проверки надо доработатЬ) но все же лучше чем проверка у тебя на тип заливаемого файла (mime tipe у тебя берется с клиента а ты недумал что mime tipe можно подделать? ) хотя и этот тип защиты не 100%
Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
echo 'Шаг 1 пройден.' я делал для отладки, чтобы понять, что именно скрипт проходит. Вообще, это пример из книги, но тем не менее он не пашет. Понятно, что он не совершенен, но я пока просто понимаю принцип работы скрипта и языка PHP. После того как заработает данный скрипт, буду внедрять и другие проверки.
Код, который привели Вы, к сожалению пока не могу оценить из-за отсутствия знаний, но пока передо мной стоит задача заставить работать приведенный мною скрипт. Тем не менее, я Вам весьма благодарен. Буду рад, если кто-то поможет понять причину неработы моего скрипта.
PATCH
Отправлено: 21 Июля, 2011 - 00:51:00
Частый посетитель
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
это ж *** в какой такой книге используют echo для отладки!!! для отладки используют
error_reporting(2047); или если хочеш свое пошагово) то делай так
если дошел до сюда то удаляй строку
exit('Шаг 1 пройден.<br />');
и переходи к шагу 2 и там тоже echo замени на exit();
если шаг 2 прошел то опять удаляем строку exit и идем к шагу 3 и делаем аналогично где не выведит смотри код от шаг x-1 до шаг x то есть от 2 до 3 допустим
или еще как вариант сделай логическое выражение
if(выражение){ действие}else{exit('кнопка не нажата');}
- вот этот пример мне оч нравится если не существует переменой $error (кстати проверка на существование пишется через if(isset($переменая))) ну да лана от пустим формальности смотри дальше если не существует то выполняем сценарий дальше если существует то выводим ее и пишем ШАГ 5 ПРОЙДЕН!! гениальный автор!!!
тут если посмотреть ошибки через строку) пройди по ссылки и прочитай лучше там простой пример
- вот эта строка просто убила) не проще ли указать файл обработчик? в данном случии наш файл... зачем его выводить через глобальную переменую да и еще и обрабатывать через htmlspecialchars (если эта переменая не передается пользователем откудо тут может быть html коД?)
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
PATCH пишет:
это ж *** в какой такой книге используют echo для отладки!!!
Нормальная практика отладки, наряду с понатыкиванием var_dump'ов и print_r'ов на интересующие участки кода. Ну после error_reporting, конечно.
Reexel,ну поехали по коду:
Reexel пишет:
if (!$_POST['submit'])
{
print_r($_FILES);
$error=" ";
}
Это условие отрабатывается всегда, когда получили форму, правильно? И здесь устанавливается переменная $error
Reexel пишет:
// Загрузка файла
if (!isset($error))
А когда у нас нет $error? Когда с формы ничего не пришло. Ну и как загружать файл, который не пришёл?
Кстати, строка 22 - не думаю, что у вас есть функция uplink
----- PostgreSQL DBA
Reexel
Отправлено: 21 Июля, 2011 - 11:10:41
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
PATCH пишет:
это ж *** в какой такой книге используют echo для отладки!!!
Книга называется "Изучаем PHP и MySQL", автор Мишель Е.Девис, Джон А. Филлипс
Вот скрин с электронной книжки:
(превью нет, но сама картинка видна)
-------------------------------- -------------------------------- -------------------------
Теперь по поводу проверки:
PATCH пишет:
для отладки используют error_reporting(2047); или если хочеш свое пошагово)
Для отладки echo использую я, так как пока не знаю как использовать что-то другое. А тут наглядно я вижу где программа точно прошла. Программирую второй день, так что не обессудьте.
- вот эта строка просто убила) не проще ли указать файл обработчик? в данном случии наш файл... зачем его выводить через глобальную переменую да и еще и обрабатывать через htmlspecialchars (если эта переменая не передается пользователем откудо тут может быть html коД?)
Тем не менее - это строка стоит в коде. Она меня тоже смутила, но я решил сделать как в книжке, дабы исключить неправильность написания мною чего-то своего.
А когда у нас нет $error? Когда с формы ничего не пришло. Ну и как загружать файл, который не пришёл?
Насколько я понимаю. код просто идет дальше? Или я не прав? Идет ряд проверок на тип, размер и прочее - после чего временный файл копируется в папку uploads
-------------------------------- -------------------------------- -------------------------
Пойду копать в сторону функции uplink - это первое.
Второе - чего же он все таки не пашет? Простите за недопонимание, видимо сказывается мое историческое образование. PHP учу для саморазвития. Жду не решения вопроса, а стороны, в которую пошлют, остальное готов копать сам.
PATCH
Отправлено: 21 Июля, 2011 - 19:18:48
Частый посетитель
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
Reexel пишет:
Для отладки echo использую я, так как пока не знаю как использовать что-то другое. А тут наглядно я вижу где программа точно прошла. Программирую второй день, так что не обессудьте.
первое в строке 38 нету такого расширения как pjpeg .
П.с изучаете php второй день зачем полезли в загрузку файлов не зная как работает echo, exit, if else, не зная методов передачи POST GET?????? имхо даже если и знаете вы явно не закрепили знания на практике. и вообще надо программировать с легкого и потом постепено расширять код. т.е то что выше описано эт явно не для новичков которые программирует второй день. да еще и пример с вводом в заблуждение.
- вот это на мой взгляд конкретный ввод заблуждение. а если у нас код будет исполнятся в другом файле? и вы будете писать echo(htmlspecialchars($_SERVER['PHP_SELF'])) потом зададите вопрос почему не работает. да еще и с примером который пребразует html код в сущности зачем?
Мелкий пишет:
Нормальная практика отладки, наряду с понатыкиванием var_dump'ов и print_r'ов на интересующие участки кода. Ну после error_reporting, конечно.
никогда не пробовал через echo. хотя на вкус и цвет у каждого свой ответ) но помойму если через error_repoting ошибок не будет то код спокойно исполнится и может исполнится не правильно т.к дето допустили ошибку в расчетах или в написании условий я лично б использовал exit по этапно и смотрел бы что бы он выводил не жели по 100раз весь код исполнятЬ)
Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008 Откуда: Россия
Помог: 1 раз(а)
PATCH пишет:
читаем для чего используется echo
Ещё неофиты стариков учить будут
Я в ваших то знаниях посомневался бы...
Вывод сообщений по всему хода скрипта используется достаточно часто на этапе разработки.
Если отладка становится совсем потребной, я везде пихаю echo 'Test #n';
Reexel пишет:
Тем не менее - это строка стоит в коде. Она меня тоже смутила, но я решил сделать как в книжке, дабы исключить неправильность написания мною чего-то своего
Странная у вас книжка
PATCH
Отправлено: 21 Июля, 2011 - 19:37:58
Частый посетитель
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
Roler пишет:
читаем для чего используется echo
Ещё неофиты стариков учить будут
Я в ваших то знаниях посомневался бы...
Вывод сообщений по всему хода скрипта используется достаточно часто на этапе разработки.
Если отладка становится совсем потребной, я везде пихаю echo 'Test #n';
Reexel пишет:
Тем не менее - это строка стоит в коде. Она меня тоже смутила, но я решил сделать как в книжке, дабы исключить неправильность написания мною чего-то своего
Странная у вас книжка
я не правильно описал то что хотел сказать перечитай пост выше который я исправил за 1 минуту до твоего сообщения зачем по 100раз весь код исполнять если где ошибка в расчетах? можно через exit ('Test #n'); по этапно пихать
Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008 Откуда: Россия
Помог: 1 раз(а)
PATCH
Да ещё бы ту правильно понять, когда на весь обзац всего пара точек из знаков препинания
Смысл в exit()? На вывод сообщений об ошибках это никак не повлияет, зато если заработает весь скрипт, это будет сразу видно. Нет смысла убивать скрипт на каждом этапе ради отладки.
PATCH
Отправлено: 21 Июля, 2011 - 19:43:58
Частый посетитель
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
Roler пишет:
PATCH
Да ещё бы ту правильно понять, когда на весь обзац всего пара точек из знаков препинания
Смысл в exit()? На вывод сообщений об ошибках это никак не повлияет, зато если заработает весь скрипт, это будет сразу видно. Нет смысла убивать скрипт на каждом этапе ради отладки.
ну автор темы вроде хочет по этапно изучиТЬ) а не сразу ОПА СКРИПТ кое-как зарабОтаЛ, нафиг отладку) п.с на вывод сообщений не чего не повлияет если отрублен error_repoting. если он врублен то тогда и поэтапно ненадо нечего делать , если конечно как я уже говорил нету погрешности в расчетах или условиях
$error="<b>Вы должны отправить файл!</b><br /><br />";
uplink($_FILES['upload_file']['tmp_name']);
}
мы сначала выводим всю инфу об поступившем к нам файле ,а потом делаем проверку поступил ли к нам файл? где логика? (Добавление)
специально для тебя лови твой код со всеми твоими проверками мб и недочеты и есть т.к эта моя вторая практика с загружаемостью файлов однако все проверки работают как и сам скрипт
Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
Господа, источник я привел, в инете есть книжка в электронном виде - можно ее скачать и зайти в раздел "Работа с файлами", страница примерно 280.
Что касаемо кода - мне кажется, что echo показывает очень эффективно результат работы скрипта. Если осилю error_reporting - то буду пользоваться, к сожалению это, как правило, описывается в конце книжек.
Про echo, if else, for, array читал, логику работы понял, с $_SERVER, $_FILES сложнее, так как глава написана несколько сумбурно. Кроме того, абсолютно согласен со странностью htmlspecialchars - это совершенно лишнее. Однако он был в коде (см. картинку), поэтому его привел.
Если нет файла, то скрипт не имеет ошибку и идет дальше - до вывода формы. Максимальный размер файла, допустимого до загрузки млн байт. Не понимаю, что за параметр submit передается по $_POST - название формы? Не пойму что за print_r (в примере он закомментирован).
$error="<b>Вы должны отправить файл!</b><br /><br />";
uplink($_FILES['upload_file']['tmp_name']);
}
Проверяем загрузку файла - была ли она по факту. Если нет и не определена переменная $error - то выводится сообщение об ошибке. Файл удаляется (какой?) uplink - функция?
Если ошибки нет, то копируем файл со временным именем в директорию uploads. Выводим сообщение о повторной загрузке файла. Иначе выводим сообщение об ошибке.
Правильна ли моя логика? Получается, что по идее если нет файла - то просто выведется форма - так и требуется. Если загружается файл - то проверяются на ошибки, если их нет - то копируется в директорию uploads. Что же тогда неподвластен загружаемый файл данному скрипту?
Если делаю переменная $error определена - то скрипт останавливается (это при исполнении, а не в моей логике). Убрать проверку наличия переменной $error?
PATCH пишет:
(Добавление)
специально для тебя лови твой код со всеми твоими проверками мб и недочеты и есть т.к эта моя вторая практика с загружаемостью файлов однако все проверки работают как и сам скрипт
Спасибо, сейчас разбираюсь и изучаю разницу. К сожалению, последнее сообщение написал во время появления Вашего поста. Тем не менее вопросы, заданные мною там актуальны. Имею ли я честь просить Вас ответить?
Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011
Помог: 22 раз(а)
Reexel пишет:
Если нет файла, то скрипт не имеет ошибку и идет дальше - до вывода формы. Максимальный размер файла, допустимого до загрузки млн байт. Не понимаю, что за параметр submit передается по $_POST - название формы? Не пойму что за print_r (в примере он закомментирован).
честно я незнаю зачем автор создавал пустую переменую и в любое логическое выражениее ее втыкал что касается submit это имя кнопки которое у вас в форме и передается она методом $_POST правильнее на мой взгляд делать такую проверку нажатой кнопки как у меня в скрипте , однако есть разные мнения.
Проверяем загрузку файла - была ли она по факту. Если нет и не определена переменная $error - то выводится сообщение об ошибке. Файл удаляется (какой?) uplink - функция?
uplink функции нету есть unlink но в коде в который из книжки нету почти не где кроме в конце остановки сценария. и вообще в данном случии я не вижу применение этой функции. почему? поясняю:
if (!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND
!isset($error))
{
$error = "<b>Вы должны отправить файл!</b><br/><br/>";
uplink($_FILES['upload_file']['tmp_name']);
}
здесь мы делаем проверку загружается ли файл (опять же нафиг эта пустая перменая error) по сути мы файл передаем в скрипт как временую переменую и по окончания скрипта эта переменая удалица, так что не вижу смысла в написании везде unlink функции посмотри на мой пример я там сделал проверку если проверку не прошел мы останавливаем скрипт с выводом сообщения
Проверяем тип файла gif, pjepg(что это за тип?), jpeg - подходящие, остальные отметаются. Временный файл удаляется.
я и пишу такого типа нету есть jpg bmp ico png но такого нету.
поповоду удаления временого файла мб я и ошибаюсь что он удаляется когда сценарий прекращает свое действие сча проверю) только что проверил что та я невижу временого файла после остановки сценария) определял по размеру)
Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008 Откуда: Россия
Помог: 1 раз(а)
Reexel пишет:
Не понимаю, что за параметр submit передается по $_POST - название формы?
Кнопку зовут sumbit.
То есть, если кто-то пытается загрузить файл, то в массиве $_POST будет ключ submit, который означает, что сейчас необходимо обработать файл.
Reexel пишет:
Не пойму что за print_r (в примере он закомментирован).
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.