Ewan McQueen Ответов: 1

Не могу заставить этот код работать!


Привет,

Я пытаюсь отсортировать результаты поиска в двух столбцах (имя и цена) по возрастанию и убыванию параметров. Я использовал код, который нашел, но код требует, чтобы я добавил тег " id "к заголовкам "th", которые мне нужны, я пытался это сделать, но по какой-то причине не смог. Я очень новичок в кодировании и борюсь с этой проблемой, поскольку пытаюсь учиться на лету.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Jenewan Pets</title>
    <link rel="icon" type="image/gif/png" href="img/Logo.png"/>
    <link rel="stylesheet" type="text/css" href="css/main.css" />
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
  </head>
  <body>
    <body background="img/bckgrnd.png">
    <div id="container">
        <div id="header">
          <img src="img/Header.png" style="position: absolute; top: 0px;"/>
          <h1>
          <img src="img/logo.png" alt="logo" height="100px" width="100px"  border="0px" style=position:relative; />
          <div class="box">
            <div class="container-1">
                <form method="get" action="searchresults11.php" id="searchForm">
                <input type="text" id="searchBox" name="query" placeholder="Let's Sniff it Out...">
                  <div class="search-icon">
                    <img class="search-icon" img src="img/PawSearch.png" width="18" height="18" alt="search icon" />
                  </div>
            </div>
          </div>
        </h1>
    </div>
<div id="content">
      <div id="nav">
      <ul>
              <li><a class="selected" href="/index.php">Home</a></li>
              <li><a href="dogs.php">Dogs</a></li>
              <li><a href="">Cats</a></li>
              <li><a href="birds.php">Birds</a></li>
              <li><a href="">Reptiles/Exotic</a></li>
              <li><a href="">Aquatics</a></li>
          </ul>
        </div>
      <div id="Results">
        <h2>We sniffed and we found...</h2>
        <?php
        $con=mysqli_connect("localhost","root","","catalog");
        // Check connection
        if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        if(isset($_GET['query'])){
          $searchq = $_GET['query'];
          }
        $query = mysqli_query($con,"SELECT * FROM final_dog_catologue_full where
        keywords LIKE '%$searchq%' OR brand LIKE '%$searchq%' OR name LIKE '%$searchq%' LIMIT 0, 40") or
        die(mysqli_error("Sorry we lost the scent..."));

        echo "<table border='2'>
       <tr>
       <th>  </th>
       <th id="Name">Item Name</th>
       <th>Brand</th>
       <th id="Price">Price</th>
       </tr>";

        while($row = mysqli_fetch_array($query))
        {
        echo "<tr>";
        echo "<td><img src='img/".$row['Picture']."'></td>";
        echo "<td>" . $row['Name'] . "</td>";
        echo "<td>" . $row['Brand'] . "</td>";
        echo "<td>£" . $row['Retail_Price_With_Delievery'] . "</td>";
        echo "</tr>";
        }
        echo "</table>";


        mysqli_close($con);
?>
<script>

var table = $('table');

   $('Names, Price_Header')
       .wrapInner('<span title="sort this column"/>')
       .each(function(){

           var th = $(this),
               thIndex = th.index(),
               inverse = false;

           th.click(function(){

               table.find('td').filter(function(){

                   return $(this).index() === thIndex;

               }).sortElements(function(a, b){

                   return $.text([a]) > $.text([b]) ?
                       inverse ? -1 : 1
                       : inverse ? 1 : -1;

               }, function(){

                   // parentNode is the element we want to move
                   return this.parentNode;

               });

               inverse = !inverse;

           });

       });
       </script>

       </div>
    </div>
    <div id="footer">
        Copyright © 2017 Jenewan Pets

    <!-- jQuery first, then Tether, then Bootstrap JS. -->
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>



  </body>
</html>


Что я уже пробовал:

Я пробовал использовать одинарные кавычки в тегах заголовка таблицы "id", а также двойные кавычки. Я попытался изменить способ чтения из базы данных SQL. Но, к сожалению, мои навыки пока ограничены, так как я все еще изучаю различные аспекты кодов. У меня есть опция Javascript, которая, похоже, не работает, и я не знаю, почему.

1 Ответов

Рейтинг:
2

Patrice T

$query = mysqli_query($con,"SELECT * FROM final_dog_catologue_full where keywords LIKE '%$searchq%' OR brand LIKE '%$searchq%' OR name LIKE '%$searchq%' LIMIT 0, 40") or die(mysqli_error("Sorry we lost the scent..."));

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]

Цитата:
Я очень новичок в кодировании и борюсь с этой проблемой, поскольку пытаюсь учиться на лету.

Как правило, это неверная хорошая идея. Учитесь правильно найдите какой нибудь учебник чтобы начать работу
Этот сайт-хорошее начало:
W3Schools Online Web Tutorials[^]
Учебник по PHP 5[^]
Учебник По JavaScript[^]

[Обновление]
Цитата:
я проверил stackoverflow, и они сказали, что их это не немного смущает?

Простой тест
$myquery = "SELECT * FROM final_dog_catologue_full where keywords LIKE '%$searchq%' OR brand LIKE '%$searchq%' OR name LIKE '%$searchq%' LIMIT 0, 40";
echo $myquery;
$query = mysqli_query($con, $myquery) or die(mysqli_error("Sorry we lost the scent..."));

Если 3 LIKE '%$searchq%' изменяются вместе с текстом, который вы ищете, это SQL-инъекция.


Ewan McQueen

Ах да, конкатенация строк - это их защита от того, что они не уверены, что это значит?

Patrice T

"является ли их защита от этого"
Определение к чему?

Ewan McQueen

и могу ли я устранить mysql, используя вместо этого другую программу?

Patrice T

Да, вы можете заменить mysql другой программой, но это потребует изменений в найденном вами коде, и вы вернетесь к проблеме правильного обучения.

Ewan McQueen

я проверил stackoverflow, и они сказали, что их это не немного смущает?

Patrice T

прочтите эту ссылку из моего решения
PHP: SQL Injection-руководство пользователя[^]

Ewan McQueen

есть ли у них какие-либо программы для определения того, безопасно ли ваше кодирование или есть ли какие-либо инъекции в вашем кодировании?

Patrice T

Я ими не пользуюсь.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.