Boekleen app

[php]<?php include("/path/pdo/common.inc.php"); ?>

<?php //See if the request contains the book ID $id = (int)$_REQUEST["book"]; if(!$id){ header("Location: books.php"); exit; } // Now see if the form was submitted $warnings = array(); if(isset($_POST['submit'])){ $submit = $_POST['submit']; }{ // Require that the borrower's name is entered if(!$_POST['name']) { $warnings[] = 'Please enter borrower\'s name'; } else { // Form is OK, "lend" the book $conn->beginTransaction(); try { $stmt = $conn->query("SELECT copies FROM books WHERE id=$id"); $copies = $stmt->fetchColumn(); $stmt->closeCursor(); if($copies > 0) { // If we can lend it $conn->query("UPDATE books SET copies=copies-1 WHERE id=$id"); $stmt = $conn->prepare("INSERT INTO borrowers(book, name, dt) VALUES(?, ?, ?)"); $stmt->execute(array($id, $_POST['name'], time())); } else { // Else show warning $warnings[] = 'There are no more copies of this book available'; } $conn->commit(); } catch(PDOException $e) { // Something bad happened // Roll back and rethrow the exception $conn->rollBack(); throw $e; } } // Now, if we don't have errors, // redirect back to books.php if(count($warnings) == 0) { header("Location: books.php"); exit; } // otherwise, the warnings will be displayed } // Display the header showHeader('Lend Book'); // If we have any warnings, display them now if(count($warnings)) { echo "Please correct these errors:
"; foreach($warnings as $w) { echo "- ", htmlspecialchars($w), "
"; } } // Now display the form ?> Please enter borrower's name:
<?php // Display footer showFooter(); ?>[/php]

Wat uitleg over de code; graag hoor ik of er verbeteringen kunnen plaats vinden maar wat vooral belangrijker is is waarom en hoe zodat ik meer kan leren natuurlijk :slight_smile:
De pagina heet lendbook.php en het is een script die doormiddel van een sql query het inventory van de boeken verminderd met 1 stuk.

Deze pagina is onderdeel van een bieb app die ik gemaakt hebt.

  • Regel 1 bevind zich een include pagina waarin een aantal functies aanwezig zijn zoals showFooter showHeader en de pdo database connectie.

  • Regel 3tm9 controleer ik of de “id” meegenomen is van de books.php pagina, als dat niet het geval is stuur ik de gebruiker terug naar books.php (!$id).

  • Regel 11tm17 Hier maak ik van een array aangenaamd $warnings die ik ga gebruiken om te vullen met errors tijdens de forumulier verificatie. Ik heb isset functie gebruikt om de foutmelding in php te voorkomen (undefined index, als iemand mij hier wat wijzer over zou kunnen maken graag :slight_smile:

  • Regel 23tm48 Ik begin een transactie dat volgens mijn phpboek “reversable” is mocht het ergens fout gaan. Als er meer dan 0 boeken zijn wordt de volgende query uitgevoerd “UPDATE books SET copies=copies-1 WHERE id=$id” en wordt de lener
    in de tabel “borrowers” geplaats dmv $stmt = $conn->prepare(“INSERT INTO borrowers(book, name, dt)(?, ?, ?)”); De placeholders kan ik waarschijnlijk vervangen door een array toch ipv die vraagtekens toch? Of zijn de vraagtekens toch beter voor gebruik? Mochten er geen boeken zijn dan krijg je
    een warning op je scherm en anders voert hij de veranderingen door en anders een rollback (“reverse”).

  • De rest van de regels wordt geactiveerd als er errors aanwezig zijn door de $warnings array te bekijken en de waardes hiervan te displayen.

Dat is mijn uitleg en ook mijn begrip van de script en wat de script precies doet. Ik hoop met jullie suggesties en hulp meer begrip te creeeren :slight_smile:
Alvast bedankt.

Please write in english.

Sponsor our Newsletter | Privacy Policy | Terms of Service