проверка, если строка n mysql уже существует и, если существует, отобразить другое эхо - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать веб-сайт электронной коммерции, на котором я буду размещать некоторые продукты. Клиенты могут помещать продукты в «список пожеланий», который им нравится, в то же время кнопка должна быть изменена на «собрана» из «собирать», как только они нажмите здесь . Мой код пока:

в dbconnect. php

function if_already_collected($collector_id){
    $db_conn=getConnection();
    mysqli_set_charset($db_conn,'utf8');

    if(!$db_conn)return false;


    $sql="SELECT collected_id from collection where collector_id=$collector_id";


    $result=$db_conn->query($sql);
    $db_conn->close();
    return $result->num_rows > 0;
}

в member_profile. php

<?php 
 include_once("dbconnection.php");
  if(!isset($_SESSION['logged_in'])){
    header("Location: login.php");
    die();
   }
 /*USER INFO : GETTING ID*/
$uname = $_SESSION['username'];      
$pword = $_SESSION['password'];
$members = display_member_info($uname, $pword);   
 while($member = $members->fetch_assoc()) :
    $collector_id=$member['id'];
endwhile ; 
?>

<div class="member_card">


    <div class="member">    
        <?php $mems= 
     serach_members($query_name,$query_elaka,$query_division,$query_district,$query_thana); ?>

            <?php while ($mem= $mems->fetch_assoc()) : ?>

     <?php if (if_already_collected($collector_id)) { ?>
                       <table>
                         <tr>
                        <td><a href="member_collect.php?get_id_cll=<?php echo $mem['id']; ?> && 
                        get_name_cll=<?php echo $mem['full_name']; ?>">Collect</a></td>
                    </tr>
                    <?php }else{  ?>

                       <tr>
                         <td>Collected</td>
                      </tr>
                   </table>
                    <?php } ?>
                 <?php endwhile; ?>

             </div>

этот код выдает «собирать» для всех продуктов, даже если я нажимаю «собирать» (также хранится в базе данных), и выдает «собранные» для всех продуктов, даже если я не нажимаю на любой, когда заменяю условное выражение этим:

<?php if (!if_already_collected($collector_id)) { ?>

1 Ответ

1 голос
/ 21 февраля 2020

Функция должна проверить, есть ли $mem['id'] в коллекции пользователя. В настоящее время он просто проверяет, есть ли у пользователя что-то в его коллекции, а не что-то конкретное c item.

function if_already_collected($collector_id, $collected_id){
    $db_conn=getConnection();
    mysqli_set_charset($db_conn,'utf8');

    if(!$db_conn)return false;

    $sql="SELECT 1 from collection where collector_id = ? and collected_id = ?";
    $stmt = $db_conn->prepare($sql);
    $stmt->bind_param("ii", $collector_id, $collected_id);
    $stmt->execute();
    $stmt->bind_result($ignore);
    $row = $stmt->fetch();

    $db_conn->close();
    return $row;
}

Тогда вы бы назвали это так:

     <?php if (if_already_collected($collector_id, $mem['id'])) { ?>

также показано, как преобразовать код для использования подготовленного оператора вместо замены переменных, чтобы защитить от SQL внедрения.

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