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.

<?php
    include_once('db_fuggvenyek.php');
    include_once('menu.php');
?>
<!DOCTYPE HTML>
<HTML>
<HEAD>
    <meta http-equiv="content-type" content="text/html; charset=UTF8" >
    <style>
    label {
        margin: 5px;
        padding: 5px;
        text-align: left;
        display: inline-block;
        min-width: 120px;
    }
    input {
        margin: 5px;
        padding: 5px;
        text-align: left;
        display: inline-flex;
        vertical-align: bottom;
    }
    </style>
</HEAD>
<BODY>

<hr/>
   <?php echo menu();?>
<hr/>

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

<form method="POST" action="kolcsonzesfelvitel.php" accept-charset="utf-8">
<label>Könyv : </label>
<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>
<br>
<label>Könyv címe: </label>
<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>
<br>
<input type="submit" value="Elküld" />
</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;
}