Schulaufgabe HTML PHP MySQL auf niedrigen Niveau

Benjo2309

Cadet 1st Year
Registriert
Feb. 2021
Beiträge
9
Hallöchen, ich hoffe mal, das ich auf diesen Wege Hilfe für mein Schulprojekt finde, da ich nicht mehr weiter weiß.
Prinzipiell geht es um das erstellen einer Datenbank, aus der daten über ein Tier (Größe, Nahrung) ausgelesen werden, wenn man die Tierklasse angibt. Wenn ich jedoch z.B. Wildschwein eingebe, kommt es zum Fehler:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '??e, tier.Lebensdauer FROM tier, tierart WHERE tierart.tierart = 'Wildschwein...' at line 1 in C:\xampp\htdocs\recherche.php:31 Stack trace: #0 C:\xampp\htdocs\recherche.php(31): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\recherche.php on line 31

Hier mein Code

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<link type="text/css" rel="stylesheet" href="pankow.css">
</head>

<body>

<div id="oben">

         <div id="logo">
                 <img class="logo" src="logo.png" alt="" border="0" width="150" height="70">
         </div>

<div id="titel">
                 <ul>
                 <a href="index.html" class="links">Start</a>
                 <a href="recherche.html" class="links">Recherche</a>
                 </ul>
         </div>

</div>

<div id="main">

<?php
        $species = isset($_POST['tierklasse']) && !empty($_POST['tierklasse']) ? ucfirst($_POST['tierklasse']) : '';
        $db = new PDO('mysql:host=localhost;dbname=tierpark', 'root', '');
        $sql = $db->prepare('SELECT tier.name, tier.Größe, tier.Lebensdauer FROM tier, tierart WHERE tierart.tierart = ? AND tierart.tierart_ID = tier.f_tierart_ID;');
        $sql->execute(array($species));
        $animals = $sql->fetchAll();
        if ($animals != false) { ?>
            <table class='ergbenis'>
                <tr>
                    <td>Name</td>
                    <td>Größe</td>
                    <td>Alter</td>
                </tr>
                <?php foreach ($animals as $animal) { ?>
                    <tr>
                        <td><?= $animal['name'] ?></td>
                        <td><?= $animal['Größe'] ?> cm</td>
                        <td><?= $animal['Lebensdauer'] ?> Jahre</td>
                    </tr>
                <?php } ?>
            </table>
            Es wurde(n) <?= count($animals) ?> Tier(e) der Tierklasse <i><?= $species ?></i> gefunden.
        <?php }
        if ($animals == false) { ?>
            Keine zulässige Tierklasse eingegeben. Versuchen Sie es nochmal.
        <?php } ?>

</div>


Danke schonmal :)
 
1. Regel beim Programmieren: verwende die englische Sprache und nutz keine Umlaute

Wenn du die Fehlermeldung auf den Query überträgst, weißt du wo es hakt.
 
Wenn du dir die Fehlermeldung anschaust, dann siehst du deutlich, dass die nicht so ganz mit deinem Code übereinstimmt:

'??e, tier.Lebensdauer FROM tier, tierart WHERE tierart.tierart = 'Wildschwein...'
'SELECT tier.name, tier.Größe, tier.Lebensdauer ...'

Also wird's wohl an den Umlauten / nicht-ASCII Zeichen liegen. Grundsätzlich kann man seine Datenbank und seinen Code natürlich so konfigurieren, dass man mit Bezeichnern in UTF-8 arbeiten kann. Aber generell würde ich Abstand davon halten, weil es immer wieder zu Problemen führt.
 
  • Gefällt mir
Reaktionen: mental.dIseASe und Asghan
Okey aber wenn ich die Größe z.B. komplett lösche, ändert das nichts an meinen Problem :(
 
Code:
Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'tierpark.tier' doesn't exist in C:\xampp\htdocs\recherche.php:31 Stack trace: #0 C:\xampp\htdocs\recherche.php(31): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\recherche.php on line 31
 
Hier steht wie man in MySQL die Tabellen, Spalten usw. benennen darf:

https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

Wenn man sich mit Unicode nicht einigermaßen auskennt ist das natürlich nicht einfach zu verstehen. Macht aber nichts, es ist generell eine gute Idee diese Möglichkeiten nicht auszuschöpfen und nur einfache ASCII Zeichen wie a-z, 0-9 und Unterstriche zu verwenden. Du kannst mehr Zeichen verwenden wenn du Anführungszeichen um die Identifier machst, aber ich würde trotzdem deutlich raten solche Komplikationen zu vermeiden und nur die absolut unproblematischen Zeichen zu verwenden.

Und mach da bitte einen expliziten JOIN rein, was du da verwendest ist der alte Syntax für JOINS. Explizite JOINS sind einfach besser lesbar und Standard wenn man heute SQL schreibt.
 
  • Gefällt mir
Reaktionen: F1database
Benjo2309 schrieb:
Code:
Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'tierpark.tier' doesn't exist in C:\xampp\htdocs\recherche.php:31 Stack trace: #0 C:\xampp\htdocs\recherche.php(31): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\recherche.php on line 31

Guck mal nach ob in deiner Datenbank tierpark eine Tabelle tier überhaupt so heißt. Groß- und Kleinschreibung immer beachten und auch am besten konsequent durchziehen, am beste einfach alles klein.
 
  • Gefällt mir
Reaktionen: Asghan
Sollte man nicht erst mal halbwegs verstehen was man da überhaupt schreibt bzw. vor sich liegen hat?
Ich meine die Fragen weisen 100% darauf hin, dass das nicht von dir ist und du es auch absolut nicht verstanden hast, wenn du nicht mal weißt, was davon die Query ist.

Es würde erst mal helfen überhaupt zu verstehen was da passiert.
 
  • Gefällt mir
Reaktionen: minimii
GrinderFX schrieb:
Sollte man nicht erst mal halbwegs verstehen was man da überhaupt schreibt bzw. vor sich liegen hat?
Ich meine die Fragen weisen 100% darauf hin, dass das nicht von dir ist und du es auch absolut nicht verstanden hast, wenn du nicht mal weißt, was davon die Query ist.

Es würde erst mal helfen überhaupt zu verstehen was da passiert.
Gute Einwand.
Effektiv werden hier grad gemeinschaftlich Hausaufgaben gemacht :D
Ergänzung ()


"
Minime9191 schrieb:
Es geht um das "Ö"
Niemals diese Laute verwenden.

Die IT Welt ist Englisch. Da gibts kein Ö,Ä und CO
Benjo2309 schrieb:
Okey aber wenn ich die Größe z.B. komplett lösche, ändert das nichts an meinen Problem :(
Verständnis: sieht man ja hier dran....
 
  • Gefällt mir
Reaktionen: Asghan
JA das stimmt, ich verstehe leider nur 50 % und das ist ein altes script, dass ich noch auf unsers anwenden wollte, da ich darauf eine Note bekomme :/

nagut auf jedenfall hab ich die Tabellen angepasst, einziges Problem ist, dass wenn ich eine Tierklasse eingebe, der von mir vorgegebene Fehler kommt, dass es keine zulässige Tierklasse ist:/

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<link type="text/css" rel="stylesheet" href="pankow.css">
</head>

<body>

<div id="oben">

         <div id="logo">
                 <img class="logo" src="logo.png" alt="" border="0" width="150" height="70">
         </div>

<div id="titel">
                 <ul>
                 <a href="index.html" class="links">Start</a>
                 <a href="recherche.html" class="links">Recherche</a>
                 </ul>
         </div>

</div>

<div id="main">

<?php
        $species = isset($_POST['tierklasse']) && !empty($_POST['tierklasse']) ? ucfirst($_POST['tierklasse']) : '';
        $db = new PDO('mysql:host=localhost;dbname=tierpark', 'root', '');
        $sql = $db->prepare('SELECT tbltier.Name, tbltier.Alter FROM tbltier, tblklasse WHERE tblklasse.Klasse = ? AND tblklasse.ID = tbltier.fKlasseID;');
        $sql->execute(array($species));
        $animals = $sql->fetchAll();
        if ($animals != false) { ?>
            <table class='ergbenis'>
                <tr>
                    <td>Name</td>
                    <td>Alter</td>
                </tr>
                <?php foreach ($animals as $animal) { ?>
                    <tr>
                        <td><?= $animal['Name'] ?></td>
                        <td><?= $animal['alter'] ?> Jahre</td>
                    </tr>
                <?php } ?>
            </table>
            Es wurde(n) <?= count($animals) ?> Tier(e) der Tierklasse <i><?= $species ?></i> gefunden.
        <?php }
        if ($animals == false) { ?>
            Keine zulaessige Tierklasse eingegeben. Versuchen Sie es nochmal.
        <?php } ?>

</div>








</body>
</html>
 
Aber schade, dass du die IP nicht angeben hast sondern nur localhost nutzt, weil deine Datenbank für den User Root kein Passwort hat und so weiß man gleich, dass hier absolut kein Verständnis vorliegt.
Schlimm finde ich eigentlich nur, dass hier nicht mal etwas Interesse zu existieren scheint überhaupt davon was zu verstehen und in solch Verhalten sollte man keine Sekunde verschwenden...
 
  • Gefällt mir
Reaktionen: Asghan und minimii
Ich bin nur auf ein Gymnaisum im Kaff und das sagt schon aus, auf welchen Informatik Niveau wie uns hier befinden, und wenn der Leher es im Unterricht, als auch im Script so vorgibt, dann wird das auch mal so gemacht--> zumal meine Verständnis in dem Bereich wirklich nicht schön ist :(

Hat vllt. jemand Lust mit mir das einmal hinzubekommen mit Erklärung und TeamViewer oder so gegen Aufwandsentschädigung?
 
GrinderFX schrieb:
weil deine Datenbank für den User Root kein Passwort hat und so weiß man gleich, dass hier absolut kein Verständnis vorliegt.
Naja, wenn er xampp in der unveränderten Installation nutzt, dann sind das die Standard-Logins. Ob es jetzt für seine Übung sinn ergibt den Server anders zu konfigurieren sei mal dahingestellt.
 
  • Gefällt mir
Reaktionen: netzgestaltung und larud
Zurück
Oben