"PHP" / Говнокод #25191 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
<?php
if(isset($_GET['action']) && $_GET['action']=="add"){
        $id=intval($_GET['id']);
        if(isset($_SESSION['cart'][$id])){
        $_SESSION['cart'][$id]['quantity']++;
        }else{
$sql_s="SELECT * FROM products
WHERE id_product={$id}";
$query_s=mysqli_query($sql_s);
if(mysqli_num_rows($query_s)!=0){
$row_s=mysqli_fetch_array($query_s);
                $_SESSION['cart'][$row_s['id_product']]=array(
                "quantity" => 1,
                "price" => $row_s['price']  );
                }else{
                $message="This product id it's invalid!"; } } } ?>
<h1>Product List</h1>
                <?php
               if(isset($message)){
               echo "<h2>$message</h2>";  }
               ?>
<table>
<tr>
            <th>Name</th>
            <th>Description</th>
            <th>Price</th>
            <th>Action</th>
</tr>
        <?php
$mysqli = new mysqli('……','root','……','tutorials');
$sql = 'SELECT name,description,price, id_product FROM products'; // select from mysql
$result = $mysqli->query($sql);  
while($row = $result->fetch_array()){
    ?>
        <tr>
            <td><?php echo $row['name'] ?></td>
            <td><?php echo $row['description'] ?></td>
            <td><?php echo $row['price'] ?>$</td>
<td><a href="index.php?page=products&action=add&id=<?php echo $row['id_product'] ?>">Add to cart</a></td>
        </tr>
<?php
    }
?>
</table>

строки:
2 - Входящую переменную так никто не проверяет. Есть функции filter_input
3 - $_GET['id'] без проверки на существовании
9 - mysqli_query - 1) аргумент, Идентификатор соединения. 2) сам запрос
10 - процесс проверки num_rows глупый. Есть 0 ( ложь ), либо в остальных случаях истина.
12 - мы выбивали из запроса id_product чтобы узнать и подставить значение как ключ $_SESSION['cart'][$row_s['id_product']] ??? Уверяю, я знаю уже ключ: $_SESSION['cart'][$id]
30 - Глупая, тупая ошибка новичков. Постоянно на каждой логике кода, устанавливают новое соединение с бд. Нравится в постели оргия, любите много и сразу?

Говнокодер: rita345
https://php.ru/forum/threads/this-product-id-its-invalid.74253/

Запостил: MouseZver MouseZver, (Updated )

Комментарии (13) RSS

  • $id=intval($_GET['id']);

    Уже хорошо, хотя бы инъекция не пройдёт.
    Ответить
  • Это не говнокод. Это человек вообще не понимает, что делает. А 9 строка - ну, заменили mysql_query на mysqli_query, а про параметры забыли
    Ответить
    • Когда человек не понимает, что делает, у него как раз почти всегда и получается говнокод.
      Ответить
      • Я имею в виду, если я начну говорить по японски, это не будет плохой японский. Это будет набор звуков, для меня похожий на японский )
        Ответить
  • >3 - $_GET['id'] без проверки на существовании
    Не понял
    Ответить
    • Индекс 'id' может не существовать, тогда программа упадёт. Нужно проверить isset($_GET['id']) перед использованием.
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8