Skip navigation

Kölcsönzések felvétele és listázása

kolcsonzesek.php

A kölcsönzések felhasználó felülete különbözik mind a könyveket felvivő úrlaptól, mind pedig az olvasókat felvivőtől. A kölcsönzéseknél ugyanis nem adhtatunk meg akármilyen adatot, hiszen csak olyan könyv kölcsönözhető, amit nem vettek még ki, illetve csak olyan illető kölcsönözhet, aki beiratkozott  a könyvtárba. Ennek megfelelően a könyveknek is és az olvasóknak is készítünk egy-egy lenyíló listát. A könyvek listájába olyan könyveket soroluk fel, amelyek kölcsönözhetőek (vagyis ahol az olvasójegy mező értéke NULL). A megjelenítendő adatok közül nem lehet csupán egyik vagy másik attribútumot választani a KONYVEK sémából, hiszen a könyvek leltári száma egyedi, de nem informatív a felhasználó számára, a többi attribútum pedig nem egyedi. Azt a megoldást választjuk, hogy a könyvszámot és a könyv adatait egy sztringgé fűzzük össze, és így könyen olvashatóan, mégis egyértelműen ki tudjuk listázni a könyveket.

Az adatok összefűzését MySQL-ben végezzük, erre szolgál a CONCAT() függvény. A könyvek esetében az alábbi SQL utasítást kell kiadnunk:

SELECT konyvszam, CONCAT(konyvszam, ' - ', szerzo, ': ', cim, '. ', kiado, ' ', ev) AS konyv FROM KONYVEK WHERE olvasojegy IS NULL;

Fontos megjegyezni azt, hogy a lenyíló listáknál a <select> tag-ben kell megadni a változó nevét, amiben a feldolgozáshoz szeretnénk tárolni a szükséges adatokat és az <option> tag value attribútumában kell megmondanunk azt, hogy mi az az érték, amit továbbítunk. Korábban csak számokra láttunk példát. Itt a könyvek lenyíló listájában a value érékek a könyvszámok lesznek, az olvasóknál pedig az olvasójegy értékek. Így az űrlapról csak egy könyvszám-olvasójegy adatpárt továbbítunk feldolgozásra.

Az oldal alján szintén kilistázzuk a kikölcsönzött könyveket. Megjelenítjük az olvasó olvasószámát és nevét is kötőjellel elválasztva, valamint minden sorba kerül egy "Kölcsönzés törlése" feliratú gomb, ha törölni szeretnénk a kölcsönzést. Minden sorban a gomb egy-egy különálló űrlapon szerepel. A rekordra vonatkozó egyedi adatokat <input type="hidden"> tag-ekben tudunk továbbítani.

Az oldal forrásjódja az a következő:

<?php
include_once('db_fuggvenyek.php');
include_once('menu.php');
?>
<!DOCTYPE HTML>
<HTML>
<HEAD>
    <meta http-equiv="content-type" content="text/html; charset=UTF8" >
</HEAD>
<BODY>
    
<hr/>
<?php echo menu();?>
<hr/>

<h1>Új kölcsönzés</h1>

<form method="POST" action="kolcsonzesfelvitel.php" accept-charset="utf-8">
<table>
<tr>
<td>Könyv : </td>
<td>
<select name="valasztottKonyv">
<?php
    $szabadKonyvek = szabad_konyveket_listaz();
    while( $egySor = mysqli_fetch_assoc($szabadKonyvek) ) {
        echo '<option value="' . $egySor["konyvszam"] . '">' . $egySor["konyv"] . '</option>';
    }
    mysqli_free_result($szabadKonyvek);

?>
</select>
</td>
</tr>
<tr>
<td>Könyv címe: </td>
<td>
<select name="olvaso">
<?php
    $olvasok = olvasolistatLeker();
    while( $egySor = mysqli_fetch_assoc($olvasok) ) {
        echo '<option value="'.$egySor["olvasojegy"].'">'.
              $egySor["olvasojegy"]. ' - '.
              $egySor["nev"]. ', ' .
              $egySor["lakcim"] .'</option>';
    }
    mysqli_free_result($olvasok);

?>
</select>
</td>
</tr>

<tr>
<td></td>
<td><input type="submit" value="Elküld" /></td>
</tr>
</table>
</form>


<hr/>
<h1>Kölcsönzött könyvek listája</h1>

<table border="1">
<tr>
<th>Könyvszám</th>
<th>Cím</th>
<th>Szerző</th>
<th>Kiadó</th>
<th>Év</th>
<th>Olvasója</th>
</tr>

<?php

    $konyvek = kolcsonzott_konyvek_listaja(); // ez egy eredményhalmazt ad vissza
    
    // soronként dolgozzuk fel az eredményt
    // minden sort egy asszociatív tömbben kapunk meg
    while( $egySor = mysqli_fetch_assoc($konyvek) ) {
        echo '<tr>';
        echo '<td>'. $egySor["konyvszam"] .'</td>';
        echo '<td>'. $egySor["cim"] .'</td>';
        echo '<td>'. $egySor["szerzo"] .'</td>';
        echo '<td>'. $egySor["kiado"] .'</td>';
        echo '<td>'. $egySor["ev"] .'</td>';
        echo '<td>'. $egySor["olvaso"] .'</td>';
        echo '<td><form method="POST" action="kolcsonzestorles.php">
                  <input type="hidden" name="toroltkonyv" value="'.$egySor["konyvszam"].'" />
                  <input type="submit" value="Kölcsönzés torlése" />
                  </form></td>';
        echo '</tr>';
    }
    mysqli_free_result($konyvek); // töröljük a listát a memóriából

?>
</table>


</BODY>
</HTML>

szabad_konyveket_listaz()

Ez a függvény a db_fuggvenyek.php fájlban lett megvalósítva. Mint ahogyan az előbb említettük, a szabad könyveket egy lenyíló listában soroljuk fel. Ez a függvény egy olyan eredménytáblát ad vissza, amely egyik oszlopában a könyvszámok, másik oszlopában pedig a könyvadatok egyetlen sztringgé összefűzve szerepelnek. Az adatok összefűzését a MySQL CONCAT() függvényével készítettük.

function szabad_konyveket_listaz() {
    
    if ( !($conn = konyvtar_csatlakozas()) ) { // ha nem sikerult csatlakozni, akkor kilepunk
        return false;
    }
    
    // elokeszitjuk az utasitast
    $result = mysqli_query( $conn,"SELECT konyvszam, CONCAT(konyvszam, ' - ', szerzo, ': ', cim, '. ', kiado, ' ', ev) AS konyv FROM KONYVEK WHERE olvasojegy IS NULL") or die(mysql_error());
    
    
    mysqli_close($conn);
    return $result;
}

Licensed under the Creative Commons Attribution Non-commercial Share Alike License 4.0