簡體   English   中英

在 php foreach 循環中基於用戶 SESSION 隱藏和顯示按鈕

[英]Hide and show button based on user SESSION in php foreach loop

我試圖不向未將圖像上傳到網站的用戶顯示刪除按鈕,並且我希望僅對上傳特定圖像的用戶顯示刪除按鈕。 問題是,它在 foreach 循環中,我試過了

if($user_id == $_GET['id'] 

但它顯示了每個按鈕,但是當我放

if($user_id != $_GET['id']) 

所有按鈕消失。

這是我想顯示/隱藏的按鈕

<?php

require('dbconfig.php');

if(!$user->is_loggedIn()) {
    $user->Redirect('index.php');
}

$user_id = $_SESSION['user_session'];

$stmt = $db_conn->prepare("SELECT * FROM users WHERE user_id=:user_id");
$stmt->execute(array(":user_id"=>$user_id));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);

// print_r($userRow);


if(isset($_POST['ok'])) { 

    $folder = "/Library/WebServer/Documents/Website/uploads/";
    $image = $_FILES['image']['name']; 
    $path = $folder . $image ; 
    $target_file=$folder.basename($_FILES["image"]["name"]);
    $imageFileType=pathinfo($target_file,PATHINFO_EXTENSION);
    $allowed=array('jpeg','png' ,'jpg'); $filename=$_FILES['image']['name']; 
    $ext=pathinfo($filename, PATHINFO_EXTENSION); 

    if(!in_array($ext,$allowed)) { 
        echo "Sorry, only JPG, JPEG, PNG & GIF  files are allowed.";
    } else {
        $success = "Image uploaded successfully";
        move_uploaded_file( $_FILES['image'] ['tmp_name'], $path);  
        
        $stmt = $db_conn->prepare("INSERT INTO images (img, user_id) VALUES (:image, :user_id)");
        $stmt->bindparam(":image",$image);
        $stmt->bindparam(":user_id",$user_id);
        $stmt->execute();
    } 
} 

$subjects = $db_conn->prepare("SELECT img FROM images");
$subjects->setFetchMode(PDO::FETCH_ASSOC);
$subjects->execute();

$stmt = $db_conn->prepare("SELECT user_id FROM images");
$stmt->execute();
$nesto=$stmt->fetchAll(PDO::FETCH_ASSOC);


echo '<pre>';
print_r($nesto);
echo '</pre>';

// echo $nesto['user_id'];

$ids = $_GET['id'];
?>

<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Jekyll v4.0.1">
    <title>Management</title>

    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
    <!-- Custom styles for this template -->
    <link href="album.css" rel="stylesheet">
  </head>
  <body>
    <header>
        <div class="navbar navbar-dark bg-dark shadow-sm">
            <div class="container d-flex justify-content-between">
                <a href="#" class="navbar-brand d-flex align-items-center">
                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" aria-hidden="true" class="mr-2" viewBox="0 0 24 24" focusable="false"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle></svg>
                <strong>Pictures</strong>
                </a>
                <a href="#">Home</a>
                <a href="<?php echo 'profile.php?id=' . $user_id; ?>">Profile</a>
            </div>
        </div>
    </header>

<main role="main">
  <section class="jumbotron text-center">
    <div class="container">
      <h1>Shared Gallery</h1>
      <p class="lead text-muted"><?php print($userRow['user_name']); ?></p>
      <p>
      <p><?php echo $success; ?></p>
        <!-- Upload Image Form -->
        <div>
          <form method="POST" enctype="multipart/form-data"> 
            <input type="file" name="image" /> 
            <input type="submit" name="ok"/> 
          </form>
        </div>
        <!-- End Upload Image Form -->

        <a href="logout.php" name="logoutusr" class="btn btn-primary my-2">Logout</a>
      </p>
    </div>
  </section>

  <div class="album py-5 bg-light">
    <div class="container">

      <div class="row">

        <!-- START -->
        <?php foreach($subjects as $subject) { ?>
        <div class="col-md-4">
          <div class="card mb-4 shadow-sm">
            <img src="uploads/<?php echo $subject['img']; ?>" class="bd-placeholder-img card-img-top" width="100%" height="225" focusable="false"/>
            <div class="card-body">
              <p class="card-text">
                  <ul>
                      <li>Username</li>
                      <li>Email</li>
                      <li>Address</li>
                  </ul>
              </p>
              <div class="d-flex justify-content-between align-items-center">
                <div class="btn-group">

               THIS IS THE BUTTON I WANT TO SHOW AND HIDE
                    <button type="button" class="btn btn-sm btn-outline-secondary">Remove</button>
               THIS IS THE BUTTON I WANT TO SHOW AND HIDE
                </div>
                <small class="text-muted">9 mins</small>
              </div>
            </div>
          </div>
        </div>
        <?php } ?>
        <!-- END -->
                      
      </div>
    </div>
  </div>

</main>

<footer class="text-muted">
  <div class="container">
    <p class="float-right">
      <a href="#">Back to top</a>
      <a href="<?php echo 'index.php' ?>">Back to index</a>
    </p>
  </div>
</footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
      <script>window.jQuery || document.write('<script src="/docs/4.5/assets/js/vendor/jquery.slim.min.js"><\/script>')</script><script src="/docs/4.5/dist/js/bootstrap.bundle.min.js" integrity="sha384-1CmrxMRARb6aLqgBO7yyAxTOQE2AKb9GfXnEo760AUcUmFx3ibVJJAzGytlQcNXd" crossorigin="anonymous"></script>

</body></html>

如果您將這 2 個查詢更改為一個查詢,您將獲得一個包含 img 和用戶 ID 的結果集,然后您可以使用它與登錄的用戶進行比較

//$subjects = $db_conn->prepare("SELECT img FROM images");
//$subjects->setFetchMode(PDO::FETCH_ASSOC);
//$subjects->execute();

//$stmt = $db_conn->prepare("SELECT user_id FROM images");
//$stmt->execute();
//$nesto=$stmt->fetchAll(PDO::FETCH_ASSOC);

替換為

$result = $db_conn->query("SELECT img, user_id FROM images");
$subjects = $result->fetchAll(PDO::FETCH_ASSOC);

然后在你的按鈕周圍你可以做

<?php
    // If this user uploaded this image they are allowed to remove it
    if ($subject->user_id == $_SESSION['user_session']) :    
        <button type="button" class="btn btn-sm btn-outline-secondary">Remove</button>
    endif;
?>

重要說明我在此代碼中沒有看到session_start() ,因為您正在使用$_SESSION您需要在此腳本頂部的其中一個。

我決定這樣做這對我來說非常有用。

    <!-- START -->
    <?php foreach($subjects as $subject) : ?>
    <div class="col-md-4">
      <div class="card mb-4 shadow-sm">
        <img src="uploads/<?php echo $subject['img']; ?>" class="bd-placeholder-img card-img-top" width="100%" height="225" focusable="false"/>
        <div class="card-body">
          <p class="card-text">
         
              <ul>
                  <li><?php echo $subject['img_id']; ?></li>
                  <li><?php echo $subject['user_name']; ?></li>
                  <li><?php echo $subject['user_email']; ?></li>
                  <li>Address</li>
              </ul>
         
          </p>
          <div class="d-flex justify-content-between align-items-center">
            <div class="btn-group">
          <?php foreach($subject as $val) : ?>
           <?php if ($user_id == $_SESSION['user_session'] && $val == $user_id) : ?>
            <?php $id = $subject['img_id']; ?>
            <form method="POST" action="<?php echo "delete.php?id=" . $subject['img_id']?>">
                <!-- <button name="remove" type="button" class="btn btn-sm btn-outline-secondary">Remove</button> -->
                <input type="hidden" name="del" value="1" />
            
                <input type="submit" name="del"  class="btn btn-sm btn-outline-secondary" value="Remove" />

           </form>
           <?php endif; ?>
           <?php endforeach; ?>
            </div>
          </div>
        </div>
      </div>
    </div>
           <?php endforeach; ?>
    <!-- END -->

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM