Return to Snippet

Revision: 67067
at August 6, 2014 19:29 by dmkim


Initial Code
function cde($db) {
  if ($db->errno!=0)
     throw new Exception ('db error: '.$db->error);
}
 
session_start();
 
$db = new mysqli ('','','','');
if (mysqli_connect_errno())
   throw new Exception ('connect error: '.mysqli_connect_error());
 
 
check_db();
 
if (isset($_GET['checkout'])) {
   checkout();
   exit();
}
 
if (isset($_GET['add_to_basket'])) {
   add_to_basket($_GET['add_to_basket']);
}
 
if (isset($_GET['delete_from_basket'])) {
   delete_from_basket($_GET['delete_from_basket']);
   show_basket();
   exit();
   }
 
if (isset($_GET['show_basket'])) {
   show_basket();
   exit();
}
 
show_page();
 
 
//---------------------------------
function check_db() {
   global $db;
 
   $rez = $db->query('show tables like \'zshop\'');
   cde($db);
   
   if ($rez->num_rows==0) {
      $db->query('create table zshop( id int(11) not null auto_increment,'.
         'product varchar(500), rating int(11),'.
         'primary key (`id`))');
 
      cde($db);
 
      $db->query ('insert into zshop(product, rating)
             select link, rating from bookm_tmp a left outer join zstat b
                 on a.id=b.pic_id');
 
      cde($db);
   }
   
}
//---------------------------------
function add_to_basket($id) {
 
   if (!isset($_SESSION['basket']))
      $_SESSION['basket'] = array();
 
   $_SESSION['basket'][] = $id;
   
}
//---------------------------------
function show_page() {
 
   
   global $db;
   $perpage = 10;
   $page = isset($_GET['page']) ? $_GET['page'] : 1;
   $start = ($page-1)*$perpage;
   
   $rez = $db->query('select count(*) from zshop');
   cde($db);
   $pages = $rez->fetch_row();
   $pages = ceil($pages[0]/$perpage);
 
   ob_start();
    echo '<br/><br/>';
   for ($i=0; $i<$pages; $i++) {
       echo str_repeat('&nbsp;',3);
       if ($i+1==$page) {
          echo ($i+1);
       } else {
            echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.($i+1).'">'.($i+1).'</a>';
       }
       if (($i+1)%20==0)
          echo '<br/>';
   }
   echo '<br/><br/>';
 
   $nav = ob_get_clean();
 
   echo (isset($_SESSION['basket']) && (count($_SESSION['basket'])>0)) ?
         '<a href="'.$_SERVER['PHP_SELF'].'?show_basket">'.
         count($_SESSION['basket']). ' items in the basket</a><br/>' : 'basket is empty<br/>';
 
   echo $nav;
 
   $stmt = $db->prepare('select id, product, rating from zshop order by id limit ?,?');
   cde($db);
   $stmt->bind_param('dd',$start,$perpage);
 
   $stmt->execute();
   $stmt->bind_result($id, $product, $rating);
 
   echo '<table>';
   $i = 0;
   while ($stmt->fetch()) {
      if ($i%3==0)
         echo '<tr>';
 
       $inf = $_SERVER['REQUEST_URI'];
       preg_match ('/(?<=http).*?(https?.*)/', $product, $match);
       $link  = 'http://freedomplace.ru/diff/php_dbg/loader.php?thumb='.$match[1];
       
       echo '<td><a href="'.$inf.((strpos($inf,'?')!==false)?'&':'?').'add_to_basket='.
             $id.'"><img src="'.$link.'" /></a><h2>Rating: '.$rating.'</h2></td>';
 
      if (($i+1)%3==0)
         echo '</tr>';
      $i++;
   }
   
}
//---------------------------------
function show_basket() {
   
   $catlink = (strpos($_SERVER['HTTP_REFERER'], $_SERVER['PHP_SELF'])!==false)
               && (strpos(strstr($_SERVER['HTTP_REFERER'],'?'),'checkout')===false)?
               $_SERVER['HTTP_REFERER']: $_SERVER['PHP_SELF'];
 
   $inf = parse_url($catlink);
 
   $catlink = $inf['scheme'].'://'.$inf['host'].$inf['path'];
 
   if (isset($inf['query'])) {
 
      parse_str($inf['query'], $zq);
      $f = create_function('$a','return $a==\'page\';');
      $zq = array_flip(array_filter(array_flip($zq), $f));
 
     $catlink .= '?'.http_build_query($zq);
 
   }
 
   
 
   $catlink = '<a href="'.$catlink.'">back to catalog</a>';
 
   if ((empty($_SESSION['basket'])) || (count($_SESSION['basket'])==0)) {
      echo 'basket empty<br/>';
      echo $catlink.'<br/>';
      return;
   }
 
   echo $catlink.'<br/>';
 
   global $db;
   $rez = $db->query('select id,product,rating from zshop where id in ('.
                implode(',', $_SESSION['basket']).')');
 
   cde($db);
 
   while ($row = $rez->fetch_assoc()) {
 
 
      preg_match ('/(?<=http).*?(https?.*)/', $row['product'], $match);
       $link  = 'http://freedomplace.ru/diff/php_dbg/loader.php?thumb='.$match[1];
 
      echo '<div><img src="'.$link.'" /><h2>Rating: '.$row['rating'].'</h2>';
      echo '<a href="'.$_SERVER['PHP_SELF'].'?delete_from_basket='.$row['id'].
              '">delete from basket</a></div>';
   }
 
   $rez->free();
   echo '<h2><a href="'.$_SERVER['PHP_SELF'].'?checkout" />checkout</a></h2>';
     
}
//---------------------------------
function delete_from_basket($id) {
 
   $key  = array_search ( $id, $_SESSION['basket']);
   if ($key!==false)
      unset($_SESSION['basket'][$key]);
}
//---------------------------------
function checkout() {
 
   global $db;
   $rez = $db->query ('select id, product, rating from zshop where
                    id in ('.implode(',',$_SESSION['basket']).')');
 
   cde($db);
 
   if (!file_exists('./checks') || !is_dir('./checks'))
      mkdir('checks');
 
   $fname = './checks/check_'.date('d_m_Y_H_i_s_').rand(1,10000).'.txt';
   $cfile = fopen($fname, 'w');
   fwrite ($cfile, "items list\n\r");
   fwrite ($cfile, str_repeat("\n\r",3));
 
   while ($row = $rez->fetch_object()) {
      fwrite($cfile, $row->id.' '.$row->product.' '.$row->rating."\n\r");
   }
 
   fclose($cfile);
 
   header('Content-type: text/plain; charset=windows-1251');
   include($fname);
}

Initial URL


Initial Description
EShop for interviews

Initial Title
EShop for interviews

Initial Tags


Initial Language
PHP