Autor Zpráva
Ondra Sojka
Profil

<?
$user = $_POST["user"];
$pass = $_POST["pass"];
$user = mysql_real_escape_string($user);
$pass = hash(sha256, $pass);
session_start();
require "mysql-pripoj.php";
$vysledek = mysql_query("SELECT * FROM login WHERE user='".$user."'", $spojeni) or Die(MySQL_Error());
$zaznam = MySQL_Fetch_Assoc($vysledek) or Die(MySQL_Error());
echo $zaznam["user"];
echo $zaznam["pass"];
?>
Pokoušel jsem se udělat přihlášení, ale v rámci debugu jsem se pokusil alespoň vypsat data z databáze. Kód výše uvedený nevrací žádnou chybu, ovšem ani nevypíše jméno a heslo z DB. v souboru mysql-pripoj.php nemám chybu, funguje při zápisu. Připojí se k DB a zvolí DB. Děkuji předem za pomoc, už si opravdu nevím rady. Na všechny dotazy ochotně odpovím.
Tori
Profil
Když na konec skriptu přidáte echo 'jakykoliv kus textu';, zobrazí se nebo ne?
Pokud ne: příčinou je syntaktická chyba někde. Zkontrolujte si, že máte zapnuté zobrazování chyb.

Drobnosti: chybí uvozovky okolo řetězce $pass = hash("sha256", $pass); a mysql_real_escape_string by se měla volat až po navázání spojení s databází, protože AFAIK potřebuje znát nastavené kódování.
Ondra Sojka
Profil
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$user = $_POST["user"];
$pass = $_POST["pass"];
$pass = hash("sha256", $pass);
session_start();
require "mysql-pripoj.php";
$user = mysql_real_escape_string($user);
$vysledek = mysql_query("SELECT * FROM login WHERE user='".$user."'", $spojeni) or Die(MySQL_Error());
$zaznam = MySQL_Fetch_Assoc($vysledek) or Die(MySQL_Error());
echo "hello";
echo $zaznam["user"];
echo $zaznam["pass"];
echo "test zda neni syntakticka chyba";
kód jsem opravil, výstup:
Notice: Use of undefined constant hosch1375636568 - assumed 'hosch1375636568' in /home/users/hoschi/sojka.8u.cz/web/uzivatel/mysql-pripoj.php on line 2 Notice: Use of undefined constant localhost - assumed 'localhost' in /home/users/hoschi/sojka.8u.cz/web/uzivatel/mysql-pripoj.php on line 3 Notice: Use of undefined constant hoschi - assumed 'hoschi' in /home/users/hoschi/sojka.8u.cz/web/uzivatel/mysql-pripoj.php on line 3 Notice: Use of undefined constant MOJE HESLO - assumed 'MOJE HESLO' in /home/users/hoschi/sojka.8u.cz/web/uzivatel/mysql-pripoj.php on line 3 hellohoschi5054252da0617b338ahooj

(Heslo skryto) toto mi to nikdy neházelo... Vůbec nevím co tím myslí.

Drobnosti opraveny.
Tori
Profil
Ondra Sojka:
Use of undefined constant
Tohle znamená, že v mysql-pripoj.php máte taky nějaké řetězce, které nejsou uzavřené do uvozovek.
Rfilip
Profil
V souboru mysql-pripoj.php nemáš řetězce v uvozovkách, php je protože považuje za konstanty a protože žádné konstanty toho jména neexistují uvozovky si doplní samo tím z nich udělá řetězce tedy interně dočasně opraví tvoji chybu a napíše o tom notice (nejnižší úroveň chyby spíš taková poznámka). Nebyly předtím vidět protože jste předtím neměl povolen výpis všech chyb. Jako oprava stačí řetězce mít v uvozovkách.
Ondra Sojka
Profil
Doplnil jsem si prakticky všechny uvozovky v mém kódu, ale jakto že to jinde fungovalo i bez uvozovek? A teď, když jich je víc si to PHP nedoplní samo?
jinak vám moc děkuji, už vypisuje. Nějaké body chcete nebo tu nejsou?
Tori
Profil
Ondra Sojka:
jakto že to jinde fungovalo i bez uvozovek
Ne všechny znaky, které se dají použít uvnitř řetězce, lze také použít pro název konstanty (např. mezera či interpunkce). Možná to bylo tím.
Ondra Sojka
Profil

<?
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$status = session_status();
if($status == PHP_SESSION_NONE){
    session_start();
}
if(empty($_POST["pass"])){
die("Zadal jsi prázdné heslo.");
}
$pass = hash("sha256", $_POST["pass"]);
require "mysql-pripoj.php";
echo "první test";
$user = $_POST["user"];
$vysledek = mysql_query("SELECT * FROM login WHERE pass='".$pass."'", $spojeni) or Die(MySQL_Error());
$zaznam = MySQL_Fetch_Assoc($vysledek) or Die(MySQL_Error());
echo "druhý test";
if(isset($_zaznam['pass'])){
  $_SESSION['user'] = $zaznam['user'];
  $_SESSION['pass'] = $zaznam['pass'];
  echo "<b>Přihlášený uživatel</b>: ".$_SESSION['user'] . " | <a href='odhlasit.php'>Odhlášení</a><br>";
}else{
  echo "Nejsi přihlášen | <a href='registrace.php'> Registrace</a> | <a href='prihlasit-formular.html'>Přihlášení</a>";
}

?>
Tak jsem z toho udělal tu registraci, ale: první test ještě vypíše, druhý už ne. Chyby ani notice nehlásí!
Kajman
Profil
zkuste
$vysledek = mysql_query("SELECT * FROM login WHERE pass='".mysql_real_escape_string($pass)."' AND user='".mysql_real_escape_string($user)."'", $spojeni) or Die(MySQL_Error());
$zaznam = MySQL_Fetch_Assoc($vysledek) or Die('Login nebo heslo je chybne.');
Ondra Sojka
Profil
nezdaří se fetch_assoc a proto die('Chybne heslo').
Html kód na konci samozřejmě nevypíše
hrouda
Profil
a do databáze jsi připojen ?
Ondra Sojka
Profil
hrouda:
Ano, vždyť tam includuju mysql-pripoj.php, to funguje u registrace
Kajman
Profil
Ondra Sojka:
nezdaří se fetch_assoc

Nezadaří, protože tam není žádný odpovídající řádek. Nemusíte tam dávat die, když chcete pokračovat v provádění skriptu.
Ondra Sojka
Profil
V databázi odpovídající řádek je. Mám podezření že chyba je v syntaxi toho query (uvozovky apod.)
juriad
Profil
Tak si ten dotaz vypiš a spusť jej manuálně v phpMyAdminu.
$query = "SELECT * FROM login WHERE pass='".mysql_real_escape_string($pass)."' AND user='".mysql_real_escape_string($user)."'";
echo $query;
$vysledek = mysql_query($query);
Ondra Sojka
Profil
Vypíše se
Kajman
Profil
Tak to bude nadbytečným podtržítkem na řádku 18.

if(isset($_zaznam['pass'])){
Ondra Sojka
Profil
Děkuju všem, věc vyřešená.

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: