Wątek przeniesiony 2018-12-16 09:38 z Bazy danych przez Patryk27.

Przycisk button z przedłużeniem

0

Witam.
Mam tabele Moje wypożyczenia i do każdego rekordu w tabeli jest przypisany przycisk Przedłuż, który ma tylko mieć możliwość przedłużenia danej książki tylko raz. Nie wiem niestety jak zrobić by tylko jedna książka się przedłużała a nie wszystkie oraz żeby była możliwość przedłużenia tylko raz. Bardzo proszę o pomoc z góry dziękuje.

<?php
include ("includes/connect.php");
header('Content-Type: text/html; charset=UTF-8');									

$stan = mysqli_query($connect, "select * from wypozyczenie join ksiazka on wypozyczenie.id_ksiazka=ksiazka.id_ksiazka join autor on autor.id_autor=ksiazka.id_autor where wypozyczenie.id_czytelnik='".$_SESSION['id_czytelnik']."'");

if(mysqli_num_rows($stan)>0){
   echo "<style>thead, td, th { border: 1px solid grey ;table-layout: auto;  } </style>";
   echo "<table>";
   echo "<thead>";
   echo "<tr>";
   echo "<th><b>Tytuł</b></th><th><b>Autor</th><th><b>Data wypożyczenia</th><th><b>Data oddania</th><th><b>Przedłuż</th>";
   echo "</tr>";
   echo "</thead>";
   echo "<tbody>";

while($row = mysqli_fetch_assoc($stan)) {
  echo "<tr> <th>".$row['tytul']."</th><td>".$row['imie_autor']." ".$row['nazwisko_autor']."<td>".$row['data_wypozyczenia']."<td>".$row['data_oddania']."
  <td><form method='POST' action='moje-wypozyczenia.php'>
  <input type='submit' name='submit' value='Przedłuż'/>
  <input type='hidden' name='ktory' value='$row[id_ksiazka]'/>
  </form></tr>";	

if(isset($_POST['ktory'])){
   if($row['id_ksiazka']==$_POST['ktory'])
{
	$update = "Update wypozyczenie set data_oddania =adddate(data_oddania, 30)";
if(mysqli_query($connect, $update)){
	echo "Przedłużyłeś książkę";
}
header('Location: http://localhost/projekt1/moje-wypozyczenia.php');
}
}								
}
       echo "";
       echo "</tbody>";
       echo "</table>";
}
else
{
       echo "Brak wypożyczonych książek"."</br>";
}
									
?>
1

Skoro robisz taka funkcjonalność to nie musisz używać formularzy. Wystarczy zwykły link z zaszytym id książki która przedłużasz, np
.. href="moja_obsluga_zdarzenia.php?bookId=256".

Następnie musisz po stronie kodu php zapisać informacje w bazie za dana książka, a dokładniej czas wypożyczenia został przedłuzony (zakładam że dla aktualnie zalogowanego usera, wiec id wypozyczajacego gdzieś powinno być).

Generujac widok(html) możesz też sprawdzać czy książka była już przedłużana (wyciagniesz z bazy te dane) i wtedy pomijasz wyświetlanie przycisku/linka przy danej pozycji.

1

W zapytaniu brakuje identyfikatora książki którą chcesz przedłużyć dla tego aktualizuje wszystkie.

    $update = "Update wypozyczenie set data_oddania =adddate(data_oddania, 30) WHERE `id_ksiazka` = '".$_POST['ktory']."';";

lepszym rozwiązaniem będzie link jak pisze @axelbest
Przykład przedluz.php?book=xxx

<?php
include ("includes/connect.php");

$update = "UPDATE `wypozyczenie` SET `data_oddania` = adddate(data_oddania, 30) WHERE `id_ksiazka` = '".$_GET['book']."' AND `id_czytelnik` = '".$_SESSION['id_czytelnik']."';";

if(mysqli_query($update)) {
header("Location: ./moje-wypozyczenia.php?status=success");
} else {
header("Location: ./moje-wypozyczenia.php?status=fail");
}
?>

lub Ajax z jQuery

0
PiDev napisał(a):

W zapytaniu brakuje identyfikatora książki którą chcesz przedłużyć dla tego aktualizuje wszystkie.

    $update = "Update wypozyczenie set data_oddania =adddate(data_oddania, 30) WHERE `id_ksiazka` = '".$_POST['ktory']."';";

lepszym rozwiązaniem będzie link jak pisze @axelbest
Przykład przedluz.php?book=xxx

<?php
include ("includes/connect.php");

$update = "UPDATE `wypozyczenie` SET `data_oddania` = adddate(data_oddania, 30) WHERE `id_ksiazka` = '".$_GET['book']."' AND `id_czytelnik` = '".$_SESSION['id_czytelnik']."';";

if(mysqli_query($update)) {
header("Location: ./moje-wypozyczenia.php?status=success");
} else {
header("Location: ./moje-wypozyczenia.php?status=fail");
}
?>

lub Ajax z jQuery

A jeśli robię w ten pierwszy sposób to jak zrobić by max jedno przedłużenie było ?

1
Beata Skiba napisał(a):

A jeśli robię w ten pierwszy sposób to jak zrobić by max jedno przedłużenie było ?

dodaj kolumnę (typu boolen) z domyślną wartością 0.
Jeśli klient przedłuży wypożyczenie to zmień datę i ustaw wartość kolumny na 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1