D
D
Denis Yulamanov2020-03-03 21:31:27
PHP
Denis Yulamanov, 2020-03-03 21:31:27

Why does SQL query work incorrectly in PHP code?

SELECT * FROM `otzovik_table` WHERE `rating` <= 3 ORDER BY `rating` ASC


The query above does not work correctly, but if I change ASC to DESC everything is fine.
More precisely, it works in SQL itself, but not in PHP.
$query = "SELECT * FROM `otzovik_table` WHERE `rating` <= 4 ORDER BY `rating` ASC";


There are 3 records in the database that are < or = 4, but only the smallest one is displayed and that's it.

All PHP code
<?php 

include "connect.php";

$sort_hight_low = $_POST['rating_sort'];
if ($sort_hight_low == "") {
  // $sort_hight_low = 1;
}
$sort_type = $_POST['sort_type'];
$only_or = $_POST['only_or'];

echo "У/В - " .$sort_hight_low . " / ";
echo "ТОЛЬКО - ".$sort_type . " / ";
echo "НОМЕР - ".$only_or . " / ";

if ($sort_hight_low == 1) {
  if ($sort_type == 1) {
    $query = "SELECT * FROM `otzovik_table` WHERE `rating` = '$only_or'";
    $result = mysqli_query($link, $query);
  }
  else {
    $query = "SELECT * FROM `otzovik_table` WHERE `rating` <= '$only_or' ORDER BY `otzovik_table`.`rating` DESC";
    $result = mysqli_query($link, $query);
  }
}
if ($sort_hight_low == 2) {
  if ($sort_type == 1) {
    $query = "SELECT * FROM `otzovik_table` WHERE `rating` = '$only_or'";
    $result = mysqli_query($link, $query);
  }
  else {
    $query = "SELECT * FROM `otzovik_table` WHERE `rating` <= '$only_or' ORDER BY `rating` ASC ";
    $result = mysqli_query($link, $query);
  }
}

$query = "SELECT * FROM `otzovik_table` WHERE `rating` < 4 ORDER BY `rating` ASC";
$result = mysqli_query($link, $query);
if ($result) {
  $rows = mysqli_num_rows($result);

        for ($i=0; $i < $rows; ++$i) { 
          $row = mysqli_fetch_array($result);
        ?>
        <div class="out_block">
          <?php 
          echo "Имя: ";
          echo $row['name'];
          echo "<br>";
          echo "Почта: ";
          echo $row['email'];
          echo "<br>";
          echo "Сообщение: ";
          echo $row['message'];
          ?>
          <div class="rating_out">
          <?php
          for ($i=0; $i < $row['rating']; ++$i) { 
            ?>
            
              <div class="stars">
              </div>
            
            <?php
          }
          for ($i=0; $i < 5 - $row['rating']; ++$i) { 
            ?> 
              <div class="unstars">
              </div>

            <?php
          }
          
          ?>
          </div>
          <?php 
          echo "Дата отзыва: ";
          echo $row['date'];

          ?>
        </div>
        <?php 

  }
}
?>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
N
nokimaro, 2020-03-03
@DvDenis

loop in loop
overwrites $i causing the loop to terminate

for ($i=0; $i < $rows; ++$i) { 
   for ($i=0; $i < $row['rating']; ++$i) {  // <--- перезаписывает изначальный $i
   for ($i=0; $i < 5 - $row['rating']; ++$i) {  // <--- перезаписывает изначальный $i

Replace $i at the beginning with $row_num for example
for ($row_num=0; $row_num < $rows; ++$row_num) {

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question