2015-06-08 5 views
2

Итак, у меня были проблемы со школьным проектом, над которым я работаю. У меня есть список участников кулинарного конкурса. Есть 4 из 5 разных стран, и я хочу иметь возможность сортировать конкурсантов по странам или показывать все, если ни одна страна не выбрана.PHP SQL - Сортировать по стране

Я использовал if/else с использованием $_GET с ограниченным успехом.

if(isset($_GET['country'])){ 
    $sqlCountry = "SELECT * FROM countries WHERE country_name = ".$_GET['country']; 
}else{ 
    $sqlCountry = "SELECT * FROM countires"; 
} 
$queryCountry = mysqli_query($db,$sqlCountry); 
$count = 1; 

while($resCountry=mysqli_fetch_array($queryCountry)){ 
    if(isset($_GET['land'])){ 
     $country= $_GET['country']; 
    }else{ 
     $country= $resCountry['country_navn']; 
    } 

$sql_Cont = "SELECT * FROM contestants WHERE cont_country='$country'"; 
$query_Cont = mysqli_query($db,$sql_Cont); 

echo '<div class="mod12 mod_gen no-margin"> 
      <h2>'.$resCountry['land_navn'].'</h2>'; 
      while($res_Cont=mysqli_fetch_array($query_Cont)){ 
       $count++; 
       if($count % 2){ 
        $right = ''; 
       }else{ 
        $right = 'right'; 
       } 
       echo '<div class="mod6 mod_gen '.$right.'"> 
          <div class="venstre"> 
           <img src="images/placeholder.jpg"> 
          </div> 
          <div class="hoejre"> 
           <h3>'.$res_Cont['cont_name'].'</h3> 
           <h5>'.$res_Cont['cont_workplace'].' - '.$res_Cont['del_home_city'].'</h5> 
           <br> 
           <p>Speciality: '.$res_Cont['cont_speciality'].'<br><br> 
           '.nl2br($res_Cont['cont_text']).'</p> 
          </div> 
         </div>'; 
      } 
echo '</div>'; 

Все работает до того момента, когда я нажимаю на одну из ссылок, чтобы получить название страны в URL-адрес: index.php?page=2&country=Denmark, например. После этого я просто дам мне fetch_array ожидает, что параметр будет 1, булевой заданной ошибкой.

На мой взгляд, это должно сработать.

Любая помощь appriciated. С наилучшими пожеланиями ~ Barakna

+0

mysqli_query - Возвращает FALSE при сбое. Поэтому он ничего не говорит, и вы передаёте FALSE без проверки на mysql_fetch_array(). Кроме того, у вас есть куча sql-инъекций в код. прочитайте: http://stackoverflow.com/a/8801057/1116177 –

ответ

1

По вашему вопросу ваша ошибка является

Все работает до ... fetch_array ожидает параметр 1 будет,

Вы должны изменить свой запрос. Вместо вашего запроса

$sqlCountry = "SELECT * FROM countries WHERE country_name = ".$_GET['country']; 

Ваш запрос включает переменные в кавычки и имя таблицы и имя поля в обратном направлении. Также используйте mysqli_real_escape_string для предотвращения впрыска sql

$country = mysqli_real_escape_string($db, $_GET['country']); 

$sqlCountry = "SELECT * FROM `countries` WHERE `country_name` ='".$country."'"; 
+0

Это не связано с вопросом, человек. Вопрос, почему он не работает, а не проверка правильности ввода пользователем. –

+0

Ну, спасибо за ответ независимо. Это устранило мои проблемы. Thumbs up friend –

+0

Как это сделать? Извините за вопрос, впервые разместив здесь. –