Avatar
roverjedla
Člen
Avatar
roverjedla:

Ahoj, mám problém s kterým si dál nevím rady.
Začínám se učit PHP a zasekl jsem se u vytváření ners projektu, který zde na itnetworku popisoval David.
Nevyvíjím na localu, nýbrž jsem si pořídil nejlevnější variantu u Forpsi.

Momentálně by vše mělo fungovat takto:

  1. na index.php se uživatel "zaregistruje" do databázové tabulky "uzivatele" => zvolí pouze jméno, příjmení a datum narození. Informace se do tabulky zaznamenají => FUNKČNÍ
  2. na registrace.php se uživatel má zaregistrovat do databázové tabulky "ners_db" => stránka se načte, ale když vyplním údaje a dám "odeslat" hodí mi to tuto chybu:

Fatal error: Call to a member function execute() on boolean in /web/htdocs1/he­kitcz/home/www/Tes­tDatabaze2/Db­.php on line 42

Uživatel má zadat jméno, heslo, heslo znovu, aktuální rok (antispam)
V kódu vlastně odkazuji na soubor Db.php (viz příloha pod tímto článkem: http://www.itnetwork.cz/…sql-ovladace ).

Může být problém, když nevyvíjím na localu odkázat se na soubor Db.php?
Na druhou stranu mi to funguje u té první registrace, kde o sobě tedy uživatel zadává základnější informace.

Budu rád za každou radu. Je dost možné, že je to nějaká blbost a jako málo zkušený programátor v oblasti PHP na to prostě nemohu přijít.

Možná vám pomůže vyzkoušet se zaregistrovat na mém webu osobně. Tento "projekt" je uložen zde: http://hekit.cz/TestDatabaze2/

Druhá nefunkční registrace na adrese: http://hekit.cz/…gistrace.php

Hezký den, roverjedla.

Editováno 7.11.2015 14:09
 
Odpovědět 7.11.2015 14:08
Avatar
mayo505
Redaktor
Avatar
mayo505:

Chyba je pravdepodobne v tom, že funkcia prepare na riadku predtým (ak to je tak ako si to predstavujem) vracia boolean hodnotu (false). Z dokumentácie:

If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE

Ale čo spôsobuje chybu ti bez náhľadu do kódov povedať neviem

 
Nahoru Odpovědět 7.11.2015 16:55
Avatar
roverjedla
Člen
Avatar
roverjedla:

Níže je kód, bez přístupových údajů k databázi.
Omlouvám se, že ho jen takto vkládám, ale nemám nyní možnost ho nahrát.
Prakticky je to úplně stejný kód co napsal David. Copy + paste...
Ale mým hlavním problémem je teď otázka proč to nekomunikuje s databází.

Díky za případnou radu.

<?php
session_start();
require('Db.php');
Db::connect('', '','', '');

if ($_POST)
{
        if ($_POST['rok'] != date('Y'))
                $zprava = 'Chybně vyplněný antispam.';
        else if ($_POST['heslo'] != $_POST['heslo_znovu'])
                $zprava = 'Hesla nesouhlasí';
        else
        {
                $existuje = Db::querySingle('
                        SELECT COUNT(*)
                        FROM uzivatele
                        WHERE jmeno=?
                        LIMIT 1
                ', array($_POST['jmeno']));
                if ($existuje == true)
                        $zprava = 'Uživatel s touto přezdívkou je již v databázi obsažen.';
                else
                {
                                            Db::query('
                                INSERT INTO uzivatele (jmeno, heslo)
                                VALUES (?, SHA1(?))
                        ', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");

                                        /*      $_SESSION['uzivatel_id'] = Db::getLastId();
                        $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                        $_SESSION['uzivatel_admin'] = 0;
                        header('Location: administrace.php');
                        exit();*/
                }
        }
}
?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title>Registrace</title>
</head>

<body>
        <article>
                <div id="centrovac">
                        <header>
                                <h1>Registrace</h1>
                        </header>
                        <section>
                                <?php
                                        if (isset($zprava))
                                                echo('<p>' . $zprava . '</p>');
                                ?>

                                <form method="post">
                                        Jméno<br />
                                        <input type="text" name="jmeno" /><br />
                                        Heslo<br />
                                        <input type="password" name="heslo" /><br />
                                        Heslo znovu<br />
                                        <input type="password" name="heslo_znovu" /><br />
                                        Zadejte aktuální rok (antispam)<br />
                                        <input type="text" name="rok" /><br />
                                        <input type="submit" value="Registrovat" />
                                </form>
                        </section>
                        <div class="cistic"></div>
                </div>
        </article>
</body>
</html>
 
Nahoru Odpovědět 7.11.2015 20:26
Avatar
mayo505
Redaktor
Avatar
Odpovídá na roverjedla
mayo505:

Nenapadá ma takto čo by mohlo byť zle. Nekontroluješ či je vyplnené napríklad meno, alebo heslo, ale to by nemalo spôsobovať chyby.
Trochu ma zaujalo, že pri DB::querySingle() predávaš parametre ako jedno pole (array($_POST['jme­no'])) a potom pri DB::query() ich predávaš po jednom.

 
Nahoru Odpovědět  +1 8.11.2015 14:57
Avatar
roverjedla
Člen
Avatar
Odpovídá na mayo505
roverjedla:

Ten kód je totožný s tím, který je zde na itnetworku...
Každopádně problém jsem již vyřešil.

Stejně Vám děkuji za reakce!

 
Nahoru Odpovědět 8.11.2015 18:24
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 5 zpráv z 5.