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

  Все выпуски  

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


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

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

Выпуск № 370
от 15.06.2006, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 316, Экспертов: 51
В номере:Вопросов: 5, Ответов: 15


Вопрос № 45716: Добрый день! Для редактирования таблицы "Работники цеха" базы данных, на главной странице сделал форму, где вводится номер цеха, который передается в PHP-программу. Программа выбирает все записи данного цеха из таблицы базы и записы...
Вопрос № 45719: Здравствуйте, уважаемые экперты! Сделанная мной админка для сайта вообще не показывается в Forefox. Подскажите, пожалуйста, с чем это может быть связано? Ведь от сервера браузер "получает" html-код и в программной части тут вряд ли дело. Мо...
Вопрос № 45768: Здраствуйте! Как на пхп проверить есть ли определенный html код на странице??...
Вопрос № 45776: Здравствуйте! Такой вопрос: Если я поставлю пароль на папку(напр. через cPanel), а потом из Php скрипта попробую функцию include("папка_на_пароле/файл") Произойдёт ли вставка файла(что-то я сомневаюсь:))? Как это можно сделать(естес...
Вопрос № 45807: Здравствуйте эксперты. У меня вот такая проблема: У меня проект состоящий из 50 страниц(примерно), причем на каждой есть повторяющийся код – это «меню» на страницах, так вот как вынести этот повторяющийся код в отдельный файл или на отдельную стр...

Вопрос № 45.716
Добрый день!
Для редактирования таблицы "Работники цеха" базы данных, на главной странице сделал форму, где вводится номер цеха, который передается в PHP-программу.
Программа выбирает все записи данного цеха из таблицы базы и записывает в таблицу с формой и отображает на экране.
На экране могу редактировать любое поле, но при отправке на сервер
для внесения изменений в базу данных, отправляется всегда последняя
запись.
Фрагмент на PHP прилагаю.
Подскажите, как правильно сделать.
Спасибо.

Приложение:

Отправлен: 09.06.2006, 10:21
Вопрос задал: Eliz (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Stamm
Здравствуйте, Eliz!
Надо в тегах input ставить имена так: N1[] и N2[] и X1[]. Тогда, при вносе в базу данных надо пройдись по всем массивам:
for($i=0;$i //вставить в БД $_REQUEST['N1'][$i], $_REQUEST['N2'][$i], $_REQUEST['X1'][$i]
}

Приложение:

---------
В день - один, ну два подвига, не больше...

Ответ отправил: Stamm (статус: Студент)
Ответ отправлен: 09.06.2006, 11:06
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Madproger
Здравствуйте, Eliz!

ВСе дело в этом:
echo "<td> <input type=text name=N1 value='$row[ceh_id]'>
</td>";
echo "<td> <input size=20 type=text name=N2 value='$row[rab_name]'>

У тебя все поля называются одинаково (для каждой записи) - естественно что в POST приходит последняя.
Для того чтобы такого не было во-первых кури массивы а во вторых сделай где то так
echo "<td> <input type=text name=N1[] value='$row[ceh_id]'>
</td>";
echo "<td> <input size=20 type=text name=N2[] value='$row[rab_name]'>

(и где там у тебя еще поля свои для каждой записи)

При сабмите тебе в ПОСТе придет следующее
$_POST['N1'] - массив
$_POST['N2'] - тоже массив

И уже прохождением по этим массивам ты получишь свои данные измененные или нет.

Так же для однозначности советую давать индексы т.е.
.... name=N1[$i] ......
... name=N2[$i] ......
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 7-ой класс)
Ответ отправлен: 09.06.2006, 11:11
Оценка за ответ: 5
Комментарий оценки:
Конечно,все-поля-одинаковые.
Спасибо.

Отвечает: Константин
Здравствуйте, Eliz!
А что если посмотреть, какая получается результате форма? Получается так:
<input type=text name=N1 value='иванов'>
<input size=20 type=text name=N2 value='Иван'>
<input type=checkbox name=X1>
<input type=text name=N1 value='Петров'>
<input size=20 type=text name=N2 value='Петр'>
<input type=checkbox name=X1>
...
Переменные-то называютс одинаково! Как же ты хочешь чтобы PHP их отличал?

Сделать надо так:
mysql_select_db('compik');
$query = "select * from rab where ceh_id = '$cehid'";
$result = mysql_query($query);

$num_results = mysql_num_rows($result);

echo "<p>Найдено записей : ".$num_results."</p>";

echo "<table width=200 border=1>";
echo "<form method=get action=ceh_edit.php>";

for ($i=0; $i <$num_results; $i++)
{
$row = mysql_fetch_array($result);

echo "<tr>";

echo "<td> <input type=text name="N1[]" value='$row[ceh_id]'>
</td>";

echo "<td> <input size=20 type=text name="N2[]" value='$row[rab_name]'>
</td>";

echo "<td> <input type=checkbox name="X1[]" value='$row[rab_id]'>edit
</td>";

echo "</tr>";
}
Так при сабмите на сервер отправятся 3 массива:
N1, N2, X1. Только вот в массиве X1 будут только те значения которые были отмечены.
Я бы на твоем месте вообще не делал никаких галочек, а просто вывел бы hidden-поле для каждой записи, тоже указав [], чтобы был массив(<input type="hidden" name="ids[]" value="$ID">). А потом прошелся бы по этому массиву, и, используя в виде ключа значение, которое является ID для каждой записи. И все, все что надо - обновлено :)

Хочешь - можешь подумать, как это делать с галочками. Там тебе надо будет тоже делать hidden-поле, и действовать аналогично, но замену проводить только там где была выбрана галочка.

Полезная функция для этого - in_array(), про нее - на php.net почитай
---------
Лучше сделать и жалеть, чем жалеть о том что не сделал
Ответ отправил: Константин (статус: 6-ой класс)
Ответ отправлен: 09.06.2006, 13:56
Оценка за ответ: 5
Комментарий оценки:
Огромное
Спасибо
за урок!!!!!


Вопрос № 45.719
Здравствуйте, уважаемые экперты! Сделанная мной админка для сайта вообще не показывается в Forefox. Подскажите, пожалуйста, с чем это может быть связано? Ведь от сервера браузер "получает" html-код и в программной части тут вряд ли дело. Может, для возможности отобр. в разных браузерах нужно использовать вместо одних тегов - другие, или какие-то вообще не использовать? Можете ли что-нибудь посоветовать. В IE показывается нормально. Заранее благодарен!
Отправлен: 09.06.2006, 10:46
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PVS
Здравствуйте, Андрющенко Вячеслав Васильевич!
Возможно Вы используете JavaScript. Тогда надо анализировать (средствами JavaScripta) какой броузер используется и в зависимости от этого использовать синтаксис, который поддерживает этот броузер. Можно условно поделить броузеры на группы:
- Internet Explorer - совместимые
- Netscape 4 - совместимые (Firefox здесь!)
- Netscape 6 и выше - совместимые
- Старые Netscap'ы, Explorer'ы и прочие не поддерживающие JavaScript или поддерживающие очень слабый его вариант
В зависимости от того к какой группе принадлежит броузер пользователя он будет "понимать" JavaScript по-разному (или вообще не понимать).
Ответ отправил: PVS (статус: 3-ий класс)
Ответ отправлен: 09.06.2006, 15:59
Оценка за ответ: 5

Отвечает: Wolfis
Здравствуйте, Андрющенко Вячеслав Васильевич!
Вот тут былобы неплохо увидеть код одной из страничек админки(html естественно) могу предположить, что ты переборщил с java скриптами или или со слоями css. Тоесть ты мог задать координаты слоя таким образом, что в Firefox они отображаются за пределами экрана, случай был. Вообще в админке лучше использовать табличную верстку и минимум наворотов.
Ответ отправил: Wolfis (статус: 1-ый класс)
Ответ отправлен: 10.06.2006, 05:58


Вопрос № 45.768
Здраствуйте!
Как на пхп проверить есть ли определенный html код на странице??
Отправлен: 09.06.2006, 19:28
Вопрос задал: SKC (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Селев Валерий
Здравствуйте, SKC!

$htmlCodeToFind = "<span>то, что надо найти</span>";
$sFile = file_get_contents("http://www.php.net");
$pos = strpos($mystring, $findme);
echo $pos?"Код присутствует":"Код отсутствует";
Ответ отправил: Селев Валерий (статус: 1-ый класс)
Ответ отправлен: 09.06.2006, 19:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Попробую.

Отвечает: Cimus
Здравствуйте, SKC!
Вам поможет функция strpos(data , string substring,integer offset)
data - строка в которой производиться поиск
string substring - то, что надо искать
integer offset - (необязательный аргумент)начать поиск с указанного положения

Эта функция возвращает положение аргумента string substring в аргументе data,
если string substring появляеться более одного раза будет возвращено положение первого появления в стороке, если не найденно то, что искали то функция возвращает false.

Пример использования:

$poisk='то, что ищем';
$html='html код считаный в одну строку';
if(strpos($html,$poisk))
{
нашли
}
else
{
не нашли
}

---------
Достичь можно любых высот !
Ответ отправил: Cimus (статус: 1-ый класс)
Ответ отправлен: 09.06.2006, 21:45

Отвечает: Cybernetic_Creature
Здравствуйте, SKC!
if (strpos(join('',file('file.html')),'<table')!==false) echo "Tag table jest v etom fayle"
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 10.06.2006, 13:07


Вопрос № 45.776
Здравствуйте!
Такой вопрос:
Если я поставлю пароль на папку(напр. через cPanel), а потом из Php скрипта попробую функцию include("папка_на_пароле/файл") Произойдёт ли вставка файла(что-то я сомневаюсь:))? Как это можно сделать(естественно, зная пароль:))?
Отправлен: 09.06.2006, 21:42
Вопрос задал: Dushin Igor (статус: 8-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Селев Валерий
Здравствуйте, Dushin Igor!

А попробовать? ;)

Поставив пароль на папку через cPanel, ты ограничиваешь доступ к ней при отдаче файла сервером (.htaccess).

При использовании функции include(), доступ к файлу осуществляестся средствами API OS, .htaccess-файл в этом случае никак не влияет на процесс, и скрипт будет успешно подключен.
Ответ отправил: Селев Валерий (статус: 1-ый класс)
Ответ отправлен: 09.06.2006, 21:51

Отвечает: Cybernetic_Creature
Здравствуйте, Dushin Igor!
да произойдет
потому что контрол панель не сможет дать пароль на уровне ОС.
и вообще такое не возможно.
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 10.06.2006, 13:05


Вопрос № 45.807
Здравствуйте эксперты. У меня вот такая проблема:
У меня проект состоящий из 50 страниц(примерно), причем на каждой есть повторяющийся код – это «меню» на страницах, так вот как вынести этот повторяющийся код в отдельный файл или на отдельную страницу, чтоб он подставлялся в страницы (меню подставлялось на страницы), как сделать это с помощью PHP? А если мне понадобиться изменить «меню», то не хотелось бы менять меню на всех страницах, а проще сделать меню на одной и там его изменять. Я сам только начинаю изучать PHP, и поэтому не могу пока сделать то что описано выше, поэтому просьба помогите в этом деле нужен работающий скрипт на php. Если что скрипт собираюсь поставить суда http://khandyga.ya1.ru/
Заранее благодарен.
Отправлен: 10.06.2006, 09:02
Вопрос задал: Озон (статус: 3-ий класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 21)

Отвечает: dns
Здравствуйте, Озон!
Делается это очень просто
на каждой странице прописывать следующие строки (см. Приложение)

Приложение:

Ответ отправил: dns (статус: 5-ый класс)
Ответ отправлен: 10.06.2006, 09:07
Оценка за ответ: 5
Комментарий оценки:
Эти строки насколько я понял из статейт по PHP можно также поместить в таблице. про это я более менее понял, а вот что должно быть написано в самом файле menu.php какие данные php? если можно простой пример напишите....
я его потом попробую под свой сайт немного изменить, и желательно с пояснением что к чему.

Отвечает: Ерёмин Андрей
Здравствуйте, Озон!
Кроме require() ещё можно использовать include(). Разницы между ними существенной нет, но как правило include() используют для вставки содержимого, а require() - для подключения модулей с дополнительными переменными.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 10.06.2006, 09:30
Оценка за ответ: 4
Комментарий оценки:
а точнее какой из них?
и что писать в самом подключаемом файле?

Отвечает: Антонов Никита Вячеславович
Здравствуйте, Озон! Для подобных действий обычно используется четыре функции

1 - include обычно служит для подключений разных модулей и содержимого, вообщем того, что отображаетс на экране. Если файла нет, или он недоступен выводит ошибку, и скрипт продолжает работу

2 - require обычно служит для подключения важных модулей, которые не выводятся на экран. Если файла нет или он недоступен - ваш скрипт прекращает работу.

3, 4 - include_once и require_once используются для того, что бы подключить файл ОДИН раз. При повторном подключении функции require и include выдают ошибки. Я обычно этими функцями не пользуюсь, так как у моих скриптов есть твёрдая хорошая структура. Но новичкам иногда эта функция будет полезна при отлове ошибок (в конечном варианте можно _once удалить)
---------
Прежде чем идти к цели, подумай, стоит ли она того
Ответ отправил: Антонов Никита Вячеславович (статус: 1-ый класс)
Ответ отправлен: 10.06.2006, 10:53
Оценка за ответ: 4
Комментарий оценки:
а точнее какой из них?
и что писать в самом подключаемом файле?

Отвечает: Jeka911
Здравствуйте, Озон!

Я делаю немного по-другому. Создаю простенький шаблон (с меню, счетчиками и т.д.), а в нем место, куда будет подставляться тело документа (текст, картинки...) помечаю специальными символами (напр. %body%), а в рнр загружаю этот шаболон, а затем меняю спец. символы на содержимое документа. echo str_replace("%body%","текст страницы",$htm);, где $htm - загруженый из файла шаблон.


---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 4-ый класс)
Ответ отправлен: 10.06.2006, 12:11
Оценка за ответ: 3

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Озон!
Там, где вы хотите, чтобы было Ваше меню необходимо, как вам уже и написали, вставить строки:
include("menu.html");
?>
а в сам файл menu.html нужно писать то, что должно быть вместо строк вставки для того, чтобы правильно отображалось меню. Для твоего случая в нем должна быть только табличка в которой находятся ссылки. Чтобы лучше понять действие скрипта, представь что перед обработкой файла php вместо этих трех строк будет вставлено содержимое файла menu.html и ты поймешь, что должно быть в нем написано.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 10.06.2006, 13:18


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное