html форма внутри php для l oop - кнопки редактирования / удаления - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь показать на странице события, которые пользователь сохранил в базе данных, и добавить кнопки редактирования + удаления. Работаю только с html, css и php. Я знаю, как отображать события, но не могу понять, как заставить работать кнопки, потому что отображение данных находится внутри for l oop. Я так старался, но понятия не имею, как заставить его работать. Кто-нибудь может мне помочь? Я готов к совершенно новому решению :-) Вот так выглядит код формы:

 for($i=0;$i<$count;$i++){    

     ?>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
         <div class="form-row align-items-center">
           <div class="col-auto">
             <label class="sr-only" for="editTime">Time</label>
             <input type="time" name="editTime" class="form-control mb-2" value="<?php echo $times[$i]; ?>">
           </div>
           <div class="col-auto">
             <label class="sr-only" for="editEvent">Event</label>
             <textarea name="editEvent" rows="2" cols="35" id="text" class="form-control"><?php echo $events[$i]; ?></textarea>
           </div>

          <div class="col-auto">
             <input type="submit" class="btn btn-success mb-2" name="btnEdit" value="Edit">
             <input type="submit" class="btn btn-danger mb-2" name="btnDel" value="Delete">

          </div>   
         </div>
    </form>
    <br>
 <?php
    array_push($casy2, $_POST["editTime"]);   

  }

И подготовленные запросы:

// ready for updating 
$stmt=$mysqli->prepare("UPDATE events SET time= ?, event= ? WHERE ID = ?");
            $stmt->bind_param("ssi", $newTime,  $newEvent, $idevent);
            $stmt->execute();
            $stmt->close(); 

// ready for deleting
$stmt = $mysqli->prepare("DELETE FROM events WHERE ID = ?");      
            $stmt->bind_param("i", $ids[$i]);
            $stmt->execute();
            $stmt->close();

 //user ID
    $stmt = $mysqli->prepare("SELECT ID FROM users WHERE nick = ?");
    $stmt->bind_param("s", $_SESSION["prezdivka"]);
    $stmt->execute();
    $stmt->store_result(); 
    $stmt->bind_result($id);
    $stmt->fetch();      
    $stmt->close();

    $eventDate=$_GET["date"];
   //users events for the specific date
   $stmt = $mysqli->prepare("SELECT ID, time, event FROM events WHERE u_id = ? AND date= ? ORDER BY time ASC");
   $stmt->bind_param("is", $id, $eventDate);
   $stmt->execute();

   $result = $stmt->get_result();
    if($result->num_rows === 0) exit('No event');
    while($row = $result->fetch_assoc()) {
       $ids[] = $row['ID'];   //event ID
       $times[] = $row['time'];
       $events[] = $row['event'];
    }

    $stmt->close();

Похоже так, мне нужно чтобы кнопки работали

1 Ответ

0 голосов
/ 28 мая 2020

Проверьте, установлена ​​ли какая-либо из кнопок отправки.

if (isset($_POST['btnEdit'])) {
    $newTime = $_POST['editTime'];
    $newEvent = $_POST['editEvent'];
    $idevent = $_POST['eventid'];
    $stmt=$mysqli->prepare("UPDATE events SET time= ?, event= ? WHERE ID = ?");
    $stmt->bind_param("ssi", $newTime,  $newEvent, $idevent);
    $stmt->execute();
    $stmt->close(); 
} elseif (isset($_POST['btnDel')) {
    $idevent = $_POST['eventid'];
    $stmt = $mysqli->prepare("DELETE FROM events WHERE ID = ?");      
    $stmt->bind_param("i", $idevent);
    $stmt->execute();
    $stmt->close();
}

Вам также необходимо добавить скрытый ввод с идентификатором события:

<input type="hidden" name="eventid" value="<?php echo $ids[$i]; ?>">
...