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

  Все выпуски  

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


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

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

Выпуск № 421
от 06.08.2006, 18:05

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


Вопрос № 50716: Вы меня простите, я в PHP начинающий и никак немогу доделать выборку из БД <?php $dbhost = "localhost"; $dblogin = "root"; $dbpass = ""; $db = "adv"; $conn = mysql_pconnect(...
Вопрос № 50749: Здравствуйте ув. эксперты! Подскажите как можно использовать сжатие gzip на php и что нужно серверу для его реализации. и желательно подкиньте рабочий примерчик!!...
Вопрос № 50757: Уважаемые эксперты разъясните пожалуйста! делаю защиту от регистрации, т.е. картика генерируется с которой надо ввести проверочный код session_start(); session_register('number'); на странице с вызовом тоже session_star...
Вопрос № 50760: Наконец-то сделал выборку из БД SQL. Но значения почему-то они выводятся через 5 пустых строк. Посмотрите, где я ошибся? И еще вопрос: Можно ли как-нибудь упростить конструкцию // print "<OPTION value = "$row[1]">$row[1]<...
Вопрос № 50771: Здравствуй, All! Такая дума у меня: есть текстовый (html, php - неважно) файл, в к-ом присутствует, скажем, пара тысяч знаков. Вывожу на сайт его содержание через php. Гружу файл txt с сервера. Но задумываюсь - как лучше загружать информацию такого б...
Вопрос № 50808: Что есть что в этом коде? $result=mysql_query("SELECT * FROM ads_city"); print '<SELECT NAME="city"> '; while($row=mysql_fetch_row($result)) { print "<OPTION value = "$row[2]"...

Вопрос № 50.716
Вы меня простите, я в PHP начинающий и никак немогу доделать выборку из БД

<?php

$dbhost = "localhost";
$dblogin = "root";
$dbpass = "";
$db = "adv";
$conn = mysql_pconnect($dbhost, $dblogin, $dbpass);

if (!$conn)
{
echo "Нельзя";
exit;
}

mysql_select_db($db);

$result = mysql_query("SELECT country FROM ads_country WHERE country != 0;");

?>

<form name="form1" method="post" action="" >
<select name="select" style=""width:" 160px;">

<?
while($rw = mysql_fetch_row ($result))
?>

База данных - adv
Таблица - adv_country
В таблице два поля id и country

Помогите, мне нужно чтобы данные из столбцов таблицы появились в форме, и если не трудно, давайте комментарии по ходу скрипта.
Отправлен: 31.07.2006, 18:24
Вопрос задал: Сычев Роман (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Ерёмин Андрей
Здравствуйте, Сычев Роман!
У вас ошибка в запросе выборки... Правильно будет так:
$result = mysql_query("SELECT `country` FROM `adv_country` WHERE `country` <> 0");
Выводить данные можно различными способами, например так:
for ($i = 0; $i < mysql_num_rows($result); $i++)
{
print mysql_result($result,$i);
}

Ещё и в имени таблицы у вас ошибка...
Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 31.07.2006, 18:42

Отвечает: Zysoftik
Здравствуйте, Сычев Роман!

Когда Вы вызываете mysql_fetch_array(), на выходе Вы получаете именованный массив.
Соответственно, если Вами были указаны параметры в запросе (в данном случае country), то соответствующие им значения будут в массиве как по номеру (нумерация с 0), так и по имени.
Т.е. нужно написать так:
....

<select name="select" style=""width:" 160px;">
<?
while($rw = mysql_fetch_row ($result))
echo '<option value='.$rw['country'].'>'.$rw['country'].'</option>';
?>

</select>

.....

Для справки, этот же элемент массива доступен и как $rw[0], но я бы не рекомендовал при работе с БД использовать такой вариант, т,к, он напрямую зависит от порядка следования параметров в SQL запросе. Если Вы что-то поменяете в запросе - может понадобится перестановка индексов по всему коду, что очень трудоемко и не нужно :)
А при использовании именованных элементов, Вы гарантированы, что используете элемент ответа конкретно привязанный к параметру запроса.
Ответ отправил: Zysoftik (статус: 6-ой класс)
Ответ отправлен: 31.07.2006, 19:13


Вопрос № 50.749
Здравствуйте ув. эксперты!
Подскажите как можно использовать сжатие gzip на php и что нужно серверу для его реализации.
и желательно подкиньте рабочий примерчик!!
Отправлен: 01.08.2006, 02:36
Вопрос задал: Pessom (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Яруллин Азат Рифкатович
Здравствуйте, Pessom!
Вот:
http://www.internet-technologies.ru/articles/article_2.html
http://phpclub.ru/faq/wakka.php?wakka=arch/archfaq/archfaq1&show_comments=1
Удачи!
Ответ отправил: Яруллин Азат Рифкатович (статус: 6-ой класс)
Ответ отправлен: 01.08.2006, 15:33
Оценка за ответ: 5


Вопрос № 50.757
Уважаемые эксперты разъясните пожалуйста!

делаю защиту от регистрации, т.е. картика генерируется с которой надо ввести проверочный код

session_start();
session_register('number');

на странице с вызовом тоже session_start();

на сколько я понимаю, переменная сессии привязывается к браузеру и удаляется при закрытии, либо при принудительном удалении

У меня происходит следующее: если открыта страница с проверочным кодом и позже в другом браузере открыта таже страница, то код к первой подходит от второй, а от первой соответственно неподходит - что это может быть и как с этим бороться?
может хостер должен включить какую нибудь опцию?
страница сайта с кодом http://www.rostov-info.ru/add.php?m=1&n=0&page=2

Заранее спасибо всем за ответы
Отправлен: 01.08.2006, 10:40
Вопрос задал: Топорков Алексей Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Топорков Алексей Иванович!

Переменная сессии обычно "привязывается" к cookies браузера (иногда - к URL). Поэтому, когда Вы открываете этот адрес в новом окне браузера, с точки зрения сервера Вы просто выполняете перезагрузку страницы, т.к. все cookies остались те же самые (все cookies с сайта хранятся в одном месте и никак не связаны с конкретным открытым окном). При этом, естественно, меняется номер, который нужно вводить в форму. НО! Страница, которая была открыта первой ничего не знает об этом и всё ещё выводит старые цифры (хотя сервер уже ждет новые).

Так что от хостера здесь ничего не зависит - всё работает правильно. А смысла избавляться от такого "эффекта" на мой взгляд нет.
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 02.08.2006, 14:44


Вопрос № 50.760
Наконец-то сделал выборку из БД SQL. Но значения почему-то они выводятся через 5 пустых строк. Посмотрите, где я ошибся? И еще вопрос: Можно ли как-нибудь упростить конструкцию
// print "<OPTION value = "$row[1]">$row[1]</option>"; c 1 по 6

Приложение:

Отправлен: 01.08.2006, 10:53
Вопрос задал: Сычев Роман (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Сычев Роман!
Я ведь Вам уже предлагал альтернативный метод... Вот ещё один:
$i = 1;
while($row=mysql_fetch_row($result))
{
print "<OPTION value = "$row[$i]">$row[$i]</option>";
$i++;
}

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 01.08.2006, 11:00

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Сычев Роман!
1. В самой базе нет пустых строк?
2. Вместо условия проверки if, вставь такую конструкцию

$conn = mysql_connect($host, $login, $password) or die("Ошибка
подключения");

Приложение:

---------
Версий еще много будет, пока есть фантазия...

Ответ отправил: Козлов Алексей Сергеевич (статус: 3-ий класс)
Ответ отправлен: 01.08.2006, 11:16

Отвечает: Zysoftik
Здравствуйте, Сычев Роман!

Самая главная ошибка: когда Вы работаете с массивом, возвращенным mysql_fetch_row, Вы работаете с каждой конкретной строкой ответа на Ваш SQL запрос. Поэтому, индексы массива обозначают не строки ответа, а столбцы.
И Вам не нужно делать вывод в цикле сразу всех строк. Для этого и сделан цикл.
Вам нужно сделать так, как я привожу в приложении.

Но лучше, как я раньше говорил, использовать mysql_fetch_array() или mysql_fetch_assoc() - тогда Вы получите значения колонок для конкретной строки в именованном массиве вида:
$row=array("id"=>"1","country"=>"USA");
и так для каждой строки последовательно в цикле.

Приложение:

Ответ отправил: Zysoftik (статус: 6-ой класс)
Ответ отправлен: 01.08.2006, 15:58


Вопрос № 50.771
Здравствуй, All! Такая дума у меня: есть текстовый (html, php - неважно) файл, в к-ом присутствует, скажем, пара тысяч знаков. Вывожу на сайт его содержание через php. Гружу файл txt с сервера. Но задумываюсь - как лучше загружать информацию такого большого объема - через текстовый файл, либо через базу данных (испульзую, ессно, мускл). Интересует производительность (с безопасностью вроде все ясно).
Отправлен: 01.08.2006, 11:55
Вопрос задал: Porsche (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Stamm
Здравствуйте, Porsche!
Если не надо делать поиск по этому тесту, то лучше, мне кажется, грузить из файла, да это и проще, всего одна ф-ция:file_get_contents('1.txt')(PHP >=4.3.0)

Приложение:

---------
Этот мир обречён на нас
©Сергей Маврин

Ответ отправил: Stamm (статус: Студент)
Ответ отправлен: 01.08.2006, 12:11

Отвечает: Rok-set
Здравствуйте, Porsche!
Отвечу немного не в тему, а конкретно - как узнать скорость выполнения любого скрипта, либо его участка. Это называется "профилированием кода" и я уверен, по запросу Вы найдёте не только примеры, но и специализированные программы-профилировщики. А чтобы не просто посылаться на конкретный термин, приведу кусочек кода для "домашнего" использования.

Приложение:

---------
нет преград для разума!

Ответ отправил: Rok-set (статус: 6-ой класс)
Ответ отправлен: 03.08.2006, 07:52


Вопрос № 50.808
Что есть что в этом коде?

$result=mysql_query("SELECT * FROM ads_city");
print '<SELECT NAME="city"> ';
while($row=mysql_fetch_row($result))
{
print "<OPTION value = "$row[2]">$row[2]</option>";
}
print '</select>';

а именно вот это. "$row[2]">$row[2]</option> и почему первое "$row[2]" взято в слэши???

2 вопрос. Есть куча таких формс данными. Как можно вывести все эти данные в таблицу БД??? Если можно- подробнее.
Отправлен: 01.08.2006, 17:43
Вопрос задал: Сычев Роман (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PVS
Здравствуйте, Сычев Роман!
" обозначает просто символ кавычки. В противном случае (без ) он бы просто обозначал конец строки.

Второй вопрос, чесно говоря не слишком понятен, но если Вы хотите сохранить данные в таблице, то сначала создайте ее (SQL'ями или через PHPMyAdmin), а данные вставляются так (если вставляются значения ВСЕХ полей новой записи):
mysql_query("insert into MyTableName values($Integer_Value,'$String_Value');");
или если какие-то поля должны получить значения по умолчанию (например autoincrement) то так:
mysql_query("insert into MyTableName(DefinedInt,DefinedStr) values($Integer_Value,'$String_Value');");
Ответ отправил: PVS (статус: Студент)
Ответ отправлен: 01.08.2006, 17:57

Отвечает: Santana
Здравствуйте, Сычев Роман!
mysql_fetch_row возвращает набор полей к которым можно обращятся как по имени $row['имя поля'] так и по порядковому номеру $row[2] как в этом случае
слеши экранируют кавычки так как print " ..." и ежели в внутри применить втрой набор кавычек возникнет ошибка слеш ее предотвращает

2 для того что бы вывести все поля перебирай $row[] от 0 до последнего
Ответ отправил: Santana (статус: 4-ый класс)
Ответ отправлен: 01.08.2006, 18:00


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное