Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP - Java Script - MySQL (формы)

2.0K
26 февраля 2003 года
Yana
32 / / 07.01.2003
Кто-нибудь может объяснить мне, почему без второго запроса к базе этот скрипт не работает?

<?php
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result))
{
...
}
?>
</select>


<select name="stage2" size="1">
<option value="">.........</option>
</select>
<input type="button" name="test" value="Go!">
</p>

<script>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
group[0][0]=new Option(".........","")
<?php
// без этого запроса скрипт не работает
[COLOR=red]$result=mysql_query ("SELECT id, name FROM category ORDER BY name");[/COLOR]
$a=1;
while ($category = mysql_fetch_array ($result))
{
$cat = $category ["id"];
$b=0;
$result2=mysql_query ("SELECT id, name FROM subject WHERE category='$cat' ORDER BY name");
while ($subject = mysql_fetch_array ($result2))
{
echo "group[$a][$b]=new Option(\"".$subject ["name"]."\", \"".$subject ["id"]."\")\n";
$b++;
}
$a++;
}
250
26 февраля 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Yana
Кто-нибудь может объяснить мне, почему без второго запроса к базе этот скрипт не работает?

<?php
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result))
{
...
}
?>
</select>


<select name="stage2" size="1">
<option value="">.........</option>
</select>
<input type="button" name="test" value="Go!">
</p>

<script>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
group[0][0]=new Option(".........","")
<?php
// без этого запроса скрипт не работает
[COLOR=red]$result=mysql_query ("SELECT id, name FROM category ORDER BY name");[/COLOR]
$a=1;
while ($category = mysql_fetch_array ($result))
{
$cat = $category ["id"];
$b=0;
$result2=mysql_query ("SELECT id, name FROM subject WHERE category='$cat' ORDER BY name");
while ($subject = mysql_fetch_array ($result2))
{
echo "group[$a][$b]=new Option(\"".$subject ["name"]."\", \"".$subject ["id"]."\")\n";
$b++;
}
$a++;
}



Поскольку: array mysql_fetch_array
Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.

А после первого while рядов больше нет, вот для этого и нужен второй запрос.

2.0K
03 марта 2003 года
Yana
32 / / 07.01.2003
Цитата:
Originally posted by Joker
Поскольку: array mysql_fetch_array
Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.

А после первого while рядов больше нет, вот для этого и нужен второй запрос.


Кажется поняла... То есть надо было писать

$category = mysql_fetch_array ($result);
while ($category) {...}

И тогда можно было бы использовать массив сколько угодно раз. Правильно?

250
04 марта 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Yana

Кажется поняла... То есть надо было писать

$category = mysql_fetch_array ($result);
while ($category) {...}

И тогда можно было бы использовать массив сколько угодно раз. Правильно?


не совсем так:
$result=mysql_query ("SELECT id, name FROM category ORDER BY name");
while ($category = mysql_fetch_array ($result)){}
Ставит коретку извлеченных рядов (подходящих запросу), на ночало.
И вот такую комбинацию вызывай сколько хочешь раз.. (ответы будут идентичны).

2.0K
04 марта 2003 года
Yana
32 / / 07.01.2003
У меня ведь так и было написано, как ты предлагаешь, но при этом приходится повторять запрос к базе. По-моему нет смысла запрашивать ту же информацию, которая уже считана.
285
07 марта 2003 года
Romik
479 / / 24.11.2002
Цитата:
Originally posted by Yana
У меня ведь так и было написано, как ты предлагаешь, но при этом приходится повторять запрос к базе. По-моему нет смысла запрашивать ту же информацию, которая уже считана.



Sorry, я особо не вникал в ваш скрипт, но насколько я понял Вам нужно, просто дважды вытащить результат используя один запрос. Рекомендую использовать mysql_data_seek
Вот небольшой пример скрипта с этой функцией, я сам его написал и проверил - работает...
Поначалу мы выводим весь $res, потом переводим курсор в запросе в начало, и ещё разок выводим результат запроса
$query="select * from Department";
$res=mysql_query($query);
while($arr=mysql_fetch_array($res)){
//Первый вовод результата
echo$arr[1]."
";
}
echo"<hr>";
echo mysql_num_rows($res)-1;
for($i=mysql_num_rows($res)-1;$i>0;$i--){
//Переводим курсор в начало
mysql_data_seek($res,$i);
// echo$i."
";
}
echo"<hr>";
while($arr=mysql_fetch_array($res)){
//Второй раз выводи результат
echo$arr[1]."
";
}
Удачи...

283
08 марта 2003 года
Alone
910 / / 20.11.2002
Да зачем такие сложности :)
Yana правильно решила ОДИН раз создавать массив из запрса и МНОГО раз использовать этот массив
285
08 марта 2003 года
Romik
479 / / 24.11.2002
Спорить не буду, предыдущий пример слишком замудрён, в нём много лишнего. Реально нужна всего одна строка
mysql_data_seek($res,0)
...и всё. В таком случае не надо заводить левый массив

А вообщето каждый в праве делать как он пожелает, я не настаиваю...
283
08 марта 2003 года
Alone
910 / / 20.11.2002
Yana сори я здорово ошибся если не хочиш замарачиватся с масивом масивов делай как предложил Romik
2.0K
11 марта 2003 года
Yana
32 / / 07.01.2003
Спасибо, народ, всем! Особенно Romik-у!
Я вообще такой функции не знала :)
2.0K
11 апреля 2003 года
Yana
32 / / 07.01.2003
Romik, а может так проще

$category = mysql_fetch_array ($result);
while ($category) {...};
reset $category;
while ($category) {...};
283
11 апреля 2003 года
Alone
910 / / 20.11.2002
А если в ответе будет не одна строка а несколько ?
Проверь что получится
Если все ок то используй что больше нравится
285
11 апреля 2003 года
Romik
479 / / 24.11.2002
Цитата:
Originally posted by Yana
Romik, а может так проще

$category = mysql_fetch_array ($result);
while ($category) {...};
reset $category;
while ($category) {...};



Yana,Опасения Alone по поводу того, что это будет работать только с одной записью - справедливы.
Подумай, ведь reset сбрасывает указатель в массиве, а массив получается за одну выборку из результата. Вот и получается, что ты будешь работать только с одной записью из полученного результата.
Хотя, если тебе как раз нужно работать только с одной записью, тогда твоё предложение вполне рационально

2.0K
11 апреля 2003 года
Yana
32 / / 07.01.2003
Я все время забываю, что там не простой двумерный массив
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог