Вот у меня есть такая БД.
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
2)http://php.su/functions/?mysql_fetch_array тут
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. А что она возвращает? Массив. Правильно
Спустя 10 минут, 17 секунд (13.07.2010 - 23:38) Golovastik написал(а):
Ice , спасибо, очень хорошо объяснили.
Спустя 4 минуты, 34 секунды (13.07.2010 - 23:42) Ice написал(а):
Вам спасибо
Спустя 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, если требуется вывести ассоциативный массив.
Думаю, понятно изложил
По умолчанию, если третьего параметра нет, функция возвращает сразу оба массива, так как третий параметр по умолчанию установлен в MYSQL_BOTH.
Так вот, чтобы функция возвратила только нужный массив, а не оба сразу ( представляешь, если выводятся сотни строк), требуется указывать и третий параметр: MYSQL_NUM или MYSQL_ASSOC.
А вообще, целесообразнее пользоваться функцией mysql_fetch_assoc, если требуется вывести ассоциативный массив.
Думаю, понятно изложил
Спустя 1 минута, 21 секунда (14.07.2010 - 12:15) sergeiss написал(а):
Цитата (Basili4 @ 14.07.2010 - 13:05) |
MYSQL_ASSOC - это что за зверь ? |
Спустя 1 час, 20 минут, 11 секунд (14.07.2010 - 13:36) Basili4 написал(а):
sergeiss
Спасибо мне гугл и Ice все популярно разъяснили. я всегда mysql_fetch_row() пользуюсь мне както с циферами спокойней.
Спасибо мне гугл и 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`
тут вот какое дело если мне нужны какие то столбцы то я их и выбираю соответственно меняю обрабочик иногда не приходится менять обработчик
например заменив запрос 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 написал(а):
Указываешь идентификатор соединения. Ведь соединиться из скрипта ты можешь одновременно с несколькими базами данных.
Вот из хелпа:
- в квадратных скобках означает, что необязательное.
И дальше объясняется, что если не указан $link_identifier, то последнее открытое предполагается. Если оно одно, то можно вообще не задумываться. Если несколько, то лучше указывать.
Вот из хелпа:
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 месяца и ужаснешься Скажешь сам себе, что лучше бы ассоциативные массивы использовал
Спустя 2 минуты, 30 секунд (14.07.2010 - 18:52) Michael написал(а):
Не игнорируем также mysql_fetch_object.
Спустя 12 минут, 46 секунд (14.07.2010 - 19:05) Golovastik написал(а):
Скажите после вот этой строки:
Переменная myrow содержит в себе всю строку? Если у меня таблицы состоят из 3 столбцов, значит в переменную $myrow запишется первая строка, ячейка 1(1столбец),ячейка 2 (2-ой столбец), ячека 3(3-ий столбец)?
Все 3 ячейки запишутся?
$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 если его просто записать?
$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 попадают и ничего кроме них?
Всё атрибуты name превращаются в переменные в пхп и эти сами переменные отправляются в глобальный масив ПОСТ,к которому получает доступ файл пхп, который был указан в актион формы?
Только атрибуты name попадают и ничего кроме них?
Спустя 16 минут, 5 секунд (14.07.2010 - 23:46) Ice написал(а):
всё, что в форме есть попадает автоматически в массив пост
Не атрибуты name, а значение поля name
Не атрибуты name, а значение поля name
Спустя 27 минут, 48 секунд (15.07.2010 - 00:14) Golovastik написал(а):
Значит один лишь валюе попадает от каждого инпута в масив ПОСТ и больше ничего кроме него?
Хорошо, ну а как же мы работаем с именами которые указывали в атрибуте name, если вы говорите что в глобальный масив пост оппадает только атрибут валюе?
Все значения инпутов, то есть все валюе каждого инпута и ничего кроме валюе, как валюе попадёт в масив пост?
Но в моём коде:
Валюе в инпутах вначале не имеет значения, а потом получает его при манипуляциях в файле пхп, но манипуляция начинают после отправки формы методом пост в глобальный масив пост, как же тогда в масив пост попадает валюе, если в валюе добавляется значение какое-то после, что, значения name не попадают в масив пост сразу, толкьо валюе? Но как валюе, еслт оно вначале не установлено и его нету?
Хорошо, ну а как же мы работаем с именами которые указывали в атрибуте 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, - он будет пуст
После введения данных в поля формы и нажатия кнопки отправления формы на сервер, массив _POST заполняется
Array ()
После введения данных в поля формы и нажатия кнопки отправления формы на сервер, массив _POST заполняется
Array (
[name] => Vasya
[lastname] => Pupkin
[dol] => Seller
)
Спустя 26 минут, 43 секунды (15.07.2010 - 00:54) Golovastik написал(а):
То есть в массив пост н так заполянется как я думал?
Вначале попадают пустые значения от свойсв name, затем в файле пхп мы рабоатем с этиими значнеиями пустыми присвоив им какие-то а потом второй раз в массив пост попадают заполенненные значения?
Вначале попадают пустые значения от свойсв 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 -код и отправляет клиенту.
php файл формирует на сервере html - код и отдает его в браузер(клиенту), при оправке формы на сервер поступают данные которые попадают в массив POST, и файл php который был указан как обработчик формы формирует новый html -код и отправляет клиенту.
Спустя 14 часов, 31 минута, 49 секунд (16.07.2010 - 01:25) Golovastik написал(а):
Попробовал написать отдельно, для експеримента ещё раз, перестало работать. У меня база данных pinokio таблица pena.
nomer name lastname dol
1 Иванов Александр Инженер
Вот тренировочный код не сработал, выдал такую ошибку при заполнении формы и отправки в файл bd.php
bd.php
Файл send_form.php
stili.css
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'])) |
Это можно записать проще:
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'];
?>