Avatar
Michal68889
Člen
Avatar
Michal68889:

Ahoj snaží se vytvořit aplikaci pomocí PHP pro velice jednoduchou databázi knih.
Vesměs mi už všechno funguje, ale nemohu přijít na některé věci.
Hlavní problém co bych chtěl řešit je stále vyskakující chyba:

Undefined index: p in C:\xampp\htdoc­s\knihovna\in­dex.php on line 20

Dále pak bych chtěl zamezit možnosti dát do databáze prázdné hodnoty.
A radám ohledně optimalizace se nebráním :)

<?php
require ('tridy.php');
databaze::prihlasit('knihovna', 'knihovna', '123456', 'localhost');?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Knihovna</title>
</head>
<body>
<h1>Knihovna</h1>
<?php
if(isset($_POST['Nazev'])) {
        if (databaze::dotaz("INSERT INTO knihy (Název, Autor, Žánr, RokVydání) VALUES ('" . $_POST['Nazev'] . "', '" . $_POST['Autor'] . "', '" . $_POST['Zanr'] . "', '" . $_POST['Rok'] . "')")) {
                echo'Přidáno. <a href="index.php">Zpět na přehled</a>';
                }
}
else{
; řádek 20!!!!!!!
    if($_GET['p']=='novy') {
        echo '
                                        <h1>Přidání knížky</h1>
                                        <form action="index.php" method="POST">
                                        <p>Název: <input type="text" name="Nazev"<br>
                                        Autor:<input type="text" name="Autor" /><br>
                                        Žánr:<input type="text" name="Zanr" /><br>
                                        Rok vydání:<input type="text" name="Rok" /><br>
                                        <input type="submit" value="Přidat"></p>
                                        </form>
                                        '
                                        ;
}
else {
$knihy = databaze::tabulka("SELECT * FROM knihy");
echo Tab::vytvorit($knihy);
echo'<p><a href="index.php?p=novy">Přidat další knížku</a></p>';
($_GET['p'] = '1');

}
}
?>
</body>
</html>
<?php
databaze::konec();
?>

stript

<?php
class Tab {
    private $data;
    public function __construct($data) {
        $this->data = $data;
    }
    public static function vytvorit ($data) {
        return new Tab ($data);
    }
    public function __toString() {
        $tab = '';
        foreach ($this->data as $radek) {
            $tab.='<tr>';
            foreach ($radek as $key => $val) {
                        $tab.='<td>' . $val . '</td>';
            }
            $tab.='</tr>';
        }
        return '<table>' . $tab . '</table>';
    }
}

class databaze {
    private static $link;
    public static function prihlasit($db, $user, $pass, $host) {
        self::$link = @mysqli_connect($host, $user, $pass, $db);
        self::dotaz("SET CHARACTER SET UTF8");
        self::dotaz('SET NAMES UTF8');
    }
    public static function dotaz($dotaz) {
        return mysqli_query(self::$link, $dotaz);
    }
         public static function konec() {
        mysqli_close(self::$link);
    }
    public static function tabulka($dotaz) {
        $tabulka = array();
        $vysledek = self::dotaz($dotaz);
        while ($radek = mysqli_fetch_array($vysledek, MYSQL_ASSOC)) {
            $tabulka[] = $radek;
        }
        return $tabulka;
    }
}

?>

Předem děkuji za vaše rady

Editováno 26. května 10:51
 
Odpovědět 26. května 10:50
Avatar
mayo505
Redaktor
Avatar
mayo505:

ľudia majú očividne problém načúvať tomu čo im interpreter hovorí :D Proste nie je definovaný index 'p' v poli $_GET, nenachádza sa v ňom kľúč 'p', a teda ti chýba hodnota v url (url.com?p=niečo) ... ak je nepovinná tak to kontroluj aj cez isset

určite by som sa zbavil toho html v echu, to vieš vypísať normálne cez html + pozri si čo je to MVC

btw. nechcem by zlý ale toto neni OOP prístup, áno máš tam kód v triede ale od OOP paradigma to má riadne ďaleko :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 26. května 11:32
Avatar
Michal68889
Člen
Avatar
Michal68889:

OK už jsem to vyřešil dík

 
Nahoru Odpovědět 26. května 14:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.