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

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

  Все выпуски  

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


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

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

Выпуск № 733
от 08.08.2007, 00:05

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


Вопрос № 97054: Добрый день. Вопрос может быть и не в тему, но все же..... Начинаю разбирать РНР, делаю своими силами авторизацию PHP+mySQL, но вопрос не в этом.....Итак: есть форма с полями для ввода имени пользователя и пароля и кнопкой ввод, постраничная навигаци...
Вопрос № 97077: Доброе время суток, эксперты. Помогите разобраться. Есть таблица zakazchik а в ней поле zakazchik Мне нужно добраться до второго заказчика в столбце. Когда я делаю так $query = "SELECT zakazchik FROM zakazchik"; $resul...
Вопрос № 97111: Здравствуйте эксперты, вопрос такой.. 1. Наверняка все когда-то посещали сайт знакомств. При редактировании анкеты есть блоки с множественным выбором т.е. checkbox’ы не могу допереть для каждого checkbox’a в таблице создаётся своя ячейка в с...
Вопрос № 97119: Здраствуйте, уважаемые эксперты! Столкнулся с такой проблемой: мои рнр - программы, запускаемые на компьютере при помощи Апача, не передают данные сами в себя, т.е. например счетчик кликов не работает. При этом когда заливаю в интернет, все работ...

Вопрос № 97.054
Добрый день. Вопрос может быть и не в тему, но все же..... Начинаю разбирать РНР, делаю своими силами авторизацию PHP+mySQL, но вопрос не в этом.....Итак: есть форма с полями для ввода имени пользователя и пароля и кнопкой ввод, постраничная навигация и меню. На странице имеются ссылки вида
index.php?page=1
index.php?page=2
......
Подгружаю страницы через include_once "file1.php"; ну и т.д.
Вопрос: Можно ли сделать на PHP так, чтобы после успешной авторизации форма была неактивна и при переходе по ссылкам?
Я так думаю с помощью сессий, но вот чего-то не получается. На первой странице после успешной авторизации форма уходит, а при переходе по ссылке вновь появляется.
Заранее спасибо.

Приложение:

Отправлен: 02.08.2007, 06:33
Вопрос задал: Lamer (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Azrr
Здравствуйте, Lamer!
Для этого нужно в начале каждого файла вписать :

session_name("somename");
session_start();

тогда при переходе по ссылке сесия будет одна и та же, а не создаваться новая.
Ответ отправил: Azrr (статус: 2-ой класс)
Ответ отправлен: 02.08.2007, 07:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Сессия действительно работает, просто я одну переменную использовал в разных выражения. Отсюда и не шло.

Отвечает: Flynn
Здравствуйте, Lamer!
Проверь включаешь ли ты сессии на всех страницах. Т.е. в начале каждой страницы должно быть session_start() - без этого сессии использовать не сможешь.
Если включаешь - тогда уже проверяй значения сессий конкретно на той странице, где у тебя ничего не получается.
Самое простая же реализация сохраняет в сессию например айди пользователя и определенный код по которому проверяется каждый раз именно он ли это. И после этой проверки, если все ок, создается например переменная или константа по которой и определяешь потом - надо тебе выводить форму логина или же например "Вы вошли как Гуру..."
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 02.08.2007, 08:40
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Я так, как Вы ответили и делал в общем то... просто недосмотрел за скриптом, начудил с переменными....

Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Lamer!
Оригинальная конечно табличка у Вас :)
Лично я использую вот такой вариант с использованием COOKIES. Мне такой больше нравится.

Приложение:

---------
Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.

Ответ отправил: Бобровский Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 02.08.2007, 18:21
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Кукисы конечно хорошо, но хотелось бы обойтись без них, тем более задача сама по себе довольно тривиальная и вобщем то воплне подьемная при помощи сессий.

Отвечает: Powoditch konstantin
Здравствуйте, Lamer!
Попробуйте проверять состояние сессии при входе на странице примерно вот так:
if (session_registered('a')){
// сессия активна, регистрация уже произошла
}
else {
// выводим форму для логина
}
Ответ отправил: Powoditch konstantin (статус: 3-ий класс)
Ответ отправлен: 02.08.2007, 19:31
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Хороший вариант, но почему то он у меня не получился. Может быть я не совсем корректно задал вопрос. Дело в том, что через include_once я подгружаю не всю страницу. Что то вроде самописного шаблона.


Вопрос № 97.077
Доброе время суток, эксперты. Помогите разобраться.
Есть таблица zakazchik а в ней поле zakazchik
Мне нужно добраться до второго заказчика в столбце. Когда я делаю так

$query = "SELECT zakazchik FROM zakazchik";
$result = mysql_query($query);
$zakazchiki = mysql_fetch_row($result);
$zakazchiki = mysql_fetch_row($result);//???
print $zakazchiki[1];

mysql ругается Notice: Undefined offset: 1 in y:homelocalhostwwwaceindex.php on line 13

когда делаю так

$query = "SELECT zakazchik FROM zakazchik";
$result = mysql_query($query);
print mysql_result($result,1);

всё нормально просто я не хочу использовать mysql_result а хочу вставить результат в массив , чтобы потом с ним работать ведь заказчиков много а я не могу даже до второго дойти. Подскажите в чём ошибка, я уже все функции методом тыка перепробовал.

Отправлен: 02.08.2007, 11:09
Вопрос задал: Александр Михайлович (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Yumark
Здравствуйте, Александр Михайлович!

попробуй так:

$query = "SELECT zakazchik FROM zakazchik";
$result = mysql_query($query);

while ( $a_row = mysql_fetch_array( $resul )) {
print '$a_row[zakazchik]<br>'; }

- выведет в столбец всех заказчиков

$query = "SELECT zakazchik FROM zakazchik";
$result = mysql_query($query);

$i = 0;

while ( $a_row = mysql_fetch_array( $resul )) {
$i=$i+1;
if ($i == 2) {print '$a_row[zakazchik]';} }

выведет второго заказчика
Ответ отправил: Yumark (статус: 2-ой класс)
Ответ отправлен: 02.08.2007, 11:31

Отвечает: PVS
Здравствуйте, Александр Михайлович!
$zakazchiki = mysql_fetch_row($result);
присваивает переменной $zakazchiki новое значение (совсем не массив). Вам надо:
$zakazchiki[] = mysql_fetch_row($result);
тогда каждый следующий заказчик будет попадать в отдельный элемент массива
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 02.08.2007, 11:40

Отвечает: Flynn
Здравствуйте, Александр Михайлович!
Во первых посоветовал бы использовать вам разные названия для таблиц и полей. Сейчас ошибки может и не быть, но потом может и возникнуть как-нибудь.

Во вторых mysql_fetch_row заполняет массив начиная с нулевого элемента, а не с первого. А так как выбираетсчя только одно поле, то соответственно надо писать $zakazchiki[0].

В третьих чтобы не делать 20 раз присвоение рядов для получения 20-го заказчика лучше использовать такой запрос Select zak From zakazchiki Limit 19,1
После слова Limit первая цифра - номер выбранной строки начиная с нуля (0- первая, 1 - вторая...) 1 - количество рядов, которые выбираются начиная с этой строки. Т.е. для второго заказчика будет Limit 1,1. Т.е. оно выберет только одну нужную нам строку и ни придется делать лишних движений в РНР
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 02.08.2007, 11:52

Отвечает: Юркин Александр
Здравствуйте, Александр Михайлович!
Зачем вы используете строку $zakazchiki = mysql_fetch_row($result); два раза?
Если нужно вывести весь массив заказчиков то пишем так:
$query=mysql_query("SELECT zakazchik FROM zakazchik;");
while($zakazchik = mysql_fetch_row($result))
{
echo "$zakazchik[0] ";
}

Если нужно вывести определенного заказчика, то делаем это в mysql запросе
где $id - идентификатор заказчика
$query=mysql_query("SELECT zakazchik FROM zakazchik WHERE id='$id';");
$zakazchik = mysql_fetch_row($result);
echo $zakazchik[0];
Ответ отправил: Юркин Александр (статус: Заблокирован)
Ответ отправлен: 02.08.2007, 14:03

Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Александр Михайлович!
Дело в том, что $zakazchiki это у вас не массив, а переменная!
---------
Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.
Ответ отправил: Бобровский Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 02.08.2007, 18:04


Вопрос № 97.111
Здравствуйте эксперты, вопрос такой..
1. Наверняка все когда-то посещали сайт знакомств.
При редактировании анкеты есть блоки с множественным выбором т.е. checkbox’ы не могу допереть для каждого checkbox’a в таблице создаётся своя ячейка в строке или они так блоками и хранятся?!

То есть например вот блок

<b>Цель знакомства:</b><br>
<input type="checkbox"> Дружба и общение <br>
<input type="checkbox"> Переписка <br>
<input type="checkbox"> Любовь, отношения <br>

Для каждого checkbox’a Создать свою ячейку?! Или записать все выбранные варианты?! Если так то когда пользователь захочет отредактировать анкету как ему указать что он уже выбирал! Помогите.
Отправлен: 02.08.2007, 15:37
Вопрос задал: Koort (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Yadovit
Здравствуйте, Koort!
Вообще-то тут <input type="checkbox"> не хватает поля "name".
Пример:
<input type="checkbox" name="drujba">
<input type="checkbox" name="perepiska">
После отправки данных в скрипте появятся переменные $drujba и $obshenie.
Это будет означать, что данные элементы отмечены.
Я вас не понял.
Если имеете в виду ячейка в базе данных то можно создать одну ячейку и записывать строку вида 011 где 0 это не отмечено, а 1 - отмечено. То есть выходит первый элемент не отмечен, 2 и 3 отмечены. При редактировании разбираете строку, отмечаете те, что равно 1 и всё.
Чтобы элемент был отмечен нужно добавить к нему "checked". То есть, вот:
<input type="checkbox" name="perepiska" checked> Переписка <br>
Ответ отправил: Yadovit (статус: 8-ой класс)
Ответ отправлен: 02.08.2007, 15:54

Отвечает: Yurio
Здравствуйте, Koort!
Для всех checkbox’ов - одна ячейка, в которую будет заноситься - какой из checkbox’ов узверь выбрал.

Допустим Ваш вариант checkbox’ов. Но его необходимо немного доделать:
<input name="1w" type="checkbox" id="ForWhat" value="1">
Дружба и общение <br>
<input name="1w" type="checkbox" id="ForWhat" value="2">
Переписка <br>
<input name="1w" type="checkbox" id="ForWhat" value="3">
Любовь, отношения <br>
после отправки формы на сервер переменной ForWhat присвоится значение 1,2 или 3 - в зависимости от того, какой checkbox был выбран, или null - если ничего не выбрано.

При генерации страницы для редактирования можно поступить следующим образом.

<input name="1w" type="checkbox" id="ForWhat" value="1" <?php if ($ForWhat==1) echo "checked"; ?> >
Дружба и общение <br>
<input name="1w" type="checkbox" id="ForWhat" value="2" <?php if ($ForWhat==2) echo "checked"; ?> >
Переписка <br>
<input name="1w" type="checkbox" id="ForWhat" value="3" <?php if ($ForWhat==3) echo "checked"; ?> >
Любовь, отношения <br>

То есть смотрим - какой checkbox был кликнут юзером и "кликаем" его.
Ответ отправил: Yurio (статус: 2-ой класс)
Ответ отправлен: 02.08.2007, 16:06

Отвечает: Бородин Александр Олегович
Здравствуйте, Koort!
Лучше создать одно поле. Всем чекбоксам, естественно, разные значения, а если не отмечено, то ноль. А потом данные можно записать в таблицу в формате 0123406 и т. д. Отсюда становится ясно, что первый чекбокс не отмечен. Строку такую можно легко прочитать как массив. Если имя переменной $str, то каждый элемент строки вызовется как $str[номер позиции цифры в строке]. Строки, в таком случае, будут все одной длины, поэтому Вы не очень-то и рискуете.
---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 5-ый класс)
Ответ отправлен: 02.08.2007, 16:10

Отвечает: Flynn
Здравствуйте, Koort!
Вариантов реализации такого может быть множество.
Можно для каждого свою ячейку - простой поиск будет.
Можно в отдельной таблице несколько полей - юзер и название чекбокса (т.е. если он там есть - значит его выбрали) - немного сложнее поиск и выборка, но уменьшенная избыточность.
Можно каждому значению присвоить какой-то квадрат двойки и суммировать их. Т.е. дружба - 1, переписка - 2, любовь - 4, еще что-нить - 8. Тогда например число 7 будет значить что выбраны 4(любовь),2(переписка) и 1(дружба), а 10 - это 8(что-то еще) и 2(переписка). Сумма хранится в одной ячейке и только уже в самом РНР переводится в значения. Но по такому методу сложно искать какой-то определенное значение или их совокупность.


Отредактировано: двойное обращение
---------
=deepTeNk= (Профессор)
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 02.08.2007, 16:27

Отвечает: Сорочан Александр Александрович
Здравствуйте, Koort!

1.да
2.нет
3. добавить name в <input>
и заданая форма будет его отсылать куда надо.
пример:

Приложение:

Ответ отправил: Сорочан Александр Александрович (статус: 1-ый класс)
Ответ отправлен: 03.08.2007, 00:30

Отвечает: Василенко Алексей Васильевич
Здравствуйте, Koort!
однозначного ответа на вопрос нет, т.к. все зависит от стиля вопроса.
Т.е. если вариант ответа должен быть один, то сохранить нужно только код варианта; если можно выбрать 2а и более варианта, то /*для данного примера*/ нужно сохранить состояние кажого из вариантов.
При редактировании нужно прочитать ранее выбранный вариант(ы) и предоставить форму для изменения выбора.
---------
Готовых решений небыло, нет и не будет... вся жизнь - это лишь размышления на тему
Ответ отправил: Василенко Алексей Васильевич (статус: 4-ый класс)
Ответ отправлен: 04.08.2007, 16:18


Вопрос № 97.119
Здраствуйте, уважаемые эксперты!
Столкнулся с такой проблемой: мои рнр - программы, запускаемые на компьютере при помощи Апача, не передают данные сами в себя, т.е. например счетчик кликов не работает. При этом когда заливаю в интернет, все работает нормально. Раньше не было проблем и с локальной версией. Подскажите, пожалуйста, что могло вызвать эту проблему, и как ее исправить (какие настройки изменить)?
Отправлен: 02.08.2007, 17:26
Вопрос задал: Павел Владимирович (статус: 4-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: M@gi$†e®
Здравствуйте, Павел Владимирович!
Думаю, надо в локальном php.ini установить директиву register_globals = on
---------
Aquila non Capta Muscas
Ответ отправил: M@gi$†e® (статус: 3-ий класс)
Ответ отправлен: 02.08.2007, 18:08
Оценка за ответ: 4
Комментарий оценки:
Уже пробовал, не помогло

Отвечает: Бородин Александр Олегович
Здравствуйте, Павел Владимирович!
Думаю, в локале директиву register_globals = On выставлять не надо, потому что и на хостинге она, скорее всего, тоже выключена. У любого вменяемого хостера эта директива отключена, потому что это серьезная угроза безопасности сервера. Поэтому чтобы не привыкать к "плохому", лучше и не приучаться. Собственно, поэтому я и думаю, что не "глобалсах" дело. Лучше бы Вы код привели.
Что касается отладки программ, то стоит попробовать отлаживать программы построчно. Вставляйте в программы заглушечные значения, тестовые значения, слова. Я понимаю, что совет не очень помогает, но любой программист должен уметь находить ошибки. Потому что он неминуемо их совершает.
С уважением, Бородин Александр Олегович
---------
Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Ответ отправил: Бородин Александр Олегович (статус: 5-ый класс)
Ответ отправлен: 02.08.2007, 18:34
Оценка за ответ: 4
Комментарий оценки:
При заливке на сайт (в интернете) все работает нормально! - не в коде дело. Проблема только с апачем.
Я отлаживаю примерно так, но не в этом дело.
register_globals = On не помогло, помогате сохранить данные $_GET[ ], но программа все равно работает не корректно.

Отвечает: Сорочан Александр Александрович
Здравствуйте, Павел Владимирович!

Каким способом передаються данные?

скорее всего через глобальные переменые значит надо включить опцию register_globals в php.ini (такой способ передачи не желателен из за безопасности).
Ответ отправил: Сорочан Александр Александрович (статус: 1-ый класс)
Ответ отправлен: 03.08.2007, 00:22
Оценка за ответ: 4
Комментарий оценки:
Уже пробовал, не помогло


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное