2014-04-03 2 views
0

Я хочу, чтобы иметь возможность выбирать любимый продукт из корзины покупок. Это мой код (это с IBKCart изменениями):onclick событие на гиперссылке выполняется преждевременно

<?php 
    function ShowCartWtPrd(){ 
     global $fav_id; 
     $itemClass = ($this->getCartItems() > 2) ? "insideContMainArea2": "insideContMainArea"; 
     $plural = ($this->getCartItems() > 1)? 's': '' ; 


     if (isset($_SESSION['favourites']) && !$_SESSION['favourites'] == "False") { 

      $this->updFavourites(); 
      unset($_SESSION['favourites']); 
     }       

     $Out = 
     '<div id="theOverlay">&nbsp; 
      <table width="100%" border="0" cellspacing="0" cellpadding="2"> 
      <tr> 
       <td width="20%"><div align="right"><img name="" src="./imgs/wait.gif" width="32" height="32" alt="" /></div></td> 
       <td width="50%"><div align="left">&nbsp;<strong>Updating...Please Wait</strong> </div></td> 
      </tr> 
      </table> 
     </div> 
     <div id="Cart_Container"> 
      <div id="Car_top_bg"></div> 
      <div id="Cart_middle"> 
       <div id="'. $itemClass. '"> 
        <table width="100%" border="0" cellspacing="2" cellpadding="2"> 
        <tr bgcolor="#E6EDD2"> 
         <td width="55%" height="21" bgcolor="#E6EDD2"><div align="center"><strong>Item Description </strong> 
         </div> 
         </td> 
         <td width="11%"><div align="center"><strong>Qty</strong></div></td> 
         <td width="11%"><div align="center"><strong>Prc/Qty</strong></div></td> 
         <td width="11%"><div align="center"><strong>Fav</strong></div></td> 
         <td width="11%"><div align="center"><strong>Del</strong></div></td> 
        </tr>' ; 
        $cnt=1; 
        foreach($this->cart as $itemId=>$Qty){ 
         ++$cnt; 
         $ans = fmod($cnt,2); 
         if($ans == 0){$bg = '#ECF9FF';}else{$bg='';}; 
         $ProdDts = $this->getProdDts($itemId); 

         $this->totAmt += $ProdDts[$this->prodPrc] * $Qty ; 
         $fav_id = $ProdDts[$this->prod_id]; 

          $Out .= '<tr bgcolor="'. $bg .'"> 
          <td valign="top"> 
           <table width="100%" border="0" cellspacing="1" cellpadding="0"> 
           <tr> 
            <td width="60%" valign="top"> 
             ' . $ProdDts[$this->prodNm] .' 
             <br />     
            </td> 
           </tr> 
           </table> 
           </td> 
           <td valign="top"><div align="center">' . $Qty .'</div></td> 
           <td valign="top">' . $ProdDts[$this->prodPrc] .'</td> 
           <td valign="top"> 
            <div align="center"> 
             <a href="#?favourites=true"> 
              <img src="./imgs/fav_trnsp_icon.png" 
               alt="Add to favourites" width="16" height="16" border="0" 
               title="Add to favourites" name="favourites" 
               onclick="document.write('. $this->updFavourites() .');" 
              />                   
             </a> 
            </div> 
           </td> 
           <td valign="top"> 
            <div align="center"> 
             <a href="#" 
              onclick="doCart(\'DelItem\', \'' . $ProdDts[$this->prodId] . '\', 0, \' \', \'Small\');"> 
              <img src="./imgs/cart_remove.png" alt="Delete Item" width="16" height="16" border="0" title="Delete Item"/></a> 
            </div> 
                   </td> 
          </tr> 
          <tr> 
         <td colspan="4" valign="top"><div class="clear"></div></td> 
        </tr>'; 
        } 

        $Out .= ' 
        </table> 
       </div> 
      </div> 
      <div id="Cart_gtotal"> 
       <div class="theCont">Grand Total => '. $this->ShowCurSymbol() .' '. $this->toMoney($this->totAmt) . '</div> 
      </div> 
     </div>' ; 

     echo $Out; 
    } 
      function updFavourites() { 
       global $username; 
       global $password; 
       global $database; 
       global $fav_id; 
       $conn = mysqli_connect("localhost",$username,$password, $database); 
       // Check connection 
       if (mysqli_connect_errno($conn)) 
        { 
        echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
        } 
       // mysql_connect("localhost","$username","$password") or die("Error: ".mysqlerror()); 
       // mysql_select_db("$database"); 
       if (isset($_SESSION['fav_id'])) { 
        $fav_id = $_SESSION['fav_id']; 
       } 
       $dealer_id = $_SESSION['dealer_id']; 
       $ProdDts = $this->getProdDts($fav_id); 

       $part_id  = $ProdDts[$this->prod_id]; 
       $sql = "INSERT INTO favourites VALUES (0,'$dealer_id','$part_id')"; 
       $result = $conn->query($sql) or exit("Error code ({$conn->errno}): {$conn->error}"); 

       /* close up */ 
       //$conn->close(); 
      } 
?> 

      } 

Если я пошагово код с помощью отладчика, я так далеко, как линия

$Out .= '<tr bgcolor="'. $bg .'"> 

и он идет прямо в updFavourites() Функция, которую я хотел сделать в событии onclick "favourites" в конце функции ShowCartWtPrd. Я пытаюсь отладить это, но не вижу, что вызывает его. Возможно, у кого-то есть идея.

+0

Опубликовать HTML. – j08691

+0

Вы еще не поняли разницу между PHP-кодом на стороне сервера и клиентским JavaScript-кодом ... _of course_ 'updFavourites' выполняется там, а затем, потому что это функция PHP. PHP давно работает со своей работой, прежде чем страница достигает клиента. – CBroe

+0

, как я уже сказал Бикондже, 'updFavourites' зависит от переменной сеанса' favourites', которая устанавливается только с помощью onclick evernt, поэтому я не вижу, как это происходит. – Geoff

ответ

1

Вы путаете события на стороне сервера и на стороне клиента. Событие onclick, которое вы используете, является событием javascript (на стороне клиента) и будет выполняться, когда пользователь нажимает на элемент, но так как вы выводите строку $ Out из PHP (на стороне сервера), и вы объединяете значения строковые константы и функцию updFavourites, PHP выполняет код на стороне сервера, а затем дает код на стороне клиента, который является оцененной функцией PHP.

+0

Я, конечно, понимаю, что вы говорите, но почему вызвана функция 'updFavourites()'. В коде есть только один вызов, который, похоже, зависит от события onclick. Это объяснимо? – Geoff

+0

@Geoff Он не должен зависеть от события onclick. Переменная PHP, с которой вы объединяете функцию updFavourites, всегда вызывается внутри итерации цикла foreach. Может, вы не входите в 'foreach'? PHP не знает, что такое 'onclick', поэтому он не зависит от этого. Попытайтесь увидеть, вызвана ли 'foreach', когда вы думаете, что' onclick' не запускается. – Bikonja

+0

У меня есть код для этого события onclick из этого вопроса: [link] (http://stackoverflow.com/questions/7451070/calling-a-php-function-by-onclick-event). ** Атрибут onClick тегов html принимает только Javascript, но не код PHP. Однако вы можете легко вызвать функцию PHP из кода Javascript с помощью функции JS document.write() - эффективно вызывает функцию PHP путем «записи» ее вызова в окно браузера ** – Geoff

Смежные вопросы