Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Problém s registrací

PHP PHP Problém s registrací American English version English version

Aktivity (1)
Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:5.10.2014 21:37

Zdravím.
Naprosto nechápu, co se děje. Už jsem na jiném webu v pohodě zprovoznil registraci, teď mi to ale nejde. Databázi mám vytvořenou, ovšem když po zadání nějakých hodnot kliknu na registrovat, načte se mi zpátky bílá stránka registrovat.php . Nevíte, v čem je zakopaný pes?

Viz. kód níže (informace pro připojení k databázi jsem vymazal až zde)

<?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
                ', $_POST['jmeno']);
                if ($existuje)
                        $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="css/styl.css" type="text/css" />
        <title>Registrace</title>
</head>

<body>
      <header>
            <div id="nazev"><a>Brněnský Mikuláš 2014</a></div>
            <nav>
                <ul>
                    <li><a href="index.php">Domů</a></li>
                    <li><a href="objednavka.php">Domluvit návštěvu</a></li>
                    <li><a href="fotogalerie.php">Fotogalerie</a></li>
                    <li><a href="oNas.php">O nás</a></li>
                    <li><a href="kontakt.php">Kontakt</a></li>
                </ul>
            </nav>
        </header>
        <article>

                        <header>
                                Registrace
                        </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>
 
Odpovědět 5.10.2014 21:37
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):5.10.2014 22:04

Zkus na začátek souboru hodit

error_reporting(E_ALL);

Přijde mi, že je tam někde chyba, ale máš vypnutý hlášení.

Nahoru Odpovědět  +2 5.10.2014 22:04
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Richard
Člen
Avatar
Richard:5.10.2014 22:04

else if -> elseif ?

Nahoru Odpovědět 5.10.2014 22:04
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Richard
Matúš Petrofčík:5.10.2014 22:48

else if je to isté ako elseif bez medzery

Nahoru Odpovědět 5.10.2014 22:48
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Richard
Člen
Avatar
Odpovídá na Matúš Petrofčík
Richard:5.10.2014 23:06

Ano máš pravdu, moje chyba. Jen přidám, že else if lze použít pouze v případě,, že jsou použity {} závorky, to je to co mě zmátlo.

Nic jsem tam nenašel, není chyba v Db.php, případně v Db::connect ?

Nahoru Odpovědět 5.10.2014 23:06
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Richard
Matúš Petrofčík:5.10.2014 23:16

Človeče fakt, toto som ani netušil :) každopádne môže to byť tá chyba tak si Michal Kuba zapni zobrazovanie chýb tak ako ti radil pavelco1998

http://php.net/…s.elseif.php : "Note: Note that elseif and else if will only be considered exactly the same when using curly brackets as in the above example. When using a colon to define your if/elseif conditions, you must not separate else if into two words, or PHP will fail with a parse error."

Nahoru Odpovědět 5.10.2014 23:16
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:5.10.2014 23:20

Ono je najlepšie všetky IF, ELSE, WHILE, FOR.... bloky uzatvárať do kučeravých zátvoriek {} aj keď je tam len jeden riadok

Ja to tak robím vždy, môžem tak dopísať ďaľší kód bez toho aby som musel pridávať zátvorky.

Richard: a možno preto som o tomto probléme nevedel, lebo som sa s ním nikdy nestretol :D

<?php

/* Incorrect Method: */
if($a > $b):
    echo $a." is greater than ".$b;
else if($a == $b): // Will not compile.
    echo "The above line causes a parse error.";
endif;


/* Correct Method: */
if($a > $b):
    echo $a." is greater than ".$b;
elseif($a == $b): // Note the combination of the words.
    echo $a." equals ".$b;
else:
    echo $a." is neither greater than or equal to ".$b;
endif;

?>
Nahoru Odpovědět  +1 5.10.2014 23:20
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Richard
Michal Kuba:6.10.2014 22:01

Připojení k databázi by mělo být v pořádku, kdyby nebylo, tak by se ta stránka ani nenačetla, ne?
Hlavně mi vrtá hlavou, proč při kliknutí na odeslat se znovu načte bílá stránka registrace.php , i když je v Location: header udána jiná stránka. Jinak Db.php používám zde z devbooku a nic jsem tuším neměnil, pro jisotu kód, ale v tom bych chybu neviděl.

<?php


class Db
{

        private static $connection;


        private static $options = array(
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                PDO::ATTR_EMULATE_PREPARES => false,
        );

        /**
         * Připojí se k databázi pomocí daných údajů
         * @param string $host Název hostitele
         * @param string $database Název databáze
         * @param string $user Uživatelské jméno
         * @param string $password Heslo
         */
        public static function connect($host, $database, $user, $password)
        {
                if (!isset(self::$connection)) {
                        $dsn = "mysql:host=$host;dbname=$database";
                        self::$connection = new PDO($dsn, $user, $password, self::$options);
                }
        }

        /**
         * Spustí dotaz a vrátí PDO statement
         * @param array $params Pole, kde je prvním prvkem dotaz a dalšími jsou parametry
         * @return \PDOStatement PDO statement
         */
        private static function executeStatement($params)
        {
                $query = array_shift($params);
                $statement = self::$connection->prepare($query);
                $statement->execute($params);
                return $statement;
        }


        public static function query($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->rowCount();
        }

        /**
         * Spustí dotaz a vrátí z něj první sloupec prvního řádku. Dále se předá libovolný počet dalších parametrů.
         * @param string $query Dotaz
         * @return mixed Hodnota prvního sloupce z prvního řádku
         */
        public static function querySingle($query) {
                $statement = self::executeStatement(func_get_args());
                $data = $statement->fetch();
                return $data[0];
        }

        /**
         * Spustí dotaz a vrátí z něj první řádek. Dále se předá libovolný počet dalších parametrů.
         * @param string $query Dotaz
         * @return mixed Pole výsledků nebo false při neúspěchu
         */
        public static function queryOne($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->fetch(PDO::FETCH_ASSOC);
        }

        /**
         * Spustí dotaz a vrátí všechny jeho řádky jako pole asociativních polí. Dále se předá libovolný počet dalších parametrů.
         * @param string $query Dotaz
         * @return mixed Pole řádků enbo false při neúspěchu
         */
        public static function queryAll($query) {
                $statement = self::executeStatement(func_get_args());
                return $statement->fetchAll(PDO::FETCH_ASSOC);
        }

        /**
         * Umožňuje snadné vložení záznamu do databáze pomocí asociativního pole
         * @param string $table Název tabulky
         * @param array $data Asociativní pole, kde jsou klíče sloupce a hodnoty hodnoty
         * @return int Počet ovlivněných řádků
         */
        public static function insert($table, $data) {
                $keys = array_keys($data);
                self::checkIdentifiers(array($table) + $keys);
                $query = "
                        INSERT INTO `$table` (`" . implode('`, `', $keys) . "`)
                        VALUES (" . str_repeat('?,', count($data) - 1) . "?)
                ";
                $params = array_merge(array($query), array_values($data));
                $statement = self::executeStatement($params);
                return $statement->rowCount();
        }

        /**
         * Umožňuje snadnou modifikaci záznamu v databázi pomocí asociativního pole
         * @param string $table Název tabulky
         * @param array $data Asociativní pole, kde jsou klíče sloupce a hodnoty hodnoty
         * @param string $condition Řetězec s SQL podmínkou (WHERE)
         * @return mixed
         */
        public static function update($table, $data, $condition) {
                $keys = array_keys($data);
                self::checkIdentifiers(array($table) + $keys);
                $query = "
                        UPDATE `$table` SET `".
                        implode('` = ?, `', array_keys($data)) . "` = ?
                        $condition
                ";
                $params = array_merge(array($query), array_values($data), array_slice(func_get_args(), 3));
                $statement = self::executeStatement($params);
                return $statement->rowCount();
        }

        /**
         * Vrátí poslední ID posledního záznamu vloženého pomocí INSERT
         * @return mixed Id posledního záznamu
         */
        public static function getLastId()
        {
                return self::$connection->lastInsertId();
        }

        /**
         * Ošetří string proti SQL injekci
         * @param string $string Řetězec
         * @return mixed Ošetřený řetězec
         */
        public static function quote($string)
        {
                return self::$connection->quote($string);
        }

        /**
         * Zkontroluje, zda identifikátory odpovídají formátu identifikátorů
         * @param array $identifiers Pole identifikátorů
         * @throws \Exception
         */
        private static function checkIdentifiers($identifiers)
        {
                foreach ($identifiers as $identifier)
                {
                        if (!preg_match('/^[a-zA-Z0-9\_\-]+$/u', $identifier))
                                throw new Exception('Dangerous identifier in SQL query');
                }
        }
}
 
Nahoru Odpovědět 6.10.2014 22:01
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):6.10.2014 22:34

Zkus zapnout hlášení chyb.

Nahoru Odpovědět 6.10.2014 22:34
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:7.10.2014 13:36

To mi právě nejde, ani pomocí tvého kódu, který vložím na začátek php direktivity nebo i do samostatné na začátku :/

 
Nahoru Odpovědět 7.10.2014 13:36
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 10 zpráv z 10.