Autor Zpráva
Michal4574927
Profil
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\htdocs\knihovna\index.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{
; zde je řá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();
?>



zde je muj OOP 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

Moderátor juriad: Dotazy se zde nemažou. Jednou byly položeny, a tak zůstanou na věky.
Beavis
Profil
Michal4574927:
Definuj si proměnnou a s tou následně pracuj, ušetříš si pár písmenek a zároveň si ji můžeš ošetřit.
$p = isset($_GET["p"]) ? $_GET["p"] : false; // třeba tak: pokud existuje ?p= tak přiřadí danou hodnotu, v opačném případě vrátí false, nebo cokoliv budeš chtít
A pak místo $_GET["p"] budeš používat $p.
Keeehi
Profil
if(isset($_GET['p']) && $_GET['p']=='novy') {

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: