Следующая статья: Как подобрать ключевые слова на PHP?
mysql, select, value, index, name, echo, param, selected, link
Содержание
- Создание таблицы в MySQL
- Внесение данных в MySQL средствами PHP
- Основа PHP функции
- Тест PHP функции
- Выборка из таблицы MySQL
Создание таблицы в MySQL
Решение: Для примера создадим таблицу «country» для хранения названий стран и соответствующего им кода ISO (полагается что база данных «testbase» уже создана):
CREATE TABLE country ( country_id smallint(6) NOT NULL auto_increment, country_iso_code char(2) NOT NULL, country_name varchar(60) NOT NULL, PRIMARY KEY (country_id), UNIQUE country_id (country_id, country_iso_code, country_name), KEY country_id_2 (country_id, country_iso_code, country_name) );
Внесение данных в MySQL средствами PHP
Теперь, занесем в нее немножко данных:
<?php
$country=array();// Ассоциативный массив где: индекс=код ISO, значение=страна
$country['AF']='Afghanistan';
$country['AL']='Albania';
$country['DZ']='Algeria';
$country['AD']='Andorra';
$country['AO']='Angola';
$country['AQ']='Antarctica';
$country['AR']='Argentina';
$country['AM']='Armenia';
$country['AU']='Australia';
$country['AT']='Austria';
$country['AZ']='Azerbaijan';
$country['BS']='Bahamas';
$country['BH']='Bahrain';
$country['BD']='Bangladesh';
$country['BY']='Belarus';
$country['BE']='Belgium';
$country['BJ']='Benin';
$country['BM']='Bermuda';
$country['BT']='Bhutan';
$country['BO']='Bolivia';
$country['BA']='Bosnia-Herzegovinia';
$country['BW']='Botswana';
$country['BR']='Brazil';
$country['BN']='Brunei Darussalam';
$country['BG']='Bulgaria';
$country['BF']='Burkina Faso';
$country['BI']='Burundi';
$country['KH']='Cambodia';
$country['CM']='Cameroon';
$country['CA']='Canada';
$country['CV']='Cape Verde';
$country['CF']='Central African Republic';
$country['TD']='Chad';
$country['CL']='Chile';
$country['CN']='China';
$country['CO']='Colombia';
$country['KM']='Comoros';
$country['CG']='Congo';
$country['CR']='Costa Rica';
$country['HR']='Croatia';
$country['CU']='Cuba';
$country['CY']='Cyprus';
$country['CZ']='Czech Republic';
$country['DK']='Denmark';
$country['DJ']='Djibouti';
$country['DO']='Dominikanische Republik';
$country['EC']='Ecuador';
$country['EG']='Egypt';
$country['SV']='El Salvador';
$country['GQ']='Equatorial Guinea';
$country['EE']='Estonia';
$country['ET']='Ethiopia';
$country['FЦ']='Faroe Islands';
$country['FI']='Finland';
$country['FR']='France';
$country['GF']='French Guiana';
$country['PF']='French Polynesia';
$country['GA']='Gabon';
$country['GM']='Gambia';
$country['GE']='Georgia';
$country['DE']='Germany';
$country['GH']='Ghana';
$country['GI']='Gibraltar';
$country['GR']='Greece';
$country['GL']='Greenland';
$country['GP']='Guadeloupe';
$country['GT']='Guatemala';
$country['GN']='Guinea';
$country['GW']='Guinea-Bissau';
$country['GY']='Guyana';
$country['HT']='Haiti';
$country['VA']='Holy See';
$country['HN']='Honduras';
$country['HK']='Hong Kong';
$country['HU']='Hungary';
$country['IS']='Iceland';
$country['IN']='India';
$country['id']='Indonesia';
$country['IQ']='Irak';
$country['IR']='Iran (Islamic Republic of)';
$country['IE']='Ireland';
$country['IL']='Israel';
$country['IT']='Italy';
$country['CI']='Ivory Coast';
$country['JM']='Jamaica';
$country['JP']='Japan';
$country['JO']='Jordan';
$country['KZ']='Kazakhstan';
$country['KE']='Kenya';
$country['KP']='Korea (democratic Peoples Republic of)';
$country['KR']='Korea (Republic of)';
$country['KW']='Kuwait';
$country['LA']='Laos ';
$country['LV']='Latvia';
$country['LB']='Lebanon';
$country['LS']='Lesotho';
$country['LR']='Liberia';
$country['LI']='Liechtenstein';
$country['LT']='Lithuania';
$country['LU']='Luxembourg';
$country['MO']='Macau';
$country['MG']='Madagascar';
$country['MW']='Malawi';
$country['MY']='Malaysia';
$country['MV']='Maldives';
$country['ML']='Mali';
$country['MT']='Malta';
$country['MQ']='Martinique';
$country['MR']='Mauritania';
$country['MU']='Mauritius';
$country['MX']='Mexiko';
$country['MD']='Modavia';
$country['MC']='Monaco';
$country['MN']='Mongolia';
$country['MA']='Morocco';
$country['MZ']='Mozambique';
$country['NA']='Namibia';
$country['NP']='Nepal';
$country['NL']='Netherlands';
$country['NC']='New Caledonia';
$country['NZ']='New Zealand';
$country['NI']='Nicaragua';
$country['NE']='Niger';
$country['NG']='Nigeria';
$country['NO']='Norway';
$country['PK']='Pakistan';
$country['PA']='Panama';
$country['PG']='Papua New Guinea';
$country['PY']='Paraguay';
$country['PE']='Peru';
$country['PH']='Philippines';
$country['PL']='Poland';
$country['PT']='Portugal';
$country['PR']='Puerto Rico';
$country['RO']='Romania';
$country['RU']='Russian Federation';
$country['RW']='Rwanda';
$country['SM']='San Marino';
$country['SA']='Saudi Arabia';
$country['SN']='Senegal';
$country['SC']='Seychelles';
$country['SL']='Sierra Leone';
$country['SG']='Singapore';
$country['SK']='Slovakia';
$country['SI']='Slovenia';
$country['SB']='Solomon Islands';
$country['SO']='Somalia';
$country['ZA']='South Africa';
$country['ES']='Spain';
$country['LK']='Sri Lanka';
$country['SD']='Sudan';
$country['SR']='Suriname';
$country['SZ']='Swaziland';
$country['SE']='Sweden';
$country['CH']='Switzerland';
$country['SY']='Syrian Arab Republic';
$country['TW']='Taiwan';
$country['TZ']='Tanzania';
$country['TH']='Thailand';
$country['MK']='The former Yugoslav Republic of Macedonia';
$country['TG']='Togo';
$country['TT']='Trinidad and Tobago';
$country['TN']='Tunisia';
$country['TR']='Turkey';
$country['UG']='Uganda';
$country['UA']='Ukraine';
$country['AE']='United Arab Emirates';
$country['GB']='United Kingdom';
$country['US']='United States';
$country['UY']='Uruguay';
$country['UZ']='Uzbekistan';
$country['VE']='Venezuela';
$country['VN']='Vietnam';
$country['YE']='Yemen';
$country['YU']='Yugoslavia';
$country['ZR']='Zaire';
$country['ZM']='Zambia';
$country['ZW']='Zimbabwe';
mysql_connect('localhost','','');// Не забудте изменить!
mysql_select_db('testbase');
while(list($key,$name)=each($country))
{ $sql='INSERT `country` SET `country_iso_code`="'.$key.'", `country_name`="'.$name.'"';
$error=mysql_query($sql,$link);
if (!$error)
{ echo '<pre>Ошибка ввода строки '.$key.':'.mysql_error($link).'</pre>';
die;// остановка работы скрипта
}
}
echo 'Everything is nishtyak!';
?>
Основа PHP функции
Теперь, если все прошло без ошибок :), можно приступить к главному. Для начала решим в каком виде мы хотели бы видеть дискриптор <select>? Положим что вам быть не раз придется решать подобную задачу, да и просто ради удобства выделим наш код в отдельную функцию, которая будет находится в отдельном файле и подключаться по мере необходимости.
Назовем ее незатейливо - «select»:
<!-- select.inc.php -->
<?php
function select($result,$value_index=0,$text_index=1,$selected=1,$param=array())
// $result результат запроса SQL
// $value_index индекс в массиве для значения value (необязательный)
// $text_index индекс в массиве для текстового значения option (необязательный)
// $selected индекс в массиве для выбранного значения option (необязательный)
// $parametrs ассоциативный массив атрибутов дискриптора SELECT (необязательный)
{ echo '<select';
if (isset($param))
{ // Добавляем переданные через массив атрибуты
while (list($param_name,$param_value)=each($param))
{ if ($param_value=='multiple')// Здесь, по необходимости, можно добавить обработку JS
{ echo ' '.$param_value;
continue;
}
echo ' $param_name='.$param_value;
}
}
echo '>';
while($row=mysql_fetch_row($result))
{ if ($row[$value_index]==$selected)
{ echo '<option value="'.$row[$value_index].' selected="selected">';
echo $row[$text_index];
echo '</option>'."\n";
}
echo '<option value="'.$row[$value_index].'>'.$row[$text_index].'</option>'."\n";
}
echo '</select>';
}
Тест PHP функции
Теперь оттестируем нашу функцию:
<!-- test_select.php -->
<?php
include_once('select.inc.php');// Убедитесь, что оба файла находятся в одном каталоге
$host='localhost';// Не забудте изменить!
$user='';
$pass='';
$db='"testbase';
if (!$link=mysql_connect($host,$user,$pass))
{ echo 'Не могу соедениться с MySQL';
die;
}
if (!mysql_select_db($db,$link))
{ echo 'Не могу выбрать базу '.$db.'. Ошибка: '.mysql_error($link);
die;// остановка работы скрипта
}
if (!$r=mysql_query('SELECT * FROM country'))
{ echo 'Ошибка запроса '.mysql_error($link);
die;// остановка работы скрипта
}
Выборка из таблицы MySQL
Теперь в переменной $r находится результат выборки из таблицы «country». Важно заметить, что в результате могут быть задействованы множество полей таблицы (в нашем случае 3), так как мы полагаем, что запрос используется не только для генерации нашей менюшки, но еще для каких-то целей; а нам для <select>`а нужно только 2, поэтому в качестве параметров фунции могут передаваться также и номера полей. Помните, что после SQL-запроса вида:
SELECT * FROM table_name
В результате, поля будут располагаться так, как они были расположены в таблице при ее создании (В нашем случае порядок такой: country_id country_iso_code country_name) Так что перед тем как передавать эти параметры, убедитесь в том, что вы представляете себе структуру вашей таблицы, либо не используйте (*) а перечисляйте поля ручками :) Можно,также использовать функции mysql_list_fields() , mysql_num_fields(), mysql_field_name(). По умолчанию установлены данные из 1-го поля для значения value, из второго - для текстового значения option.
echo '<form>'; // Передаем атрибуты, для подробной информации читайте спецификацию HTML $discriptor_param=array(name=>'select_1',size=>'5',multiple); $value_index=1;// то есть, для значения value выводить строки из поля country_iso_code $text_index=2;// то есть, для текстового значения option выводит строки из поля country_name $selected='RU';// установить выбранным опцию, где value='RU' select($result,$value_index,$text_index,$selected,$discriptor_param); echo '<br /><br />'; // И еще разок: $discriptor_param=array(name=>'select_2'); $value_index=0;// то есть, для значения value выводить строки из поля country_id $text_index=2;// то есть, для текстового значения option выводит строки из поля country_name $selected='136';// установить выбранным опцию где value='136'; mysql_data_seek($result,0);// сбросим внутренний указатель результата select($result,$value_index,$text_index,$selected,$discriptor_param); echo '</form>'; mysql_free_result($result);// на любителя mysql_close($link);// Также на любителя :) ?>
Можно также, доработать функцию и добавить в нее обработку переданного в качестве параметра javascript. Функция не совсем оптимальна, но главное, что она показывает как решать подобные задачи. Удачи!