Autor Zpráva
Fisak
Profil
Dobrý den, chtěl jsem si udělat do svého CMS takové tlačítko "Update" které když bych zmáčknul tak se mi aktualizuje DB podle určité definice.. Bohužel jsem v koncích jelikož nevím proč mi to nefunguje..
database.txt:
options{row(type,text)mod_rewrite:no;title:titulek stranky;default_language:cs;change_language:no;one_language:no;template:default;default_page:home;web_name:Nazev stranky;web_subtitle:podnazev stranky;author:Insignia CMS;date_format:j.n.Y;time_format:G:i;seo_description:;seo_keywords:;pagination:no;num_pagination:10;version:1.0.0 BETA;image_player:default;media_player:default;form_plugin:default;headers:;analytics:;footer:;address:;}

tlačítko update:
$errmsg_vers = false;
        $fp_vers = @fsockopen('adresa.cz', 80, $errno_vers, $errstr_vers, 30);
        
        if (!$fp_vers) return '';
        else {

            $out_vers = "GET /update/database.txt HTTP/1.1\r\nHost: adresa.cz\r\nConnection: Close\r\n\r\n";
 
            fwrite($fp_vers, $out_vers);
            while (!feof($fp_vers)) {
            $database_vers = fgets($fp, 128);
            $echo_database = preg_replace('#[^0-9\a-z\(\)\-\_\;\{\}\:\.]#ui', '', $database_vers);

      $exp_table = explode("}", $echo_database);   //rozdělení tabulek
      $n_table = count($exp_table);
      
      for ($i_table = 0; $i_table <= $n_table; $i_table++) {
      
        $count_table = explode("{", $exp_table[$i_table]); //rozdělení názvu tabulky od obsahu
        
        $count_table_t = explode(")", $count_table[1]);   //rozdělení obsahu od typu 
        
        $count_table_ty = explode("(", $count_table_t[0]); //rozdělení typu od definice tabulky
        
        $count_table_type = explode(",", $count_table_ty[1]);  //rozdělení typů sloupců
        
        $count_table_row = explode(";", $count_table_t[1]);   //rozdělení jednotlivých řádků
        $n_count_table = count($count_table_row); 
      
      
        for ($i_count_table = 0; $i_count_table <= $n_count_table; $i_count_table++) {
        $table_exp_tab = explode(":", $n_count_table[$i_count_table]);
        
        if($count_table_ty[0] == "row") {
        
        $sql_up_db = DB::query("SELECT * FROM [:pref:".$count_table[0]."] where [".$count_table_type[0]."] = %s", $table_exp_tab[0]); 
        if(count($sql_up_db) != 1) {
        
        $arr_db_table = array(
        $count_table_type[0] => $table_exp_tab[0],
        $count_table_type[1]  => $table_exp_tab[1],
          );
    
          DB::query("insert into [:pref:".$cont_table[0]."]", $arr_db_table);
        
        }
        
        } elseif ($count_table_ty[0] == "table") {}
        
        }
          
      
      }



            }

      fclose($fp);

    }

Nevěděl by si někdo rady nebo neviděl by někdo nějakou chybu v kódu? Předem děkuji za odpovědi.
Kajman
Profil
Tak si např. vypište dotazy nebo postupně proměnné, zda tam je to, co očekáváte.

Problém může být ve zpracovávání po 128 znacích, ale i klidně úplně jinde. Ten formát asi není zrovna nejšťastnější, co když v datech bude nějaká závorka či čárka? XML by bylo lépe čitelnější.
Fisak
Profil
No zkoušel jsem vše vypsat takto:
if($count_table_ty[0] == "row") {
        
        echo "Tabulka: ".$count_table[0]."<br> 
              Typ: ".$count_table_ty[0]."<br>
              Sloupce: ".$count_table_type[0].", ".$count_table_type[1]."<br>
              Řádek: ".$table_exp_tab[0].", ".$table_exp_tab[1]."<hr>";
        
        } elseif ($count_table_ty[0] == "table") {}
bohužel se mi stránka vůbec nenačte.. jen bílé pozadí..
Kajman
Profil
Tak se tam vůbec kód nedostane. Vypište si i dřívější proměnné, případně si zapněte zobrazování php chyb.
aDAm
Profil
error log mlčí?
Fisak
Profil
Už mám opravenou většinu chyb... jen :
<?php
      $content = file_get_contents('http://insignia.netstrike.cz/update/database.txt');
  $echo_database = preg_replace('#[^0-9\a-z\(\)\-\_\;\{\}\:\.]#ui', '', $content);
      $exp_table = explode("}", echo_database);   //rozdělení tabulek
      $n_table = count($exp_table);
      
      for ($i_table = 0; $i_table <= $n_table; $i_table++) {
      
        $count_table = explode("{", $exp_table[$i_table]); //rozdělení názvu tabulky od obsahu
        
        $count_table_t = explode(")", $count_table[1]);   //rozdělení obsahu od typu 
        
        $count_table_ty = explode("(", $count_table_t[0]); //rozdělení typu od definice tabulky
        
        $count_table_type = explode(",", $count_table_ty[1]);  //rozdělení typů sloupců
        
        $count_table_row = explode(";", $count_table_t[1]);   //rozdělení jednotlivých řádků
        $n_count_table = count($count_table_row); 
      
      
        for ($i_count_table = 0; $i_count_table <= $n_count_table; $i_count_table++) {
        $table_exp_tab = explode(":", $n_count_table[$i_count_table]);
        
        if($count_table_ty[0] == "row") {
        
        echo "č. ".$i_count_table." Tabulka: ".$count_table[0]."<br> 
              Typ: ".$count_table_ty[0]."<br>
              Sloupce: ".$count_table_type[0].", ".$count_table_type[1]."<br>
              Řádek: ".$table_exp_tab[0].", ".$table_exp_tab[1]."<hr>";
        
        } elseif ($count_table_ty[0] == "table") {}
        
        }
          
      
      }



?>
"Řádek: ".$table_exp_tab[0].", ".$table_exp_tab[1]."<hr>"; se mi ale bohužel nevypisuje .. bohužel nevím proč..
Kajman
Profil
Protože $n_count_table není pole, jak očekáváte na řádku 22.
Fisak
Profil
Děkuji. S vaší pomocí funguje vše jak má.

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: