Autor | Zpráva | ||
---|---|---|---|
ggame Profil |
#1 · Zasláno: 19. 9. 2013, 16:08:11
Dobrý den mám na webu tento php skript:
<?php $chyba = 0; if($_POST) { $email = $_POST['email']; // Ověření, že bylo pole vyplněno if(trim($email) == '') { echo '<span class="chybova_hlaska">Musíte vyplnit Vaši e-mailovou adresu!</span>'; $chyba = 1; } else { // Ověření správnosti e-mailu if(!EregI("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,6}$", $email) || EregI("\.{2,}", $email) || EregI("_{2,}", $email) || EregI("-{2,}", $email)) { echo '<span class="chybova_hlaska">Nesprávný formát e-mailu!</span>'; $chyba = 1; } // Pokud je vše správně vyplněno, zkontroluj, jestli je e-mail registrován if($chyba == 0) { // Ověření, zda zadané informace souhlasí s těmi v databázi $query = sprintf("SELECT * FROM users WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$email)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu ověřit správnost e-mailu.'); $data = mysqli_fetch_array($result); if(!$data) { echo '<span class="chybova_hlaska">V databázi není žádný hráč s tímto e-mailem!</span>'; $chyba = 1; } else { // Odeslání potvrzovacího e-mailu uživateli $new_password_validkey = md5(uniqid()); $query = sprintf("UPDATE users SET new_password_validkey = '%s' WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$new_password_validkey), mysqli_real_escape_string($dbconnect,$email)); mysqli_query($dbconnect,$query) or die ('Nemohu vložit potvrzovací kód do databáze.'); $email_encoded = rawurlencode($email); $zprava = "Dobrý den,\n\nz bezpečnostních důvodů ukládáme hesla v zašifrovaném formátu, takže Vám jej nemůžeme zaslat.\n\nMůžete si však nechat vygenerovat heslo nové. Pokud tak chcete učinit, klikněte na tento odkaz:\n$path/nove_heslo.php?email=$email_encoded&new_password_validkey=$new_password_validkey\nV opačném případě nebude heslo změněno.\n\nS pozdravem,\nAdministrátor online hry\n$path"; $zprava= Base64_Encode($zprava); $hlavicka = "MIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; $hlavicka .= "Content-Transfer-Encoding: base64"; mail ("$email","$game - Zaslání nového hesla","$zprava","$hlavicka") or die ('Nemohu odeslat aktivační e-mail.'); echo '<span class="oznameni">Na Váš e-mail byly zaslány pokyny pro získání hesla.</span>'; } } } } ?> Skript funguje normálně ale když má přejít k změnění hesla vypíše tuto chybovou hlášku. Připojení k databázi mám v souboru db.php který mám i pro jiné skripty ale u tohoto jsem si nevšiml připojení k databázi. (Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 53 Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 55 Nemohu ověřit správnost e-mailu. |
||
Rfilip Profil |
#2 · Zasláno: 19. 9. 2013, 16:18:05
V proměnné $dbconnect je NULL, takže není includovan db.php jehož Include nikde nevidím.
|
||
ggame Profil |
#3 · Zasláno: 19. 9. 2013, 16:34:53
Aha, a jak bych to mohl opravit aby to fungovalo.
Odstraněním $dbconnect a nahrazením require 'db.php'; ? |
||
Rfilip Profil |
#4 · Zasláno: 19. 9. 2013, 16:37:49
Přidáním require 'db.php'; na začátek.
|
||
ggame Profil |
#5 · Zasláno: 19. 9. 2013, 16:41:28
Ok, skript teď vypadá takhle:
<?php require 'db.php'; $chyba = 0; if($_POST) { $email = $_POST['email']; // Ověření, že bylo pole vyplněno if(trim($email) == '') { echo '<span class="chybova_hlaska">Musíte vyplnit Vaši e-mailovou adresu!</span>'; $chyba = 1; } else { // Ověření správnosti e-mailu if(!EregI("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,6}$", $email) || EregI("\.{2,}", $email) || EregI("_{2,}", $email) || EregI("-{2,}", $email)) { echo '<span class="chybova_hlaska">Nesprávný formát e-mailu!</span>'; $chyba = 1; } // Pokud je vše správně vyplněno, zkontroluj, jestli je e-mail registrován if($chyba == 0) { // Ověření, zda zadané informace souhlasí s těmi v databázi $query = sprintf("SELECT * FROM users WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$email)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu ověřit správnost e-mailu.'); $data = mysqli_fetch_array($result); if(!$data) { echo '<span class="chybova_hlaska">V databázi není žádný hráč s tímto e-mailem!</span>'; $chyba = 1; } else { // Odeslání potvrzovacího e-mailu uživateli $new_password_validkey = md5(uniqid()); $query = sprintf("UPDATE users SET new_password_validkey = '%s' WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$new_password_validkey), mysqli_real_escape_string($dbconnect,$email)); mysqli_query($dbconnect,$query) or die ('Nemohu vložit potvrzovací kód do databáze.'); $email_encoded = rawurlencode($email); $zprava = "Dobrý den,\n\nz bezpečnostních důvodů ukládáme hesla v zašifrovaném formátu, takže Vám jej nemůžeme zaslat.\n\nMůžete si však nechat vygenerovat heslo nové. Pokud tak chcete učinit, klikněte na tento odkaz:\n$path/nove_heslo.php?email=$email_encoded&new_password_validkey=$new_password_validkey\nV opačném případě nebude heslo změněno.\n\nS pozdravem,\nAdministrátor online hry\n$path"; $zprava= Base64_Encode($zprava); $hlavicka = "MIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; $hlavicka .= "Content-Transfer-Encoding: base64"; mail ("$email","$email - Zaslání nového hesla","$zprava","$hlavicka") or die ('Nemohu odeslat aktivační e-mail.'); echo '<span class="oznameni">Na Váš e-mail byly zaslány pokyny pro získání hesla.</span>'; } } } } ?> A teď vypisuje chybovou hlášku: Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 55 Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 57 Nemohu ověřit správnost e-mailu. |
||
Rfilip Profil |
Dej sem obsah souboru db.php
|
||
ggame Profil |
<?php $spojeni = mysql_connect("neco:D","jmeno","heslo" ) or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); mysql_select_db("databaze", $spojeni) or die ('Spatne zadana databaze v db.php'); mysql_query("SET NAMES utf8"); ?> Místo neco:D, jmeno, heslo a databaze jsem samozřejmě doplnil údaje. |
||
Rfilip Profil |
#8 · Zasláno: 19. 9. 2013, 16:57:06
V db.php máš $dbconnect ale v heslo.php máš $spojeni.
v db.php použiváš starší mysql_* ale v heslo.php používáš novější mysqli_*. Chcete to sjednotit jména proměných a použité rozšíření pro Mysql. |
||
ggame Profil |
Už jsem to upravil:
heslo.php <?php $chyba = 0; if($_POST) require 'db.php'; { $email = $_POST['email']; // Ověření, že bylo pole vyplněno if(trim($email) == '') { echo '<span class="chybova_hlaska">Musíte vyplnit Vaši e-mailovou adresu!</span>'; $chyba = 1; } else { // Ověření správnosti e-mailu if(!EregI("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,6}$", $email) || EregI("\.{2,}", $email) || EregI("_{2,}", $email) || EregI("-{2,}", $email)) { echo '<span class="chybova_hlaska">Nesprávný formát e-mailu!</span>'; $chyba = 1; } // Pokud je vše správně vyplněno, zkontroluj, jestli je e-mail registrován if($chyba == 0) { // Ověření, zda zadané informace souhlasí s těmi v databázi $query = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($spojeni,$email)); $result = mysql_query($spojeni,$query) or die ('Nemohu ověřit správnost e-mailu.'); $data = mysql_fetch_array($result); if(!$data) { echo '<span class="chybova_hlaska">V databázi není žádný hráč s tímto e-mailem!</span>'; $chyba = 1; } else { // Odeslání potvrzovacího e-mailu uživateli $new_password_validkey = md5(uniqid()); $query = sprintf("UPDATE users SET new_password_validkey = '%s' WHERE email = '%s'", mysql_real_escape_string($spojeni,$new_password_validkey), mysql_real_escape_string($spojeni,$email)); mysql_query($spojeni,$query) or die ('Nemohu vložit potvrzovací kód do databáze.'); $email_encoded = rawurlencode($email); $zprava = "Dobrý den,\n\nz bezpečnostních důvodů ukládáme hesla v zašifrovaném formátu, takže Vám jej nemůžeme zaslat.\n\nMůžete si však nechat vygenerovat heslo nové. Pokud tak chcete učinit, klikněte na tento odkaz:\n$path/nove_heslo.php?email=$email_encoded&new_password_validkey=$new_password_validkey\nV opačném případě nebude heslo změněno.\n\nS pozdravem,\nAdministrátor online hry\n$path"; $zprava= Base64_Encode($zprava); $hlavicka = "MIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; $hlavicka .= "Content-Transfer-Encoding: base64"; mail ("$email","$email - Zaslání nového hesla","$zprava","$hlavicka") or die ('Nemohu odeslat aktivační e-mail.'); echo '<span class="oznameni">Na Váš e-mail byly zaslány pokyny pro získání hesla.</span>'; } } } } ?> db.php <?php $spojeni = mysql_connect("neco:D","jmeno","heslo" ) or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); mysql_select_db("databaze", $spojeni) or die ('Spatne zadana databaze v db.php'); mysql_query("SET NAMES utf8"); ?> Ale stále to zobrazuje chybovou hlášku: Warning: mysql_real_escape_string() expects parameter 1 to be string, resource given in /data/web/virtuals/44406/virtual/www/domains/admin.trydox.eu/inc/heslo.php on line 55 Warning: mysql_query() expects parameter 1 to be string, resource given in /data/web/virtuals/44406/virtual/www/domains/admin.trydox.eu/inc/heslo.php on line 57 Nemohu ověřit správnost e-mailu. |
||
Rfilip Profil |
<?php $dbconnect =mysqli_connect("myhost","myuser","mypassw","mybd"); if (mysqli_connect_errno()) { die('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); } mysqli_set_charset ( $dbconnect , "utf8") ?> mysql_real_escape_string($email)); $result = mysql_query($query) |
||
ggame Profil |
Stále vypisuje
Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 55 Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 57 Nemohu ověřit správnost e-mailu. Takhle ještě vypadá formulář obnovit-heslo.php <form id="login" action="heslo.php" method="post"> <dt><label for="email">Email:</label></dt> <dd> <input type="text" class="text" name="email" id="user" value=""> </dd> </dl> </dl> <dl class="formitem-submit"> <dt></dt> <dd> <input type="submit" class="submit" name="send" value="Přihlásit se"> </dd> </dl> |
||
Rfilip Profil |
#12 · Zasláno: 19. 9. 2013, 17:32:06
ggame:
> Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 55 > Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /root/heslo.php on line 57 Cože? To by to dle kodu v[#9] ggame nemělo házet, A navíc ti nesedí čísla řádků kodu o cca 20 vůči řádkům v chybach. Dej sem aktualní verzi db.php a heslo.php |
||
ggame Profil |
#13 · Zasláno: 19. 9. 2013, 17:37:09
A už jsem na to přišel, sorry.
V heslo.php jsem omylem napsal require 'db.php'; kde je stará databáze a nová má název require 'dbheslo.php'; Mockrát děkuji za vyřešení |
||
Časová prodleva: 11 let
|
0