Использование функции count для определения того, что отображается в операторе if

0

Я сталкиваюсь с некоторыми проблемами с запросом, который я пытаюсь сделать. Я пытаюсь создать шаблон для нескольких страниц для отображения определенных изображений, которые коррелируют с этой страницей.

У меня есть отдельные страницы, где я назначаю переменную для определения страницы (вы можете видеть, где я делаю это в своем коде с $page). Затем в моей базе данных, в рамках solution я называю конкретные записи одним из имен отдельных страниц. Например: если я назвал страницу "Бал", в соответствии с solution столбца базы данных, я бы назвал несколько записей Ball.

Затем в моем запросе я пытаюсь подсчитать, сколько записей существует, которые соответствуют $page. Если количество записей больше 0, я хочу отобразить код в инструкции else.

На данный момент мое соединение с базой данных работает. Я не печатаю никаких ошибок. Вы можете увидеть мое echo $solution_count; , Это показывает 0, но работает моя else-statement, что делает смысл 0.

Я делаю что-то неправильно с тем, как я пытаюсь подсчитать записи? Кто-нибудь видит, почему это не работает?

Таблица БД - показать таблицу создания

projectslider
CREATE TABLE 'projectslider' (
 'id' int(11) NOT NULL AUTO_INCREMENT,
 'solution' varchar(50) NOT NULL,
 'image' text NOT NULL,
 'alt' text NOT NULL,
 PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

Код на отдельных страницах:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$page = "enclosures";
include_once("projectSlider.php"); 
?>

Главная страница - projectSlider.php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$servername = 'localhost';
$username = 'root';
$password = '';

try {   
    $con = new PDO('mysql:host='.$servername.';dbname=mb', $username, $password);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //$page = mysql_real_escape_string($page);
    //SQL Call
    $sql_project = "
      SELECT *, COUNT(solution) AS solution_count
      FROM projectslider
      WHERE solution = '. $page .'
    ";

    if ($project_stmt = $con->prepare($sql_project)) {
        $project_stmt->execute();
        $project_rows = $project_stmt->fetchAll(PDO::FETCH_ASSOC);
        foreach ($project_rows as $project_row) {
            $solution_count = $project_row['solution_count'];
            echo $solution_count;
            $project_solution = $project_row['solution'];
            $project_img = $project_row['image'];
            $project_alt = $project_row['alt'];
            $project_img = '<img class="home-comment-profile-pic" src=" '. $project_img .'" alt="' . $project_alt .'">';
            if ($solution_count === 0) {
                echo 'No projects found.';
            } else {
                echo '<section id="solProj">';
                echo '<div class="projSlide">';
                echo $project_img;
                echo '</div>';
                echo '</div>';
            }
        }
    }
}   
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
  • 1
    Вы понимаете, что у вас неправильная конкатенация в тексте запроса?
  • 0
    Также вы используете === который также проверяет тип значения. var_dump($solution_count) и сравните его с 0.
Показать ещё 11 комментариев
Теги:
pdo

1 ответ

0

В одном проекте есть много слайдеров, для этого у вас должно быть два проекта таблиц и проектных лиц с отношениями.

таблица проектов:

CREATE TABLE 'projects' (

   'id' int(11) NOT NULL AUTO_INCREMENT,
   'project_name' varchar(50) NOT NULL

) 

projectsliders:

CREATE TABLE 'projectsliders' (

   'id' int(11) NOT NULL AUTO_INCREMENT,
   'solution' varchar(50) NOT NULL,
   'image' text NOT NULL,
   'alt' text NOT NULL,
   'project_id' int(11),
   PRIMARY KEY ('id')

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

выборка проекта для одного проекта, главная страница - projectSlider.php

Лучший способ извлечения проектов для одного проекта - использовать ООП, вы можете вызвать метод и передать идентификатор проекта, и метод должен вернуть вам массив с projectliders для этого проекта, но я улучшаю ваш код.

error_reporting(E_ALL);
ini_set('display_errors', 1);

$servername = 'localhost';
$username = 'root';
$password = '';

try {   
   $con = new PDO('mysql:host='.$servername.';dbname=mb', $username, 
   $password);
   $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  //$page = mysql_real_escape_string($page);
  //SQL Call
  $sql_project = "SELECT * FROM projectsliders ps inner join projects p
   on  p.id = ps.project_id
   WHERE p.project_name = '. $project_page .'";

  if ($project_stmt = $con->prepare($sql_project)) {

      $project_stmt->execute();

      $count = project_stmt->rowCount();

      if( $count  != 0 ){

         $project_rows = $project_stmt->fetchAll(PDO::FETCH_ASSOC);

         foreach ($project_rows as $project_row) {

            $project_solution = $project_row['solution'];
            $project_img = $project_row['image'];
            $project_alt = $project_row['alt'];
            $project_img = '<img class="home-comment-profile-pic" src=" '. 
            $project_img .'" alt="' . $project_alt .'">';

            echo '<section id="solProj">';
            echo '<div class="projSlide">';
            echo $project_img;
            echo '</div>';
            echo '</div>';

         }

       }else{
         echo 'No projects found.';
       }
     }
  }   
  catch(PDOException $e) {
      echo "Connection failed: " . $e->getMessage();
  }

Отдельные страницы:

error_reporting(E_ALL);
ini_set('display_errors', 1);
$project_page = "enclosures";
include_once("projectSlider.php"); 

Надеюсь, это поможет вам, наслаждаясь кодированием.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню