Seite 2 von 3
Re: Buchausleihe Skript
Verfasst: Mi 17. Dez 2025, 21:16
von Volker
Ich hab mal das widget geändert
Pagenierung und Suchfeld sind nun auch drin. Ist jetzt auch im Download.
https://www.niederastroth.de/buch_leihe.zip
Nach wie vor im widget einstellen: Pfad zur api
und auch die Anzahl der Bücher ( steht gerade auf 4 ) Kann auch 10 oder 15 sein.
Ab Zeile 347 direkt am Anfang des Script Tags.
https://www.niederastroth.de/buch/
Re: Buchausleihe Skript
Verfasst: Mi 17. Dez 2025, 21:34
von Bushisan
schau ich mir morgen an - DANKESCHÖN und noch nen entspannten Abend !!!!!
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 11:06
von Bushisan
Guten Morgen Volker,
hab das neue eingebaut - MEGA - WOW !!!!
Eine hoffentlich in dieser Sache letzte Frage (ich hoffe das steht nirgens) - wie kann ich die Pagination einstellen wieviel Bücher pro Seite angezeigt werden?
Ich muss es nochmal schreiben - bin total begeistert was daraus geworden ist - und nochmal DANKESCHÖN
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 12:17
von Bushisan
Wäre ja auch zu schön gwesen.
In der alten Version habe ich die Buchcover von einem lokalen Ordner verwendet. Jetzt werden keine Grafiken mehrr angezeigt

Was hab ich schon wieder falsch gemacht ?
https://www.shotokan-karate-dojo-neukir ... .php?del=1
User: Hubert
PW: 100355

Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 12:23
von Bushisan
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 13:50
von Volker
Hat der Ordner uploads/books Lese Rechte ? 755 sollte der haben. In Filezilla Dateiberechtigungen auf den Ordner rechte Maustaste
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 14:56
von Volker
Bushisan hat geschrieben: Do 18. Dez 2025, 11:06
Guten Morgen Volker,
hab das neue eingebaut - MEGA - WOW !!!!
Eine hoffentlich in dieser Sache letzte Frage (ich hoffe das steht nirgens) - wie kann ich die Pagination einstellen wieviel Bücher pro Seite angezeigt werden?
Ich muss es nochmal schreiben - bin total begeistert was daraus geworden ist - und nochmal DANKESCHÖN
Hatte ich ja oben bereits geschrieben

Musst du im widget im Code ändern, steht im Moment auf 4
const apiBase = "/buch/api";
const ITEMS_PER_PAGE = 4;
Das sin die beide Dinge die man ändern muss, kann. 1. der Pfad und 2. die Anzahl an Einträgen
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 16:09
von Bushisan
Hallo Volker,
die Berechtigung hab ich korrigiert.
die Änderungen in widget hab ich auch gemacht
Code: Alles auswählen
const apiBase = "/buch_leihe/api"; // Pfad hier anpassen !!!
const ITEMS_PER_PAGE = 10; // Anzahl hier einstellen
Alle Engaben werden gespeichert. Bücher, ausleihe, zurückgeben usw. nach einloggen usw. - alles funktioniert. Nur nicht die Cover
Entschuldige das ich mich wieder mal so blöd anstelle - haste Di sicherlich einfacher vorgestellt

Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 16:27
von Volker
Hast du die Bilder über das Admin hoch geladen ?
Das muss gehen !
Da stimmt was mit den Rechten nicht.
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 16:46
von Bushisan
Ich check das nachher alles nochmal

Bis denne
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 16:55
von Volker
Ansonsten config.php und die sqlight db löschen und nochmals installieren.
Kopier mal diesen Code hier in die books.php:
Code: Alles auswählen
<?php
declare(strict_types=1);
require __DIR__ . '/db.php';
require_installed();
try {
$pdo = db();
$sql = "
SELECT
b.id,
b.title,
b.author,
b.isbn,
b.note,
b.image,
b.created_at,
CASE WHEN l.id IS NULL THEN 1 ELSE 0 END AS available,
u.name AS loaned_to,
l.loaned_at
FROM books b
LEFT JOIN loans l ON l.book_id = b.id AND l.returned_at IS NULL
LEFT JOIN users u ON u.id = l.user_id
ORDER BY b.id DESC
";
$books = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
/*
* Web-BASISPFAD sicher ermitteln
* Beispiel:
* /buch/api/books.php -> /buch
* /buch_leihe/api/books.php -> /buch_leihe
*/
$script = $_SERVER['SCRIPT_NAME'] ?? '';
$baseUrl = rtrim(dirname(dirname($script)), '/');
foreach ($books as &$b) {
if (!empty($b['image'])) {
// WICHTIG: nur Webpfad, kein Serverpfad!
$b['image_url'] = $baseUrl . '/uploads/books/' . $b['image'];
} else {
$b['image_url'] = $baseUrl . '/assets/no-cover.svg';
}
}
unset($b);
json_response([
'ok' => true,
'books' => $books
]);
} catch (Throwable $e) {
json_response([
'ok' => false,
'error' => $e->getMessage()
], 500);
}
Das scheint ein Pfadproblem. ist aber komisch das es gestern lief.
Die Bilder werden nicht gefunden weil sie nicht auf uploads/books verlinken sondern ins root
book_37c93b076c60d5b3.png:1 Failed to load resource: the server responded with a status of 404 ()
book_5287719138a77401.png:1 Failed to load resource: the server responded with a status of 404 ()
book_ac8fb138d660bd62.jpg:1 Failed to load resource: the server responded with a status of 404 ()
book_dc56fdad467f74d2.png:1 Failed to load resource: the server responded with a status of 404 ()
book_9c7fedb2973f2cca.png:1 Failed to load resource: the server responded with a status of 404 ()
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 19:51
von Bushisan
Hallo Volker,
Hab grade ein Buch angelegt. Im Ordner "buch_leihe/uploads/books" werden die Bilder angezeigt. Aber nicht in der Benutzeroberfläche.

Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 20:00
von Volker
Ich hab echt keine Ahnung was jetzt los ist. Berechtigung auf 755?
Ich weiß nur das es bei mir einwandfrei läuft
Alles löschen neu Installieren, wenn dann immer noch der Fehler da ist nochmal melden.
Hast du die books.php geändert wie ich es gepostet hatte ?
Re: Buchausleihe Skript
Verfasst: Do 18. Dez 2025, 21:09
von Bushisan
Ja hab - ich lösche alles nochmal und fang nochmal von vorne an - schönen Abend noch !!!
Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 09:35
von Bushisan
Guten Morgen Volker,
hab jetzt nochmal alles neu installiert. das ist alles sehr seltsam.
Wenn ich die Seite das erste mal aufrufe, dann wird mir das eingegebene Buch richtig angezeigt - auch von wem es ausgeliehen wurde.
wenn ich dann auf die Adminseite gehen um z.B. die Ausleihe zurückzugeben, dann bekomme ich auf beiden Adminseiten diese Anzeigen.

Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 09:58
von Bushisan
Ich kann aber auch die Vorgängerversion wieder hochladen - könnte mir shon vorstellen, das Dir das alles irgndwann auch zu dumm wird.
Gruß Hubert
Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 12:32
von Bushisan
Hallo Volker,
schau mal:
das ist der Link zur Grafik die nach dem Löschen des Browsercache nach ersten Aufruf angezeigt wird (in dem Menue "Bibliothek-Ausleihe" Hier mal der Link:
https://www.shotokan-karate-dojo-neukir ... 9c808b.png
wenn ich mich dann als Admin einlogge und in den Bereich "zu den Büchern" wechsel, dann wird mir die Grafik nicht mehr angezeigt und es ist folgender Link hinterlegt:
https://www.shotokan-karate-dojo-neukir ... 9c808b.png
Blöde Frage: Müsste das nicht der gleiche Link sein? Nur mal so als Gedankenstütze oder Hinweis auf nen Installationsfehler
Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 12:34
von Volker
Wenn Du das alte Zip noch hast nimm das mal und kopier nur die widget.php aus dem neuen zip da rein.
Ich hatte die db.php auch geändert, kann sein das Ionos da strikter ist. Probier das mal.
Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 14:04
von Bushisan
Nee - leider nicht
sobald ich in den Adminbreich wechsle werden die Cover dort nicht angezeigt. Wenn ich dann wieder auf die Benutzerseite (s. Bild) wechsel dann werden sie dort angezeigt - halt nur nicht im Adminbereich
Re: Buchausleihe Skript
Verfasst: Fr 19. Dez 2025, 14:25
von Volker
Letzter Versuch
den code hier komplett in /api/books.php ersetzen
Code: Alles auswählen
<?php
declare(strict_types=1);
require __DIR__ . '/db.php';
require_installed();
try {
$pdo = db();
$sql = "
SELECT
b.id,
b.title,
b.author,
b.isbn,
b.note,
b.image,
b.created_at,
CASE WHEN l.id IS NULL THEN 1 ELSE 0 END AS available,
u.name AS loaned_to,
l.loaned_at
FROM books b
LEFT JOIN loans l ON l.book_id = b.id AND l.returned_at IS NULL
LEFT JOIN users u ON u.id = l.user_id
ORDER BY b.id DESC
";
$books = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
// 🔑 robuster Web-Basispfad (funktioniert überall)
$script = $_SERVER['SCRIPT_NAME'] ?? '';
$baseWeb = rtrim(dirname(dirname($script)), '/');
foreach ($books as &$b) {
if (!empty($b['image'])) {
$b['image_url'] = $baseWeb . '/uploads/books/' . $b['image'];
} else {
$b['image_url'] = $baseWeb . '/assets/no-cover.svg';
}
}
unset($b);
json_response([
'ok' => true,
'books' => $books
]);
} catch (Throwable $e) {
json_response([
'ok' => false,
'error' => $e->getMessage()
], 500);
}