Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 726
от 30.07.2007, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 444, Экспертов: 68
В номере:Вопросов: 6, Ответов: 25


Вопрос № 96073: Здравствуйте эксперты! Есть страничка с формой "калькулятор", с полями: аргумент1, аргумент2, арифметическое действие (пользователь выбирает из списка), и кнопкой вычислить при нажатии которой, данные отправляются на сервер и обрабатыв...
Вопрос № 96087: Как загрузить страницу с нета в тхт формате...
Вопрос № 96229: В PHP не удается создать таблицу в базе MySQL c именем поля ALL Видимо потому, что имя поля совпадает со служебным словом. Можно ли как то решить эту проблему?...
Вопрос № 96250: Помогите организовать дерево. PHP+MySQL! Строю сайт - хранилище руководств. Все руководства должны быть отсортированны по рубрикам с разным уровнем вложенности. Притом одно руководство может быть положенно в несколько рубрик. Пробле...
Вопрос № 96306: Добрый день, всем участникам форума. Помогите разобраться в мой проблеме Есть две базы одна локальная (localhost) $host = "localhost"; $user = "root"; $pass = ""; $database = &...
Вопрос № 96316: Здравствуйте! У меня 2 вопроса. 1. Я собираюсь создавать динамический сайт с помощью include, но может, стоит использовать fopen? Какой лучше, безопаснее? 2. Но еще я хочу, чтобы у моего сайта были статические адреса, то есть хочу использоват...

Вопрос № 96.073
Здравствуйте эксперты!
Есть страничка с формой "калькулятор", с полями: аргумент1, аргумент2, арифметическое действие (пользователь выбирает из списка), и кнопкой вычислить при нажатии которой, данные отправляются на сервер и обрабатываются. Все вычисления должны производиться на сервере и после отправляться клиенту. Проблема в том, что я не знаю как определить с помощью PHP, какое арифметическое действие было выбрано пользователем.
Спасибо за помощь.
С уважением

Приложение:

Отправлен: 23.07.2007, 13:25
Вопрос задал: Sky24dive (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Yurio
Здравствуйте, Sky24dive!
Определить, какое действие выбрано можно при помощи оператора switch. Пример - в приложении.

Приложение:

Ответ отправил: Yurio (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 13:46
Оценка за ответ: 5

Отвечает: Gines
Здравствуйте, Sky24dive!

Получаете значение списка методом GET, например $znak=$_GET['List'], а потом switch'ем просматриваете его значение, т.е.:
switch($znak){
case 0: то складываете два числа
.....
case 3: то делите два числа
}
Ответ отправил: Gines (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 14:05
Оценка за ответ: 4

Отвечает: Хасаншин Азат
Здравствуйте, Sky24dive!
После отправки формы будет создана переменная $list co значением, которое выбрал пользователь. Например, если пользователь выбрал сложение, то $list будет равно 0.
Ответ отправил: Хасаншин Азат (статус: 1-ый класс)
Ответ отправлен: 23.07.2007, 14:22
Оценка за ответ: 4

Отвечает: Sema
Здравствуйте, Sky24dive!
Данные отправляемые на сервер, заносятся в переменную QUERYSTRING, ее можно пропарсить и получить значение полей формы далее через операторы ПХП switch ...case... определяй чего тебе надо
Ответ отправил: Sema (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 16:40
Оценка за ответ: 4

Отвечает: Katyass
<?php
switch($_GET['List'])
{
case 0:
$result=$_GET['num1']+$_GET['num2'];
break;
case 1:
$result=$_GET['num1']-$_GET['num2'];
break;
case 2:
$result=$_GET['num1']*$_GET['num2'];
break;
case 3:
$result=$_GET['num1']/$_GET['num2'];
break;
}
?>

$result - это результат
Ответ отправила: Katyass (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 17:02
Оценка за ответ: 5

Отвечает: Юркин Александр
Здравствуйте, Sky24dive!
Во первых лучше использовать метод POST, а не GET
<form name="calculator" action="action.php" method="POST">

PHP код:
$action=$_POST['list'];
$num1=$_POST['num1'];
$num2=$_POST['num2'];
if($action==0){$result=$num1+$num2;}
if($action==1){$result=$num1-$num2;}
if($action==2){$result=$num1*$num2;}
if($action==3){$result=$num1/$num2;}
echo "Результат - ".$result;
Ответ отправил: Юркин Александр (статус: 1-ый класс)
Ответ отправлен: 23.07.2007, 20:32

Отвечает: Powoditch konstantin
Здравствуйте, Sky24dive!
Попробуйте вот так. Тоисть сначала надо сделать переданы ли верные параметры а потом формировать результат в зависимости от действий.

Приложение:

Ответ отправил: Powoditch konstantin (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 22:31


Вопрос № 96.087
Как загрузить страницу с нета в тхт формате

Приложение:

Отправлен: 23.07.2007, 14:36
Вопрос задал: Volodimir (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Flynn
Здравствуйте, Volodimir !
В РНР есть такой модуль как Curl. Он позволяет в точности делать действия, которые выполняет браузер, т.е. в данном случае вначале отсылать логин с паролем на страницу логина, получить от туда значение куки (или сессию) и передать это в следующем запросе на нужную нам страницу.

Пример для логина в приложении, но уже какие точно данные надо посылать и в какие переменные - зависит от сайта и разбирать его придется вначале вручную. Либо же писать более сложный скрипт, что будет сам это делать. В переменную $result приходит вся страница, т.е. функция copy уже включена :)
Для работы с Curl-ом необходимо "включить" эту библиотеку в php.ini.

Приложение:

Ответ отправил: Flynn (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 17:02
Оценка за ответ: 5

Отвечает: Powoditch konstantin
Здравствуйте, Volodimir !
Попробуйте использовать функцию file_get_contents

строка file_get_contents ( строка имя_файла [, целое использовать_include_path [, ресурс контекст]])

Как параметр передаете адрес и она сохраняет вам результат в строку
Ответ отправил: Powoditch konstantin (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 22:53


Вопрос № 96.229
В PHP не удается создать таблицу в базе MySQL c именем поля ALL
Видимо потому, что имя поля совпадает со служебным словом.
Можно ли как то решить эту проблему?
Отправлен: 24.07.2007, 17:56
Вопрос задала: Vikas (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Powoditch konstantin
Здравствуйте, Vikas!
У меня всё работает. Вот запрос:
CREATE TABLE `test` (
`ALL` VARCHAR( 255 ) NOT NULL
);
Версии програм:
phpMyAdmin2.6.1, mySQL 4.1.16-max
Может Вы ошиблись когда не заключали имя поля в кавычки?
Ответ отправил: Powoditch konstantin (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 18:02

Отвечает: Santana
Здравствуйте, Vikas!
Если ставить имя поля в кавычки (например "ALL") то пропустит. Но я бы категорически не советовал использовать подобного рода имена. Проблемы обязательно вылезут, причем в самый не подходящий момент. И причем боком, те ошибки не будут указывать явно на это имя, и придется потратить и время и силы на локализацию источника. Было у меня поле ON ... да-с .... :(
Ответ отправил: Santana (статус: 9-ый класс)
Ответ отправлен: 24.07.2007, 18:15

Отвечает: Yurio
Здравствуйте, Vikas!
Напишите имя поля в одинарных кавычках.
Пример в приложении.

Приложение:

Ответ отправил: Yurio (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 18:20

Отвечает: Flynn
Здравствуйте, Vikas!
Вы правы - не видимо, а точно по этой причине и не дает.
Можете попробовать взять слово all в кавычки (лучше ` - там где тильда)
например `all` int(11) default NULL

Но кроме этого у вас появится еще и проблема с выбором с этой таблицы, так как Select id,all From table Where ... выдаст ошибку. Придется применять всюду к таблицам короткие обозначения и указывать, что это поле таблицы
select t.id, t.all from table t Where ...

Но как показывает опыт самое правильное решение - вообще не делать названий с зарезервированными словами MySQL-я, так как ошибки могут возникнуть не только при отправке запросов.
Ответ отправил: Flynn (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 20:36

Отвечает: Magister
Здравствуйте, Vikas!
Ну первое, что приходит в голову, это добавить к названию, совпадающему со служебными словами, например "fld" (в Вашем случае будет fldALL)...
---------
Aquila non Capta Muscas
Ответ отправил: Magister (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 21:15


Вопрос № 96.250
Помогите организовать дерево. PHP+MySQL!

Строю сайт - хранилище руководств. Все руководства должны быть отсортированны по рубрикам с разным уровнем вложенности. Притом одно руководство может быть положенно в несколько рубрик.

Проблема заключается в организации БД. Количество запросов на выборку из дерева и вывод дерева существенно больше чем добавлений и изменений.

Необходимо уметь:
1. выводить дерево на экран.
2. узнавать номер вложенности рубрики
3. добавлять/удалять рубрику
4. уметь сортировать узлы/книги внутри узла

Приложение:

Отправлен: 24.07.2007, 21:37
Вопрос задал: NiGHT (статус: Практикант)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Nexus
Здравствуйте, NiGHT!

А какой MySQL и какой объем базы? Насколько я понимаю из предметной области база очень уж большой не будет. Я в аналогичном каталоге хранил просто parent_id для каждой категории. Для 4го MySQL в котором нет хранилок это наверное даже более экономичный способ, если мускл 5й, то правильнее хранить уровень категории и id левого и правого потомка, причем узлы в порядке обхода дерева. Тогда отрисовываться дерево будет горздо быстрее, добавлять узлы - дольше и сложнее. Про второй вариант была неплохая статья "Дерево каталогов NESTED SETS", поищи в инете, или могу на мыло скинуть. Там есть примеры реализации и пр.

сама база - таблица руководств, таблица рубрик (в которой кроме id хранить либо parent_id, либо уровень у двух потомков) и таблица связи между ними (составной превичный ключ - id руководства и id рубрики)
Ответ отправил: Nexus (статус: 8-ой класс)
Ответ отправлен: 24.07.2007, 22:12

Отвечает: Sema
Здравствуйте, NiGHT!

Есть такой вариант...
создаешь таблицу в которой у тебя хранится id рубрики и par_id -id вышестоящей рубрики. у самых верхних уровней соответственно par_id = 0 и далее через рекурсию ПХП ты его раскрываешь
Ответ отправил: Sema (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 08:41


Вопрос № 96.306
Добрый день, всем участникам форума.
Помогите разобраться в мой проблеме

Есть две базы одна локальная (localhost)

$host = "localhost";
$user = "root";
$pass = "";
$database = "base1";

Другая лежит на другом компе (ip 175.128.80.01)

$host = "175.128.80.01";
$user = "root";
$pass = "123";
$database = "base2";
К локальной (своей) базе я подключаюсь без проблем. все мои запросы мускул выполняет на ура
Но как только я подключаю удаленную, выскакивает ошибка
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
соответственно та же проблем если писать в окне (CMD) c:z:usrlocalmysql4inmysql.exe

запросами типа mysql.exe -uODBC -p
(Проблему решить не удалось)

В результате престал спать и есть... все думал как же открыть доступ пользователю 'ODBC'@'localhost'
Перечитал весь форум, перерыл все конфиги где встречаются словеса ODBC и MySQL
Пробовал в MySqlAdmin'е добавить нового пользователя ODBC, ошибка убивается, однако подключение производится только к локальной базе
другую он просто игнорирует.

Фронтом и через Администрирование/Источники данных (ODBC)/Connector ODBC 3.51
подключение к удаленной базе происходит без каких-либо проблем.

На форуме mysql.com
http://forums.mysql.com/read.php?10,6834,12338#msg-12338

Вычитал совет, про мой случай, где рекомендуют просто снести мускул.
т.к я c начало ставил пакет Денвера (хотя в описание к нему уже написало что ODBC уже вроде как в нем уже зашит), а потом тока драйвер ODBC

Вот думаю переустановить Денвер, а вместе с ним и сам MySQL
Плиз, помогите понять и решить проблему. стоит ли это делать (переустанавливать Пакет денвера)

З.Ы.
Из того, что стоит на моем компутере:
Все предельно просто Windows XP Prof SP2
+ пара прикольных игр типа тетрис
Ну и сам Денвер - Base_2006-10-04_a1.3.33_p4.4.3_m4.1.16_pma2.6.
Отправлен: 25.07.2007, 10:44
Вопрос задал: Alexstudio (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Шахгусейнов Азиз
Здравствуйте, Alexstudio!
все намного проще.......
просто у Вас неправильный имя/пароль
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 5-ый класс)
Ответ отправлен: 25.07.2007, 11:18

Отвечает: Gines
Здравствуйте, Alexstudio!

Судя по ошибке, могу предположить что ошибка кроется в коде подключения, т.к. Вы указываете в конфиге, что пользователь root с паролем 123, а PHP пытается подключиться к MySQL как анонимный пользователь с пустым паролем. Проверьте внимательно код подключения.
Ответ отправил: Gines (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 11:34

Отвечает: Бородин Александр Олегович
Здравствуйте, Alexstudio!
А на другом компе файрвол случаем не работает? Если есть возможность попробуйте протестировать работу скрипта на втором компе, как на локальном. Если все пройдет отлично, значит, он закрыт для доступа извне. Ипняк у него указан локальный(если не ошибаюсь, конечно, в нумерациях), поэтому думаю, что проблем с доступом к нему быть не должно.
---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 4-ый класс)
Ответ отправлен: 25.07.2007, 12:55

Отвечает: Nexus
Здравствуйте, Alexstudio!

Согласен с предыдущим ответом, у тебя что-то не так с подключением, ты должен получать ошибку хотя бы типа Access denied for user 'root'@'175.128.80.01' (using password: YES), сейчас у тебя неправильно генерируется коннекшн стринг. И еще, если ты хочешь зайти на удаленный сервер под рутом, проверь что там разершено подключение под рутом с удаленного компа. По умолчанию мускл это закрывает. Либо просто создай аккаунт.
Ответ отправил: Nexus (статус: 8-ой класс)
Ответ отправлен: 25.07.2007, 13:26

Отвечает: Powoditch konstantin
Здравствуйте, Alexstudio!
А почему Вы ркшили что проблема ODBC?
Вы же подключаетесь как рут:
$host = "175.128.80.01";
$user = "root";
$pass = "123";
$database = "base2";

Если Вы входите как рут, то попробуйте выполнить вот это
mysql.exe -h 175.128.80.01 -u root -p
Вбиваете пароль.

Если говорит что access denied значит неправильный пароль для рута(123 - не самый лучший=))
Ответ отправил: Powoditch konstantin (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 23:17


Вопрос № 96.316
Здравствуйте! У меня 2 вопроса.
1. Я собираюсь создавать динамический сайт с помощью include, но может, стоит использовать fopen? Какой лучше, безопаснее?
2. Но еще я хочу, чтобы у моего сайта были статические адреса, то есть хочу использовать rewrite (и сделать ЧПУ). Я знаю, что это делается в .htacess, но как - не знаю.

Мне бы хотелось получить развернутые ответы.

Заранее огромное спасибо!
Отправлен: 25.07.2007, 11:59
Вопрос задала: Angel7 (статус: Практикант)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Yadovit
Здравствуйте, Angel7!
1. include вставляет содержимое включаемого файла в скрипт и если там есть код пытается его выполнить.
fopen открывает файл для чтения иили записи. После открытия файл ещё нужно прочитать с помощью другой функции (напрмер fread) и выполнить если это скрипт (например с помощью eval).
Просто для включения файлов проще первое, если нужно читать файл частями, то использовать второе.
2. Нужно знать регулярные выражения. Это отдельная тема.
Вот тут можно почитать:
http://www.drupal.ru/node/2643
Ответ отправил: Yadovit (статус: 7-ой класс)
Ответ отправлен: 25.07.2007, 12:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо (в особенности за 1-ую часть).

Отвечает: Шахгусейнов Азиз
Здравствуйте, Angel7!
Здравствуйте, Angel7!
1. include......и с чего вы взяли что надо использовать фопен???
2.
RewriteEngine on
RewriteRule ^/(rus|eng)/$ ?lang=$1
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 5-ый класс)
Ответ отправлен: 25.07.2007, 12:48
Оценка за ответ: 4
Комментарий оценки:
1. А почему нельзя? :)
2. Не поняла, что это значит...

Отвечает: Бородин Александр Олегович
Здравствуйте, Angel7!
Отвечу на первый вопрос, так как во втором вопросе не спец.
Создавать, конечно, лучше с помощью include. С помощью fopen что Вы делать собираетесь? У него немного другое предназначение, а инклюд просто создан для создания многомодульных систем.
Ну и потом, fopen работает помедленнее инклюда, я так подозреваю.
---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 4-ый класс)
Ответ отправлен: 25.07.2007, 12:59
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Magister
Здравствуйте, Angel7!
1. Лучше include(), а еще лучше, include_once()
2. По поводу rewrite rules в .htaccess почитай мануал Apache, там толково все расписано (http://httpd.apache.org/docs/1.3/misc/rewriteguide.html).

Приложение:

---------
Aquila non Capta Muscas

Ответ отправил: Magister (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 14:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо! А почему лучше include_once()?


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное