Autor Zpráva
ggame
Profil
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
V proměnné $dbconnect je NULL, takže není includovan db.php jehož Include nikde nevidím.
ggame
Profil
Aha, a jak bych to mohl opravit aby to fungovalo.
Odstraněním $dbconnect a nahrazením require 'db.php'; ?
Rfilip
Profil
Přidáním require 'db.php'; na začátek.
ggame
Profil
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
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")
 ?>
Aha tak jsi šel opačně tak musíš řádky 28-29 nahradit tímto:
                     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
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
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í

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: