Autor Zpráva
barneby
Profil
Dobrý den,
mám tu takovej csript na registraci uživatelů v mým redakčním systému ale kdiž na csript odešlu data tak my to napíše : Query was empty
Zde je ten csript:
<?php
ob_start();               // cachujeme vystup
  if(isset($_POST['sent'])){      // pokud byl odeslan formular pokracuj timto
    $nick=($_POST['nick']);
    $jmeno=($_POST['jmeno']);
    $prijmeni=($_POST['prijmeni']);
    $heslo1=$_POST['heslo1'];
    $heslo2=$_POST['heslo2'];
    $mail=($_POST['mail']);
    $skype=($_POST['skype']);
    $web=($_POST['web']);
    if($nick=="" or $jmeno=="" or $prijmeni=="" or $heslo1=="" or $mail==""){ // pokud nebylo vyplněno něco z toho, co je povinné, dáme vědět a skript ukončíme
      $backlink="../index.php?page=registrace&Alert=1";
    }else{              // povinné udaje vyplněny vsechny
      require "../db_login.php";     // pripojime se k databazi
      $Overeni = $db->query(mysql("SELECT COUNT(*) FROM `uzivatele` WHERE `nick`='$nick' OR `mail`='$mail'"),0) or die (mysql_error());
      if($Overeni!=0){    // pokud v db je jiz takove jmeno nebo heslo...
        $backlink="../index.php?page=registrace&Alert=2";
      }elseif($heslo1 != $heslo2){    // pokud se hesla nerovnají
        $backlink="../index.php?page=registrace&Alert=3";
      }else{            // hesla se shoduji, vlozime tedy data do databaze
        $heslo=md5($heslo1);  // zahashujeme heslo
        if($web=="http://" or $web==""){ //pokud nezadal web tak dame promennou web Neuveden
          $web="Neuveden";
        }
        $VlozData = $db->query("INSERT INTO uzivatele (nick,jmeno,prijmeni,heslo,mail,skype,web,prava) VALUES ('$nick', '$jmeno', '$prijmeni', '$heslo', '$mail', '$skype', '$web', '0')") or die (mysql_error());
        // Vlozim do tabulky hodnoty - prvni je ID - nevyplnim, tvori se samo.
        // Jako posledni hodnota je "0", to jsou ty prava uzivatele.
        
        $backlink="../index.php?Alert=4"; // presmerovani s hlaskou ze je vse OK
      }

    }
  }else{
    $backlink="../index.php?page=registrace&Alert=5";
  }
// pokud pouzijete HEADER LOCATION tak by pred nim nemelo byt zadne platne ECHO
//echo "<a href='index.php'>index</a>";
// samozrejme zde muze byt presmerovani na jinou stranku pomoci
 header ("Location: $backlink");
ob_end_flush();

?>
A zde je formulář pro ten csript:
<h1>Registrace</h1>
<form action="./php/registrace.php" method="post">
  <input type="hidden" name="sent" value=""/>
    <input type="text" name="nick" maxlength="32"/> <strong>Už. jméno</strong> <br/>
    <input type="text" name="jmeno" maxlength="32"/> <strong>jméno</strong> <br/>
    <input type="text" name="prijmeni" maxlength="32"/> <strong>Přijmení</strong> <br/>
    <input type="password" name="heslo1" maxlength="32"/> <strong>Heslo</strong> <br/>
    <input type="password" name="heslo2" maxlength="32"/> <strong>Heslo znovu </strong><br/>
    <input type="text" name="mail" value="" maxlength="64"/> <strong>Email</strong><br/>
    <input type="text" name="skype" maxlength="32"/> <strong>skype</strong> <br/>
    <input type="text" name="web" value="http://" maxlength="128"/> Web<br/>
  <input type="submit" name="send" value="Registruj"/>
</form>
Poraďte my prosím co mám špatně.
Děkuju.
Davex
Profil
Mám pocit, že jsou na 16. řádku nějak pomotané metoda $db->query() a funkce mysql().

Třeba tady Duplicate entry '0' for key 1 je stejný skript a 14. řádek vypadá trochu jinak.
barneby
Profil
Davex:
Mám pocit, že jsou na 16. řádku nějak pomotané metoda $db->query() a funkce mysql().
Ano to máš pravdu nevím jak ti udělat jinak.


Davex:
Třeba tady Duplicate entry '0' for key 1 je stejný skript a 14. řádek vypadá trochu jinak.
Ano to taky ale zde je používána zastaralá metodat query
Davex
Profil
Tak to asi musíš najít náhradu i za zastaralou funkci mysql_result a správně jí poskládat s metodou $db->query() na 16. řádku. Skript předěláváš z rozšíření MySQL na objektové MySQLi?
barneby
Profil
Ano csript je rozšířenej. Zde ti poskytnu soubory db_login.php a soubor sql_connector.class.php
Zde je db_login.php
<?php

define('DB_SERVER', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'heslo');
define('DB_NAME', 'rs');
define('DB_PREFIX', '');


//------------------------------------------------ 

require "php/sql_connector.class.php";

$db = new DB(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

$db->query("SET NAMES utf8");

if(!$db->spojeni)
  {
  exit("Nelze se spojit s databazovym serverem.");
  }

if(!$db->spojeno)
  {
  exit("<p>MySQL server byl pripojen (spravne prihlasovaci udaje),
    ale <b>nebyla nalezena databaze</b> se zadanym jmenem.
    Patrne chybny udaj.</p>");
  }
A zde je sql_connector.class.php
<?php



class DB {
    
    var $spojeni;
    var $spojeno;
    var $pocitadlo = 0;
    var $soucet_casu = 0;
    var $debug = false;    
    var $sql_log = array();
    var $posledni = '';
    
    
    /*
        Pripojeni + zajisteni uzavreni spojeni s db po skonceni behu scriptu
    */
    function DB($h,$u,$p,$db)
        {
        $this->host = $h;
        $this->db = $db;
        $this->user = $u;
        $this->pass = $p;
        $this->spojeni = @mysql_connect($this->host, $this->user, $this->pass);
        
        $this->spojeno = @mysql_select_db($this->db);
        
        if($_SERVER['REMOTE_ADDR'] == $_SERVER['SERVER_ADDR'])
            {
            $this->debug = true;
            }
        else
            {
            $this->debug = false;            
            }
        
        register_shutdown_function(array(&$this, 'close'));
        }
    
    
    /*
        Nahrada mysql_query().
        Pri debug modu pocita dotazy a dobu, za jakou je db zpracuje.
    */
    function query($sql)
        {
        
        $this->pocitadlo++;
        $t1 = $this->getTime();
        
        if(!($result = @mysql_query($sql)) && $this->debug)
            {
            echo "<p class=\"dberror\">".mysql_error()."<br />".$sql."</p>";
            }
        
       $time = $this->getTime() - $t1;
        $this->sql_log[] = $time . ' - ' . $sql . '<br />';
        $this->soucet_casu += $time;
        
        $this->posledni = 'SQL: '.$sql.' ('.$time.')';
        
        return $result;
        }
    
    
    
    /*
        Slouzi pro ziskani presneho casu pro pocitani, jak dlouho trva dotaz na db.
    */
    function getTime()
        {
        list($usec, $sec) = explode(' ',microtime());
           $querytime = ((float)$usec + (float)$sec);
        return $querytime;
        }
    
    
    /*
        Vypise sql log (prikazy a dobu jejich zpracovani).
    */
    function getSqlLog($typ = 1)
        {
        
        if($typ == 1)
            {
            $h = 'Dotazu: '.$this->pocitadlo .' ('.$this->soucet_casu.')<br />';
            foreach($this->sql_log AS $sql)
                {
                $h .= $sql;
                }
            return $h;
            }
        else if($typ == 2)
            {
            $p = array($this->pocitadlo, $this->soucet_casu);
            return $p;
            }
        }
    
    
    
    
    /*
        Ukonceni spojeni.
    */
    function close()
        {
        @mysql_close($this->spojeni);
        }
    
    
    }











function save2db($pole,$tabulka,$where = null) // if $where -> update
    {
    global $db;
    $q = '';
    $ins_ind = '';
    $ins_val = '';
    foreach ($pole as $index => $hodnota)
        {
        $hodnota = "'$hodnota'";
        if(!empty($where)) // buduje se UPDATE query (index=hodn,index=hodn,...)
            {
            $q .= "$index=$hodnota, ";
            }
        else // buduje se INSERT query 
            {
            $ins_ind .= "$index, ";
            $ins_val .= "$hodnota, ";             
            }
        }
    
    if(!empty($where))
        {
        $q = substr($q,0,-2); // orizneme posledni carku a mezeru
        $sql = 'UPDATE '.$tabulka.' SET '.$q.' '.$where;
        }
    else
        {
        $ins_ind = substr($ins_ind,0,-2);
        $ins_val = substr($ins_val,0,-2);
        $sql = "INSERT INTO $tabulka ($ins_ind) VALUES($ins_val)";
        }
        
        
    if($db->query($sql))
        {
        return true;
        }        
    else
        {
        return false;
        }    
    }
Budu vděčný ža každí nápad jak nahradit funkci mysql_result za metodu $db->query()
Davex
Profil
barneby:
Budu vděčný ža každí nápad jak nahradit funkci mysql_result za metodu $db->query()
Funkce mysql_result dělá něco jiného než $db->query() a nejdou navzájem nahrazovat. Stále používáš zastaralé DB rozšíření MySQL, ke kterému přidáváš jen nějakou obálku, takže jsi tam mohl mysql_result klidně nechat.

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: