WebCreativo

Рейтинг
10
Регистрация
26.07.2013

<?php

/*-----------------Подключение к базе данных----------------*/
function db_connect()
{
$host='localhost'; // имя хоста (уточняется у провайдера)
$database='data'; // имя базы данных, которую вы должны создать
$user='user'; // заданное вами имя пользователя, либо определенное провайдером
$pswd='123456'; // заданный вами пароль

$connection = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_query("SET NAMES utf8");
mysql_select_db($database) or die("Не могу подключиться к базе.");

return $connection;
}


/*-----------------////////////////////////----------------*/
/*-----------------Вывод стран на страницу страны----------------*/
function db_result_to_array($result)
{
$res_array = array();

$count = 0;

while($row = mysql_fetch_array($result))
{
$res_array[$count] = $row;

$count++;
}

return $res_array;
}


function get_countries()
{
db_connect();

$query = "SELECT * FROM countries";

$result = mysql_query($query);

$result = db_result_to_array($result);

return $result;
}

/*-----------------////////////////////////----------------*/

/*-----------------Вывод страны на страницу страны----------------*/

function get_country($id)
{
db_connect();

/* $query = ("SELECT * FROM countries WHERE iso='$id' "); */
$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");

$result = mysql_query($query);

$row = mysql_fetch_array($result);

return $row;

}

/*-----------------////////////////////////----------------------*/

/*-----------------Вывод городов на страницу страны----------------*/
function get_city($id)
{
db_connect();

$query = ("SELECT * FROM cities WHERE name='$id' ");

$result = mysql_query($query);

$row = mysql_fetch_array($result);

return $row;

}

?>
olympteka:
сделайте print_r($country). В массиве тоже буквы?

Выводит вот такое

Array ( [0] => PT [iso] => PT [1] => Portugal [local_name] => Portugal [2] => [name] => )

olympteka:
$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' "); - уберите второе iso,

т.е

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");//название результативных полей не повторять
если iso не нужно, можете в селекте вообще его исключить

при выводе в шаблоне, как я понимаю = $item['local_name'] - для страны, $item['name'] - для города

Делайте хотябы так для числовых значений
$id = (int)$_GET['id'];

---------- Добавлено 31.12.2013 в 03:18 ----------

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' "); - уберите второе iso,

т.е

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");//название результативных полей не повторять
если iso не нужно, можете в селекте вообще его исключить

при выводе в шаблоне, как я понимаю = $item['local_name'] - для страны, $item['name'] - для города

Делайте хотябы так для числовых значений
$id = (int)$_GET['id'];

хотя iso строковое, тогда использовать можно
if(strlen($_GET['id'])!=3 OR !preg_match("/^([a-z])+$/",$_GET['id']))
{
die('Убейтесь об стену');
}
где 3 - кол-во символов, или в ISO их 2?, [a-z] - только строковые, если нужны и заглавные, тогда[A-Za-z]

Сделал, все как вы написали, но выводит только буквы B

olympteka:
SELECT c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2
FROM countries AS c
LEFT JOIN cities AS ci ON c.iso=ci.iso
WHERE c.iso='$id'

где c.f1 AS f1, c.f2 AS f2, ci.f1 AS f1, ci.f2 AS f2 необходимые поля из соответствующих таблиц - как они там озаглавлены и какие нужны вам виднее

Сделал как вы написали

$query = ("SELECT c.iso AS iso, c.local_name AS local_name, ci.iso AS iso, ci.name AS name FROM countries AS c LEFT JOIN cities AS ci ON c.iso=ci.iso WHERE c.iso='$id' ");

Но к сожалению выводит просто буквы(A и C) в списке вместо названий городов.

Для вывода использую

<?php 

$id = $_GET['id'];
$country = get_country($id);
foreach($country as $item):?>
<li class="hl-list-list-item"><a href="<?php echo $item['name']?>"><?php echo $item['name']?></a></li>
<?php endforeach;?>


---------- Добавлено 31.12.2013 в 02:46 ----------

dkameleon:
хотя бы интвал делайте, а то взломают вас.

Не могли бы вы написать, как обезопасить от взлома, где можно почитать про интвал

12
Всего: 14