[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вытаскивание даных из БД
Golovastik
По аналогии для примера попробовал первый раз вытащить из БД данные через цикл, где-то увидел как в цикле выводятся.
Вот у меня есть такая БД.
 
id name lastname dol
1, Алексей Алексеев Директор
2, Иван Иванов Заместитель
3, Александр Александров Программист


Такой код написал:

<?php
$db = mysql_connect("localhost","alex","12345");
mysql_select_db("first_bd", $db);

$result = mysql_query("SELECT * FROM firma", $db);
$myrow = mysql_fetch_array($result);

do{
echo "Сотрудник № - ".$myrow['id']."<br>";
echo $myrow['name']."<br>";
echo $myrow['lastname']."<br>";
echo $myrow['dol']."<br>";
} while($myrow = mysql_fetch_array($result));
?>


1)Не могу понять каким образом работает вот это условие:
 while($myrow = mysql_fetch_array($result));
Объясните пож.


2) Скажите ,каим образом переменная $myrow превращается в массив, после этой строки?

$myrow = mysql_fetch_array($result);


Заранее благодарю за ответ.



Спустя 4 минуты, 25 секунд (13.07.2010 - 23:15) KaFe написал(а):
1)Сам пока не разобрался, в силу поверхностных знаниями в работе с mysql laugh.gif
2)http://php.su/functions/?mysql_fetch_array тут

Спустя 12 минут, 28 секунд (13.07.2010 - 23:27) Ice написал(а):
Цитата (Golovastik @ 14.07.2010 - 00:11)
1)Не могу понять каким образом работает вот это условие:

Дело в том, что функция mysql_fetch_array, как и ее сестра, возвращает массив значений, взятых из базы по запросу до тех пор, пока есть, что возвращать. Когда больше нечего возвращать, функция автоматически переключает тип возвращаемого значения с array на boolean и возвращает FALSE и цикл while останавливается.

Цитата (Golovastik @ 14.07.2010 - 00:11)
Скажите ,каим образом переменная $myrow превращается в массив, после этой строки?

Переменная myrow певращается в массив, потому что ей присваивается то, что возвращает функция mysql_fetch_array. А что она возвращает? smile.gif Массив. Правильно smile.gif

Спустя 10 минут, 17 секунд (13.07.2010 - 23:38) Golovastik написал(а):
Ice , спасибо, очень хорошо объяснили.

Спустя 4 минуты, 34 секунды (13.07.2010 - 23:42) Ice написал(а):
Вам спасибо smile.gif

Спустя 8 часов, 23 минуты, 13 секунд (14.07.2010 - 08:06) Basili4 написал(а):
а Я все таки скажу.

$myrow = mysql_fetch_array($result);

do{
echo "Сотрудник № - ".$myrow['id']."<br>";
echo $myrow['name']."<br>";
echo $myrow['lastname']."<br>";
echo $myrow['dol']."<br>";
} while($myrow = mysql_fetch_array($result));


замените на

  while($myrow = mysql_fetch_array($result))
{
echo "Сотрудник № - ".$myrow['id']."<br>";
echo $myrow['name']."<br>";
echo $myrow['lastname']."<br>";
echo $myrow['dol']."<br>";

}

Спустя 3 часа, 58 минут, 17 секунд (14.07.2010 - 12:04) Ice написал(а):
а я, опять же, немного поправлю:

while( $myrow = mysql_fetch_array( $result, MYSQL_ASSOC ) ) {
echo "Сотрудник № - ".$myrow['id']."<br>";
echo $myrow['name']."<br>";
echo $myrow['lastname']."<br>";
echo $myrow['dol']."<br>";
}

Спустя 1 минута, 2 секунды (14.07.2010 - 12:05) Basili4 написал(а):
MYSQL_ASSOC - это что за зверь ?

Спустя 9 минут, 10 секунд (14.07.2010 - 12:14) Ice написал(а):
Дело в том, что в mysql_fetch_array существует еще и третий параметр - константа, определяющая какой эррэй возвратить числовой или ассоциативный.
По умолчанию, если третьего параметра нет, функция возвращает сразу оба массива, так как третий параметр по умолчанию установлен в MYSQL_BOTH.
Так вот, чтобы функция возвратила только нужный массив, а не оба сразу ( представляешь, если выводятся сотни строк), требуется указывать и третий параметр: MYSQL_NUM или MYSQL_ASSOC.
А вообще, целесообразнее пользоваться функцией mysql_fetch_assoc, если требуется вывести ассоциативный массив.
Думаю, понятно изложил rolleyes.gif

Спустя 1 минута, 21 секунда (14.07.2010 - 12:15) sergeiss написал(а):
Цитата (Basili4 @ 14.07.2010 - 13:05)
MYSQL_ASSOC - это что за зверь ?

Вот тут очень неплохое описание есть wink.gif

Спустя 1 час, 20 минут, 11 секунд (14.07.2010 - 13:36) Basili4 написал(а):
sergeiss
Спасибо мне гугл и Ice все популярно разъяснили. я всегда mysql_fetch_row() пользуюсь мне както с циферами спокойней.

Спустя 5 минут, 37 секунд (14.07.2010 - 13:41) linker написал(а):
за глаза достаточно
mysql_fetch_assoc($result);

Спустя 3 минуты, 57 секунд (14.07.2010 - 13:45) sergeiss написал(а):
Цитата (Basili4 @ 14.07.2010 - 14:36)
. я всегда mysql_fetch_row() пользуюсь мне както с циферами спокойней.

Это хорошо, когда ты уверен, что порядок значений в выборке меняться не будет. А ты в этом уверен? Мало ли, будет добавлен какой-то столбец, который собьёт все твои цифры. А ассоциативная выборка не изменится! Только будет добавка небольшая в обработчике.

Спустя 7 минут, 55 секунд (14.07.2010 - 13:53) Basili4 написал(а):
sergeiss
тут вот какое дело если мне нужны какие то столбцы то я их и выбираю соответственно меняю обрабочик иногда не приходится менять обработчик

например заменив запрос Select FirstName на Select LastName не прийдется лезть в обработчик.

Но это лтшь моя блаж я понимаю что юзать mysql_fetch_assoc($result); более удобней и логичней. Беда в том что я привык видеть в индексах масивов цифры и мне как то не посебе когда используются названия полей к тому же иногда есть необходимость писать запросы типа
Select count(rrr) при использовании mysql_fetch_row можно не парится а иначе приходится дописывать Select count(rrr) as `count`




Спустя 7 минут, 11 секунд (14.07.2010 - 14:00) linker написал(а):
Basili4, ну это тебе хорошо, это ты знаешь что например field1 соответствует индексу 0, а кто другой заглянет в твой код и нихрена не поймет.

Спустя 29 минут, 8 секунд (14.07.2010 - 14:29) Basili4 написал(а):
linker
а не чего другим в моем коде делать я в команде не работаю.

Спустя 3 часа, 10 минут, 23 секунды (14.07.2010 - 17:40) Golovastik написал(а):
Скажите, а зачем ещё указывать в этой строке $db

$result = mysql_query("SELECT * FROM firma", $db);

Спустя 10 минут, 13 секунд (14.07.2010 - 17:50) Michael написал(а):
Указывать не обязательно если имеется одно текущее соединение с базой данных.

Спустя 10 минут, 39 секунд (14.07.2010 - 18:01) Golovastik написал(а):
А что означает, если написать вот такое после запятой $db)?

Спустя 7 минут, 11 секунд (14.07.2010 - 18:08) Michael написал(а):
Указываешь идентификатор соединения. Ведь соединиться из скрипта ты можешь одновременно с несколькими базами данных.
Вот из хелпа:
resource mysql_query ( string $query [, resource $link_identifier ] )

- в квадратных скобках означает, что необязательное.

И дальше объясняется, что если не указан $link_identifier, то последнее открытое предполагается. Если оно одно, то можно вообще не задумываться. Если несколько, то лучше указывать.

Спустя 42 минуты, 2 секунды (14.07.2010 - 18:50) sergeiss написал(а):
Цитата (Basili4 @ 14.07.2010 - 15:29)
а не чего другим в моем коде делать я в команде не работаю.

Ты сам в свой же код заглянешь через 3-4 месяца и ужаснешься smile.gif Скажешь сам себе, что лучше бы ассоциативные массивы использовал wink.gif

Спустя 2 минуты, 30 секунд (14.07.2010 - 18:52) Michael написал(а):
Не игнорируем также mysql_fetch_object.

Спустя 12 минут, 46 секунд (14.07.2010 - 19:05) Golovastik написал(а):
Скажите после вот этой строки:
$myrow = mysql_fetch_assoc($result);


Переменная myrow содержит в себе всю строку? Если у меня таблицы состоят из 3 столбцов, значит в переменную $myrow запишется первая строка, ячейка 1(1столбец),ячейка 2 (2-ой столбец), ячека 3(3-ий столбец)?
Все 3 ячейки запишутся?

Спустя 13 минут, 21 секунда (14.07.2010 - 19:18) Michael написал(а):
да, все запишется и будет называться - массив.

Спустя 3 минуты, 11 секунд (14.07.2010 - 19:22) Golovastik написал(а):
Все 3 ячейки запишутся? или всё зависит от запроса описанного в функции mysql_query?

Спустя 13 минут, 41 секунда (14.07.2010 - 19:35) Michael написал(а):
Цитата (Golovastik @ 14.07.2010 - 18:22)
Все 3 ячейки запишутся? или всё зависит от запроса описанного в функции mysql_query?

именно.

Вот так:
$result = mysql_query("SELECT * FROM firma", $db);
все столбцы таблицы участвуют.

А вот так:
$result = mysql_query("SELECT name, year FROM firma", $db);
- только два.

Спустя 59 минут, 46 секунд (14.07.2010 - 20:35) Golovastik написал(а):
Если запрос вернёт все столбцы, то есть 3, как бы выглядел новый созданный масив
$myrow если его просто записать?

Спустя 49 минут, 44 секунды (14.07.2010 - 21:25) Ice написал(а):

Array
(
[id] => 1
[name] => Вася
[stat] => модер
)
Array
(
[id] => 2
[name] => Петя
[stat] => супермодер
)
Array
(
[id] => 4
[name] => Федя
[stat] => админ
)
. . .

правда код из другого примера, бывшего сегодня, но суть одна - будет возвращено столько массивов, сколько строк будет соответствовать запросу. Каждый массив будет содержать поля (ячейки) с данными одной строки.

Спустя 2 часа, 4 минуты, 53 секунды (14.07.2010 - 23:30) Golovastik написал(а):
Все атрибуты name которые находятся внутри инпутов формы попадают в глобальный масив ПОСТ, при отправки формы?
Всё атрибуты name превращаются в переменные в пхп и эти сами переменные отправляются в глобальный масив ПОСТ,к которому получает доступ файл пхп, который был указан в актион формы?
Только атрибуты name попадают и ничего кроме них?

Спустя 16 минут, 5 секунд (14.07.2010 - 23:46) Ice написал(а):
всё, что в форме есть попадает автоматически в массив пост

Не атрибуты name, а значение поля name

Спустя 27 минут, 48 секунд (15.07.2010 - 00:14) Golovastik написал(а):
Значит один лишь валюе попадает от каждого инпута в масив ПОСТ и больше ничего кроме него?
Хорошо, ну а как же мы работаем с именами которые указывали в атрибуте name, если вы говорите что в глобальный масив пост оппадает только атрибут валюе?

Все значения инпутов, то есть все валюе каждого инпута и ничего кроме валюе, как валюе попадёт в масив пост?
Но в моём коде:


<html>
<head></head>
<body>
<form
action="mysql_insert.php" method="post" name="form">
<p>
Введите имя сотрудника: <br><input name="name" type="text" size="20" maxlength="40" >
<p>
Введите фамилию: <br><input name="lastname" type="text" size="20" maxlength="40" >
<p>
Введите должность:<br><input name="dol" type="text" size="20" maxlength="40" >
<p><input
name="submit" type="submit" value="Занести нового сотрудника в базу" >

</form>
</body>
</html>



Валюе в инпутах вначале не имеет значения, а потом получает его при манипуляциях в файле пхп, но манипуляция начинают после отправки формы методом пост в глобальный масив пост, как же тогда в масив пост попадает валюе, если в валюе добавляется значение какое-то после, что, значения name не попадают в масив пост сразу, толкьо валюе? Но как валюе, еслт оно вначале не установлено и его нету?

Спустя 13 минут, 44 секунды (15.07.2010 - 00:27) Ice написал(а):
В самом начале, если посмотреть на массив _POST, - он будет пуст
Array ()

После введения данных в поля формы и нажатия кнопки отправления формы на сервер, массив _POST заполняется

Array (

[name] => Vasya
[lastname] => Pupkin
[dol] => Seller

)

Спустя 26 минут, 43 секунды (15.07.2010 - 00:54) Golovastik написал(а):
То есть в массив пост н так заполянется как я думал?
Вначале попадают пустые значения от свойсв name, затем в файле пхп мы рабоатем с этиими значнеиями пустыми присвоив им какие-то а потом второй раз в массив пост попадают заполенненные значения?

Спустя 4 минуты, 3 секунды (15.07.2010 - 00:58) Ice написал(а):
в начале в массиве вообще ничего нет, а как только мы отправляем форму, массив заполняется. Один раз.

Спустя 36 минут, 29 секунд (15.07.2010 - 01:35) Golovastik написал(а):
То есть после нажатия на кнопку сразу валюе улетает в массив ПОСТ, и одновременно обрабатываются 2 файла после нажатия на субмит, первый файл с которого идёт отправка ,второй на какой идёт отправка, верно:?

Спустя 10 минут, 1 секунда (15.07.2010 - 01:45) Ice написал(а):
Нет, ведь форму отправляет браузер. А сервер смотрит, что там пришло.

Спустя 9 часов, 8 минут, 11 секунд (15.07.2010 - 10:53) tomash написал(а):
Golovastik
php файл формирует на сервере html - код и отдает его в браузер(клиенту), при оправке формы на сервер поступают данные которые попадают в массив POST, и файл php который был указан как обработчик формы формирует новый html -код и отправляет клиенту.

Спустя 14 часов, 31 минута, 49 секунд (16.07.2010 - 01:25) Golovastik написал(а):
Попробовал написать отдельно, для експеримента ещё раз, перестало работать. У меня база данных pinokio таблица pena.

nomer name lastname dol
1 Иванов Александр Инженер

Вот тренировочный код не сработал, выдал такую ошибку при заполнении формы и отправки в файл bd.php



Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in z:\home\xai.loc\www\bd.php on line 24


bd.php


<?php

if(isset($_POST['im']))
{
$im = $_POST['im'];
}

if(isset($_POST['fam']))
{
$fam = $_POST['fam'];
}


if(isset($_POST['otch']))
{
$otch = $_POST['otch'];
}


$db = mysql_connect("localhost","alex","12345");
mysql_select_db("pinokio",$db);
$result = mysql_query("insert into pena(2,im,fam,otch) VALUES($im,$fam,$otch)",$db);

$my_result = mysql_fetch_assoc($result);

echo $my_result['im'];


?>



Файл send_form.php

<html><head><title>Сайт</title>
<link
rel="stylesheet" type="text/css" href="stili.css">
</head>
<body>
<form
action="bd.php" method="post" name="n">
<b
id="oop">Введите </b> <b id="tata">имя</b><input type="text" name="im">
<p
id="vvv">
Введите <span id="salo">фамилию <input type="text" name="fam"></span>
<br><p
id="vvv">
Введите <span id="xleb">должность <input type="text" name="otch" ></span>
<br>
<p
id="vvv">
<input
name="knopka" type="submit" value="Записать в базу данных" >
</form>
</body>
</html>




stili.css

b#oop{color:#FF0000;}
b#tata{padding-right:1.4cm; }
span#salo{word-spacing:20px;}
span#xleb{word-spacing:10px;}
p#vvv{line-height:50px}


Спустя 52 минуты, 2 секунды (16.07.2010 - 02:17) Ice написал(а):
Цитата (Golovastik @ 16.07.2010 - 02:25)
if(isset($_POST['im']))
{
$im = $_POST['im'];
}

if(isset($_POST['fam']))
{
$fam = $_POST['fam'];
}


if(isset($_POST['otch']))
{
$otch = $_POST['otch'];
}

Это можно записать проще:

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$im = mysql_real_escape_string( $_POST['im'] );
$fam = mysql_real_escape_string( $_POST['fam'] );
$otch = mysql_real_escape_string( $_POST['otch'] );
}



Цитата (Golovastik @ 16.07.2010 - 02:25)
$result = mysql_query("insert into pena(2,im,fam,otch) VALUES($im,$fam,$otch)",$db);

Что за подозрительная двойка в списке полей?
пишем:
$result = mysql_query("insert into pena(im, fam, otch) VALUES('$im', '$fam', '$otch')",$db) 
/*на время разработки включим вывод ошибок*/
or die( mysql_error() )

Спустя 13 часов, 57 минут, 50 секунд (16.07.2010 - 16:14) Golovastik написал(а):
Написал так, и всё равно выдаёт ошибку:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in z:\home\xai.loc\www\bd.php on line 26



<?php

if(isset($_POST['im']))
{
$im = $_POST['im'];
}

if(isset($_POST['fam']))
{
$fam = $_POST['fam'];
}


if(isset($_POST['otch']))
{
$otch = $_POST['otch'];
}


$db = mysql_connect("localhost","alex","12345");
mysql_select_db("pinokio",$db);


$result = mysql_query("insert into pena(id,im,fam,otch) VALUES('',$im,$fam,$otch)");

$my_result = mysql_fetch_assoc($result);

echo $my_result['im'];

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.