Данные не отображаются, пока они находятся в таблице - PullRequest
0 голосов
/ 20 апреля 2020

В настоящее время я создаю поисковую систему, используя javascript (для поиска в реальном времени) и php (для ссылки на базу данных). На самом деле мой запрос работает нормально, единственная проблема в том, что он не отображает информацию о другой таблице (см. Мой код / ​​пояснения ниже) .

$search_val = htmlspecialchars($_POST['search_term']);
if(isset($search_val))
{
  if (empty($search_val)) {
    echo "";
    exit();
  }
  // $sql = "(SELECT 'steam' as identifier, firstname, lastname FROM users WHERE firstname LIKE '%$search_val%' OR lastname LIKE '%$search_val%') UNION (SELECT 'receiver' as identifier, date, content FROM bills WHERE date LIKE '%$search_val%' OR content LIKE '%$search_val%')
  // $sql = "SELECT * FROM users LEFT JOIN bills ON users.steam = bills.receiver WHERE (users.firstname LIKE '%$search_val%' OR users.lastname LIKE '%$search_val%' OR bills.date LIKE '%$search_val%' OR bills.content LIKE '%$search_val%' OR bills.amount LIKE '%$search_val%' OR bills.id LIKE '%$search_val%')";
  $nRows = $vlife->query("SELECT COUNT(*) FROM users LEFT JOIN bills ON CONCAT(users.firstname, users.lastname) = bills.receiver
  WHERE (users.firstname LIKE '%$search_val%' OR CONCAT(users.firstname,' ',users.lastname) LIKE '%$search_val%'
  OR users.lastname LIKE '%$search_val%' OR bills.date LIKE '%$search_val%' OR bills.content LIKE '%$search_val%'
  OR bills.amount LIKE '%$search_val%' OR bills.id LIKE '%$search_val%')")->fetchColumn();
  if ($nRows == 0) {
    echo "<div class='center'>La base de données ne contient aucuns <span style='font-weight:700;'>".$search_val."</span></div>";
    exit();
  } else {
    echo '<div class="center">Il y a  <span style="font-weight:700;">$nRows "$search_val"</span> dans la base de données</div>';
  }

  $sql = "SELECT * FROM users LEFT JOIN bills ON CONCAT(users.firstname, users.lastname) = bills.receiver
  WHERE (users.firstname LIKE '%$search_val%' OR CONCAT(users.firstname,' ',users.lastname) LIKE '%$search_val%'
  OR users.lastname LIKE '%$search_val%' OR bills.date LIKE '%$search_val%' OR bills.content LIKE '%$search_val%'
  OR bills.amount LIKE '%$search_val%' OR bills.id LIKE '%$search_val%')";
  $statement = $vlife->query($sql);
  while ($data = $statement->fetch()) {
    echo "<div class='row'>";
      echo "<div class='col s12 m4 l3'>";
        echo "<div class='center'><img src='https://pngimage.net/wp-content/uploads/2018/06/user-logo-png-3.png' alt='id' style='width:90%;'></div>";
        echo "<h5 class='".$col." black uppercase' style='font-weight:500;padding-left:10px;font-size:28px;'><i class='fas fa-user'></i> Identité</h5>";
        echo "<h6 class='uppercase $txtcol' style='font-weight:700'>Nom</h6>";
        echo $data['lastname'];
        echo "<h6 class='uppercase $txtcol' style='font-weight:700'>Prénom</h6>";
        echo $data['firstname'];
        echo "<h6 class='uppercase $txtcol' style='font-weight:700'>Age</h6>";
        echo $data['year']."ans";
        echo "<h6 class='uppercase $txtcol' style='font-weight:700'>Adresse</h6>";
        echo $data['adress'].".";
        echo "<hr/>";
        echo "<a class='$col waves-effect waves-light black-text btn'>button</a>";
      echo "</div>";
      echo "<div class='col s12 m8 l9'>";
        echo "<h5 class='".$col." black uppercase' style='font-weight:500;padding-left:10px;font-size:28px;'><i class='fas fa-bookmark'></i> Casier Judicaire</h5>";
        echo $data['date']."<br>";
        echo $data['content']."<br>";
        echo $data['amount']."$<br>";
      echo "</div>";
    echo "</div>";
    echo "<hr>";

    // I will have to change that i know :)
  }
  $statement->closeCursor();
  exit();
}

Мои "пользователи Таблица: users table content

Моя таблица «счетов»: bills table content

Результаты: results

Как видите, эта часть не показывает:

echo $data['date']."<br>";
echo $data['content']."<br>";
echo $data['amount']."$<br>";

Есть идеи?

PS: Я знаю, что проблема возникает из SQL но я не знаю, что делать, я пробовал много вещей, таких как UNION (ALL) (отображать больше, чем ожидалось) и LEFT JOIN (отображает не все)

1 Ответ

1 голос
/ 20 апреля 2020

Мне кажется, что у вас есть ошибка в вашем запросе .. в частности, на ON из LEFT JOIN, посмотрите на него:

FROM users LEFT JOIN bills ON CONCAT(users.firstname, users.lastname) = bills.receiver

Если вы объедините две строки, такие как эээ, "Red" и "John", результат, очевидно, будет "RedJohn", в то время как в bills.receiver между двумя строками есть пробел.

Вам необходимо также указать пробел между именем и фамилией для объединение (как вы делаете в), чтобы найти что-то в нужной таблице.

Кроме того, я предлагаю вам попробовать запрос непосредственно из sql клиента, чтобы проверить, что облегчает исправление муха, пока вы экспериментируете.

Редактировать:

Также, если вы посмотрите, где вы, проверьте это:

WHERE (users.firstname LIKE '%$search_val%' 
    OR CONCAT(users.firstname,' ',users.lastname) LIKE '%$search_val%'
    OR users.lastname LIKE '%$search_val%'

Не можете ли вы просто проверить с помощью concat выражение? Два других являются избыточными, так как вы используете LIKE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...