Пытаюсь разобраться с функцией get_browser(). Написано, что для её работы необходимо скачать файл browscap.ini.
Файл "php_browscap.ini" скачал по адресу http://browsers.garykeith.com/downloads. Скопировал файл в папку по адресу: D/Programmes/browscap/ php_browscap.ini.
В файле "php.ini" раскомментировал строку и прописал путь к файлу:
и появляется сообщение "Cannot open 'programmes/browscap/php_browscap.ini' for reading".
У меня две учётные записи: "Admin" и "User". Файл "php.ini" редактировал и перезапускал Apache в учётной записи "Admin".
Но у записи "User" полный доступ к папке "programmes" на диске "D".
В чём может быть ошибка ? Куда копировать файл "php_browscap.ini" и как прописывать к этому файлу путь в файле php.ini ?
Сделал var_dump().
На стр. '1.php' все поля оставляю пустыми, нажимаю 'Submit'.
Стр. '2.php' выводит:
string(0) "" string(0) "" string(0) ""
Fields "Login" and "Password" must be filled to register!
Back to the page with the registration form
Т.е. первое условие не работает. Работает второе. (Добавление)
Champion пишет:
Oleh пишет:
if($log=='' && $psw=='' && $email='')
Если вы это копировали, то ошибка прям тут. Тут происходит присваивание, а результат такого присваивания - false.
Oleh пишет:
А то если я сначала буду
А если на форме хотя бы 5 обязательных полей?
Точно ! Ошибка элементарная ! Опять невнимательность ! Исправил на '==' и всё заработало.
На счёт обязательности полей, то ты правильно написал. Я, кстати, такой свой громоздкий и ненужный код исправил на почти такой, как ты написал, только с проверкой других условий ниже на той же странице. А вот с проверкой на пустоту - написал много чего ненужного. Просто мне не нужно было использовать функцию exit(), а писать print() и флаг устанавливать в '1'. А уже потом проверит на '1' флаг и вывести гиперссылку на страницу с регистрацией.
Спасибо.
В следующий раз буду 10 проверять код прежде чем публиковать вопрос : )
Перечитал еще раз вопрос
Oleh пишет:
только если все три переменные имеют пустое значение, а не одна или две из них.
Ну тогда всё правильно у вас написано. В чем проявляется "ошибка" ? И что до условия происходит с А, Б и Ц?
В общем ситуация такая. Эти переменные на самом деле $log, $psw и $email. Находятся они на странице, например, "2.php". Методом POST им передаются значения из формы на странице "1.php" (регистрация), в которой есть три поля: 'Login' ($log), 'Password' ($psw) и "Email" ($email).
Я хочу проверить заполнены ли поля. Если они не заполнены, то выводится сообщение об этом и ниже - гиперссылка для возврата на страницу с формой регистрации.
Первым делом хочу проверить на пустоту все три поля, т.е. $log, $psw и $email, чтобы в случае если все три пустые, то выводилось соответствующее сообщение, что все три поля необходимо заполнить. А то если я сначала буду проверять $log, а при этом не заполнены ещё $psw и $email, то будет выводится сообщение, что незаполнено поле 'Login', хотя незаполненными ещё будут поля 'Password' и 'Email'. С переменными до условия ничего особенного не происходит.
if($log=='' && $psw=='' && $email='')
exit('Fields "Login", "Password" and "Email" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
а второе такое:
if($log=='' && $psw=='')
exit('Fields "Login" and "Password" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
третье:
if($psw=='' && $email='')
exit('Fields "Password" and "Email" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
дальше 3-е, 4-е и т.д., но это уже не важно.
Проблема с первым условием. Оно не срабатывает, а выполняется второе, в котором только один оператор '&&'. Поэтому у меня и возникли вопросы с этим опреатором.
Я понимаю, что мой код можно оптимизировать, но для меня с моим уровнем знаний и опытом - это нормально. Для меня сейчас нужно понять почему не работает первое условие.
Как проверить три и более переменных на пустое значение ?
Но условие должно выполняться только если все три переменные имеют пустое значение, а не одна или две из них.
В учебнике такая ситуация не описана, на странице http://php.su/learnphp/operators/?logical тоже.
Проверять две переменные получается.
if($a=='' && $b=='')
exit("Fields $a and $b are empty!");
А вот проверка трёх не получается.
if($a=='' && $b=='' && $c=='')
exit("Fields $a, $b and $c are empty!");
сначала возвращением значения $a, а затем увеличения $a на единицу ?
что непонятного? (Добавление)
бросай это дело
программировать это не твое (Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!! (Добавление)
попробую как ребенку объяснить )))
есть 2 коробочки
1 пустая в другой карандаши
смотрим сколько карандашей в второй коробочке и кладем в первую столько же
потом в вторую кладем еще 1 карандаш
Слушай, я здесь эте тему создал не для того чтобы с тобой перегавкиваться или реагировать на твои бессмысленные комменты. Мне реально непонятно зачем ты "мусоришь" в темах, создаваемых новичками. Может у тебя психолгическая проблема и ты пытаешься её решить своими советами типа "бросай программирование, т.к. я считаю, что это не твоё".
Вообще, если ты заметил, то я в созданной теме не спрашивал твого мнения, чем мне заниматься в жизни. Я с этим и сам разберусь.
Я задал конкретные вопросы в расчёте на то, что мне кто-нибудь напишет вразумительные ответы.
Я сам юрист, около полугода ходил к репетитору на программирование, т.к. учебники не мог самостоятельно осилить. Было много незнакомой терминологии, ну и вообще материал незнакомый. Два месяца проходил с репетитором HTML, следующие два месяца - JavaScript, следующие два месяца - PHP. Нужно ещё учитывать, что я не знал основ, без знания которых открывать учебники про HTML, JavaScript или PHP не было никаого смысла. Сейчас я сам более-менее могу разбираться в учебниках, но есть темы которые я не могу понять не потому, что я тупой, а потому, что в большинстве учебников материал изложен автором в стиле "для себя". Такое впечатление, что авторы книг не ставили цель изложить материал в своём учебнике таким образом, чтобы он был понятен людям, ранее не имевшим дело с программированием.
Вот и твои комменты по моей теме написаны в таком же стиле. Более того, твои ответы вообще не по теме. Я тебе уже сказал, прочитай полностью мою тему. Там конкретные вопросы, на которые можно дать нормальный ответ, а не писать про какие-то карандаши.
Единственное, чего ты добился, так это моей просьбы админу забанить тебя в теме "Вопросы новичков", т.к. непонятно зачем ты здесь свои посты оставляешь.
что непонятного?
(Добавление)
бросай это дело
программировать это не твое
(Добавление)
сначала присваивается а потом увеличивается при постинкременте
и после увеличения уже не присваивается
русским по белому написано!!!
Ты объяснять нормально научись !
Сначала прочитай мой вопрос полностью, а уже потом пытайся что-то промычать.
Я в своём вопросе всё чётко изложил, что мне непонятно. А ты отвечаешь какими-то обрывками, ещё больше людей путаешь.
Чего ты вообще на этот форум зашёл и эфир тут засоряешь ? Советовать всем, кто не понимает твои "объяснения", что программирование - это не их дело ? Так мы и без тебя, такого "грамотея" разберёмся, что нам делать.
Не умеешь объяснять - не объясняй ! Тебя лично никто об этом не просил.
присваивает значение только 1 раз....тоесть присваивает 10 потом увеличивает и все...на этом все действия закончены....при последующих обращениях к $a будет возвращено уже 11
Это всё ты говоришь о переменной $a ?
$a=10; // это присвоение значения 10 переменной
$a++; // это увеличение значения переменной $a на единицу
А почему переменная $b равняется 10, если "$a++" - это уже 11 и эти 11 присваиваются переменной $b ?
Прохожу в книге тему "операторы инкремента и декремента" и ни хрена не могу понять.
Мне понятно, что инкремент – это увеличение (от слова increase), а декремент – это уменьшение (от слова decrease). Но вот дальше…
Вот тут http://php.su/learnphp/operators/?id пишется, что существуют префиксные и постфиксные инкременты и декременты.
Префиксный инкремент (++$a) увеличивает $a на единицу и возвращает значение $a.
Постфиксный инкремент ($a++) возвращает значение $a, а затем увеличивает $a на единицу.
Префиксный декремент (--$a) уменьшает $a на единицу и возвращает значение $a.
Постфиксный декремент ($a--) возвращает значение $a, а затем уменьшает $a на единицу.
Первое, что не понятно, - в чём разница между префиксным и постфиксным:
- сначала увеличением $a на единицу, а затем возвращением значение $a;
и
- сначала возвращением значения $a, а затем увеличения $a на единицу ?
Это выглядит просто как перемена мест слагаемых. Результат то не меняется.
Увеличение на единицу – это понятно. Непонятно куда возвращается значение $a ? Чем, оператором ?
Почему a=11, а b=10 ? Ведь $а изначально равна 10 ($a=10;).
Затем используется постфиксный инкремент ($a++), который возвращает значение $a (опять таки, непонятно кому и зачем ?), а затем увеличивает $a на единицу. Т.е. получается, что постфиксный инкремент в данном случае возвращает переменной "а" ($a) её же значение – "10", а затем увеличивает это значение на единицу. Далее значение "11" оператором присваивания присваивается переменной "b" ($b). Получается, что значение переменной "b" будет равно "11". Но в приведённом выше примере всё наоборот.
Я не понимаю логику этих операторов. Кто-нибудь может доступно объяснить ?
$i=15; // Присвоить $i целое число 15
$a=$i--; // СНАЧАЛА присвоить $a значение $i, а ЗАТЕМ уменьшить $a
$b=++$i; //СНАЧАЛА увеличить $i, а ЗАТЕМ присвоить увеличенное значение $i переменной $b
Вопрос следующий.
Учитывая, что и инкремент с декрементом, и оператор присваивания имеют правостороннюю ассоциативность, то почему в строке ($a=$i--;) сначала выполняется оператор присваивания, а потом постфиксный декремент ?
Ведь правосторонняя ассоциативность означает, что последовательность выполнения операторов будет происходить справа налево, т.е. получается, что сначала должен выполниться постфиксный декремент, а потом оператор присваивания.
Кроме того. Прописал я этот код:
$i=15;
print $i."<br>";
$a=$i--;
print $a."<p>";
По идее на экран должно вывести число 15, а под ним число 14, поскольку переменной $a присвоилось значение переменной $i (т.е. число 15), а затем это значение уменьшилось на единицу. Но у меня выводятся два числа 15 (одно под другим). Почему значение $a не уменьшается на единицу ?
Прохожу в книге тему "математические операторы". Делаю всё подряд, что написано.
Наткнулся на ситуацию, когда преобразование в целое число не сработало, если оператор преобразования (int) поставить перед операцией вычитания, умножения и деления, а если поставить перед операцией сложения, то работает.
В книге эта ситуация не описана. Вот я и думаю, может это я что-то не так пишу ?
Вычитание, умножение и деление. Приходится сначала присваивать переменным №3 результат соответствующей операции ($j3=$j1-$j2;), а уже потом значения этих переменных №3 преобразовывать (int) и присваивать переменным №4, чтобы выводимый результат округлялся.
Вообще всё началось с того, что я вывел результат деления (5:2=2.5) и остаток (1).
Я так понял, что остаток выводят в случае необходимости получения в результате деления целого числа, а не вещественного.
Я ходил полгода к репетитору по программированию. Первые два месяца учил HTML, следующие два месяца - JavaScript, следующие два месяца - PHP.
Потом сделал перерыв - месяц. Сейчас учу сам. Остановил выбор на PHP. Не всё понятно, но много. Знаний для самостоятельной работы с учебниками по PHP хватает.
Это устаревший способ использования глобальных переменных
почитай про супер глобальный массив $_SERVER
http://htmlweb.ru/php/function/$_server.php
Ссылку просмотрел. Но раздел про $_SERVER (подозреваю, что и всё остальное) написан в стиле "для себя".
Методом тыка нашёл ошибку и заработало.
<?
print ("Hi! Your IP-address is: ".($_SERVER['REMOTE_ADDR']))."<br>";
print ("Your browser is: ".($_SERVER['HTTP_USER_AGENT']))."<p>";
?>
Книгу использую вот эту. http://depositfiles[dot]od[dot]ua/php/
Не знаю насколько она актуальна.
Что касается PHP5. Я сам "чайник". Но мне не один раз говорили программеры с большим опытом, что пользоваться последними версиями какого-либо софта не нужно. Пользоваться нужно проверенными и работающими версиями. Поэтому не знаю, насколько оправдано учить именно PHP5, а не PHP4.
<?
print "Hi! Your IP-address is: $REMOTE_ADDR";
print "Your browser is: $HTTP_USER_AGENT";
?>
но IE8 мне показывает ошибки:
Notice: Undefined variable: REMOTE_ADDR
Hi! Your IP-address is:
Notice: Undefined variable: HTTP_USER_AGENT
Your browser is:
Браузер не определяет эти стандартные переменные. В книге написано, что для работы с массивами стандартных переменных необходимо включить директиву "track_vars" в файле "php.ini", а в PHP версии 4.0.3 директива "track_vars" включена постоянно.
У меня PHP версии 4.3.4. В файле "php.ini" я не могу найти директиву "track_vars".
"Track_vars" включена постоянно во всех версиях, начиная с 4.0.3 или только в 4.0.3 ?
Если в файле "php.ini" нет директивы "track_vars", то это значит, что в этой версии такая директива включена постоянно ?
Если в версии 4.3.4 директива включена, то почему переменные не определяются ?
Потому что нули после точки не пишутся, как и сама точка в случае отсутствия дробной части.
Не, если хотите, можете любоваться на реальный вид float'а - через экспоненту, типа такого: 1.528535047E-25
Познакомьтесь с функцией var_dump, она напишет, какого типа переданный аргумент.
Познакомился с функцией. Прописал её с $variable2. Мне выдало: float(12).
Насколько я понял, то даже при использовании var_dump() значение переменной всё равно будет без точки и нуля. Будет отображаться только "12", а не "12.0".
Как смотреть на реальный вид float'a через экспоненту ? Для чего используется ?
Почему после функций var_dump() и print_r() не работают теги "<p>" и "<br>", как они работают после функции print() ? Ведь var_dump() и print_r() тоже выводят на экран тип и значение переменной.