2009-06-20 7 views
0

내 코드 OO를 작성하는 도중에이 문제가 발생했습니다. 다음 클래스는 나에게 이상한 문제를주고있다. 함수 CartTotal()을 만들면 적절한 값을 반환합니다. 그러나 함수 DisplayListings(); MySQL 데이터를 표시하지 않았습니다 (둘 다 $ this-> displaylistings 사용). 그리고 내가이 두 함수를 호출하는 내 페이지의 순서를 변경하면 CartTotal(); 아무것도 얻지 않으며, DisplayListings(); 그것이해야하는대로 일합니다. 그래서 $ this-> displaylistings를 사용하는 것이 엉망입니다. 내가 무엇을하고 있는지 아이디어가 있다면 알려주세요. 여기 클래스입니다 : (아직 완료와 함께 & 일부 정규화 할 필요가).이상한 클래스 문제

class Listing { 

    public $displaylistings; 
    public $displaycount; 
    public $viewall; 
    public $ShopperID; 
    public $numrows; 

    public function __construct() { 

     $Person = new User(); 

     $ShopperID = mysql_query("SELECT * FROM users WHERE Username = '$Person->username'"); 
     $row_ShopperID = mysql_fetch_object($ShopperID); 
     $this->ShopperID = $row_ShopperID->UserID; 

     $this->displaylistings=mysql_query("SELECT * FROM nordstromlisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM saksfifthavenuelisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM guesslisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM gnclisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM urbanoutfitterslisting WHERE ShopperID = '$tnis->ShopperID' 
     UNION ALL SELECT * FROM bananarepubliclisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM americaneaglelisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM neimanmarcuslisting WHERE ShopperID = '$this->ShopperID' 
     UNION ALL SELECT * FROM footlockerlisting WHERE ShopperID = '$this->ShopperID'"); 
     if (mysql_num_rows($this->displaylistings) == 0) { 
      echo "<div id='nolistings'><a href='shop.php'>You have no active listings, <br />click here to get started.</a></div>"; 
      $this->numrows = mysql_num_rows($this->displaylistings); 
     } 
     elseif (mysql_num_rows($this->displaylistings) == 1) { 
      $this->displaycount = 1; 
      $this->numrows = mysql_num_rows($this->displaylistings); 
     } 
     elseif (mysql_num_rows($this->displaylistings) == 2 || mysql_num_rows($this->displaylistings) > 2) { 
      $this->displaycount = 2; 
      $this->numrows = mysql_num_rows($this->displaylistings); 
     } 
    } 

    public function CartTotal() { 
     for ($i=0;$i<$this->numrows;$i++) { 
      $row = mysql_fetch_assoc($this->displaylistings); 
      echo $row['DiscountedPrice']; 
     } 
    } 

    public function DeleteListing() { 
     if ($_POST['deletelisting'] == 'yes') { 
      $deleteid = $_POST['deleteid']; 
      $deletestore = "$_POST[storename]"; 
      $idstorehistory = str_replace("listing", "history", $deletestore); 
      $movetohistory = mysql_query("INSERT INTO $idstorehistory SELECT * FROM $identifystore WHERE id = $deleteid"); 
      $userdelete = mysql_query("DELETE FROM $deletestore WHERE id = $deleteid"); 
     } 
    } 

    public function DisplayListing() { 

      for($i=0;$i<$this->displaycount;$i++) { 
      $row=mysql_fetch_assoc($this->displaylistings); 

      // Check to what store this listing belongs to 
      $nordstromtest=mysql_query("SELECT * FROM nordstromlisting WHERE ShopperID = '$this->ShopperID'"); 
      $nordstromstore=mysql_fetch_assoc($nordstromtest); 
      if ($row == $nordstromstore) { 
       $storename = "Nordstrom"; 
       $storetbl = "nordstromlisting"; 
      } 

      $saksfifthavenuetest=mysql_query("SELECT * FROM saksfifthavenuelisting WHERE ShopperID = '$this->ShopperID'"); 
      $saksfifthavenuestore=mysql_fetch_assoc($saksfifthavenuetest); 
      if ($row == $saksfifthavenuestore) { 
       $storename = "Sak's Fifth Avenue"; 
       $storetbl = "saksfifthavenuelisting"; 
      } 

      $neimanmarcustest=mysql_query("SELECT * FROM neimanmarcuslisting WHERE ShopperID = '$this->ShopperID'"); 
      $neimanmarcusstore=mysql_fetch_assoc($neimanmarcustest); 
      if ($row == $neimanmarcusstore) { 
       $storename = "Neiman Marcus"; 
       $storetbl = "neimanmarcuslisting"; 
      } 

      $guesstest=mysql_query("SELECT * FROM guesslisting WHERE ShopperID = '$this->ShopperID'"); 
      $guessstore=mysql_fetch_assoc($guesstest); 
      if ($row == $guessstore) { 
       $storename = "GUESS"; 
       $storetbl = "guesslisting"; 
      } 

      $americaneagletest=mysql_query("SELECT * FROM americaneaglelisting WHERE ShopperID = '$this->ShopperID'"); 
      $americaneaglestore=mysql_fetch_assoc($americaneagletest); 
      if ($row == $americaneaglestore) { 
       $storename = "American Eagle"; 
       $storetbl = "americaneaglelisting"; 
      } 

      $gnctest=mysql_query("SELECT * FROM gnclisting WHERE ShopperID = '$this->ShopperID'"); 
      $gncstore=mysql_fetch_assoc($gnctest); 
      if ($row == $gncstore) { 
       $storename = "GNC"; 
       $storetbl = "gnclisting"; 
      } 

      $footlockertest=mysql_query("SELECT * FROM footlockerlisting WHERE ShopperID = '$this->ShopperID'"); 
      $footlockerstore=mysql_fetch_assoc($footlockertest); 
      if ($row == $footlockerstore) { 
       $storename = "Foot Locker"; 
       $storetbl = "footlockerlisting"; 
      } 

      $bananarepublictest=mysql_query("SELECT * FROM bananarepubliclisting WHERE ShopperID = '$this->ShopperID'"); 
      $bananarepublicstore=mysql_fetch_assoc($bananarepublictest); 
      if ($row == $bananarepublicstore) { 
       $storename = "Banana Republic"; 
       $storetbl = "bananarepubliclisting"; 
      } 

      $urbanoutfitterstest=mysql_query("SELECT * FROM urbanoutfitterslisting WHERE ShopperID = '$this->ShopperID'"); 
      $urbanoutfittersstore=mysql_fetch_assoc($urbanoutfitterstest); 
      if ($row == $urbanoutfittersstore) { 
       $storename = "Urban Outfitters"; 
       $storetbl = "urbanoutfitterslisting"; 
      } 

      //Delete old listings (test with minutes...) 

      $timenow = date("Y-m-d"); 
      $time = strtotime($timenow); 
      $storehistory = str_ireplace("listing","history","$storetbl"); 
      $movetohistory = mysql_query("INSERT INTO $storehistory SELECT * FROM $storetbl WHERE $time - datecreated >= 432000") or die ("Query failed: " . mysql_error() . " Actual query: " . $query); 
      $deltefromlisting = mysql_query("DELETE FROM $storetbl WHERE $time - datecreated >= 432000") or die ("Query failed: " . mysql_error() . " Actual query: " . $query); 

      //Item link modifactions 
      if ($row['link'] != null) { 
       $shortlink = substr($row['link'],0,30); 
       $shortlink .= '...'; 
      } 


      if ($row['itemsize'] != null) { 
       $mensshirt = $row['itemsize']; 
      } 

      if ($row['waistsize'] != 0) { 
       $waistsize = $row['waistsize']; 
       $w = 'Waist'; 
      } 

      if ($row['lengthsize'] != 0) { 
       $lengthsize = $row['lengthsize']; 
       $l = 'Length'; 
      } 

      if ($row['ladystopsize'] != null) { 
       $ladystopsize = $row['ladystopsize']; 
      } 

      if ($row['ladysdresssize'] != 0) { 
       $ladysdresssize = $row['ladysdresssize']; 
      } 

      if ($row['ladysbottomsize'] != 0) { 
       $ladysbottomsize = $row['ladysbottomsize']; 
      } 

      if ($row['shoesize'] != 0) { 
       $shoesize = $row['ladysshoesize']; 
      } 

      echo "<b><div id='storenametab'><span class='storename'>$storename</span></div></b>"; 
      echo "<div id='listings1'><span id='orderdetails'>Item Number : $row[itemnum] <br />"; 
      echo "Discount Price: $$row[DiscountedPrice] <br />"; 
      echo "Item Type : $row[itemtype]<br />"; 
      echo "Item Size : 
      $mensshirt 
      $waistsize $w 
      $lengthsize $l 
      $ladystopsize 
      $ladysdresssize 
      $ladysbottomsize 
      $shoesize 
      <br />"; 
      echo "Item Color: $row[itemcolor] <br />"; 

      if ($row['link'] != null) { 
      echo "Item URL: <a href='$row[link]' target='_blank'>$shortlink</a><br />"; 
      }   
     //STATUS 

      if ($row['VillainID'] == 0) 
       echo "Status: Unclaimed <br />"; 

      else { 

       $VillainPaypalEmail = mysql_query("SELECT PaypalEmail FROM villains WHERE VillainID = '$row[VillainID]'"); 
       $fetchVillain = mysql_fetch_assoc($VillainPaypalEmail); 
       $VillainPaypal = $fetchVillain['PaypalEmail']; 

       $itemname = "Item Number: $row[itemnum] -- $row[itemtype] -- $mensshirt $waistsize $w $lengthsize $l $ladystopsize $ladysdresssize $ladysbottomsize $shoesize -- $row[itemcolor]"; 
       $discprice = $row['DiscountedPrice']; 
       $state = mysql_query("SELECT state from users WHERE Username = '$username'"); 
       $fetchstate = mysql_fetch_assoc($state); 
       $state = $fetchstate['state']; 

       switch ($storetbl) { 
        case "nordstromlisting": 
         $shipping = 8; 
         if ($state == 'AZ' || 'CA' || 'CO' || 'CT' || 'FL' || 'GA' || 'HI' || 'IA' || 'ID' || 'IL' || 'IN' || 'KS' || 'MA' || 'MD' || 'MN' || 'MO' || 'NC' || 'NJ' || 'NV' || 'NY' || 'OH' || 'PA' || 'RI' || 'SD' || 'TX' || 'UT' || 'VA' || 'WA') { 
          $tax = $discprice * .09; 
         } 
         else { 
          $tax = $discprice * .02; 
         } 
         break; 
        case "saksfifthavenuelisting": 
         switch ($discprice) { 
          case ($discprice <= 25): 
           $shipping = 5; 
           break; 
          case ($discprice > 25 && $discprice <= 50): 
           $shipping = 8; 
           break; 
          case ($discprice > 50 && $discprice <= 100): 
           $shipping = 10; 
           break; 
          case ($discprice > 100 && $discprice <= 200): 
           $shipping = 13; 
           break; 
          case ($discprice > 200 && $discprice <= 300): 
           $shipping = 15; 
           break; 
          case ($discprice > 300 && $discprice <= 500): 
           $shippig = 17; 
           break; 
          case ($discprice > 500): 
           $shipping = 20; 
           break; 
         } 
         if ($state == 'AL' || 'AZ' || 'CA' || 'CO' || 'CT' || 'FL' || 'GA' || 'IL' || 'IN' || 'LA' || 'MA' || 'MD' || 'MN' || 'MO' || 'NC' || 'NJ' || 'NV' || 'NY' || 'OH' || 'OK' || 'PA' || 'SC' || 'TX' || 'VA' || 'DC') { 
          $tax = $discprice * .09; 
         } 
         else { 
          $tax = .02; 
         } 
         break; 
        case "neimanmarcuslisting": 
         switch ($discprice) { 
          case ($discprice <= 25): 
           $shipping = 6; 
           break; 
          case ($discprice > 25 && $discprice <= 50): 
           $shipping = 9; 
           break; 
          case ($discprice > 50 && $discprice <= 100): 
           $shipping = 11.50; 
           break; 
          case ($discprice > 100 && $discprice <= 200): 
           $shipping = 16.50; 
           break; 
          case ($discprice > 200 && $discprice <= 300): 
           $shipping = 18.50; 
           break; 
          case ($discprice > 300 && $discprice <= 500): 
           $shippig = 21.50; 
           break; 
          case ($discprice > 500 && $discprice <= 700): 
           $shipping = 25.50; 
           break; 
          case ($discprice > 700 && $discprice <= 1000): 
           $shipping = 29.00; 
           break; 
          case ($discprice > 1000): 
           $shipping = 32.00; 
           break; 
         } 
         if ($state == 'AZ' || 'CA' || 'CO' || 'FL' || 'GA' || 'HI' || 'IL' || 'MA' || 'MD' || 'MI' || 'MN' || 'MO' || 'NC' || 'NJ' || 'NV' || 'NY' || 'PA' || 'TX' || 'VA' || 'WA' || 'DC') { 
          $tax = $discprice * .09; 
         } 
         else { 
          $tax = $discprice * .02; 
         } 
         break; 
        case "urbanoutfitterslisting": 
         switch ($discprice) { 
          case ($discprice <= 50): 
           $shipping = 6; 
           break; 
          case ($discprice > 25 && $discprice < 50): 
           $shipping = 8; 
           break; 
          case ($discprice >= 50 && $discprice < 100): 
           $shipping = 10; 
           break; 
          case ($discprice >= 100 && $discprice < 150): 
           $shipping = 12; 
           break; 
          case ($discprice > 150): 
           $shipping = 0; 
           break; 
         } 
         if ($state == 'AL' || 'AZ' || 'CA' || 'CO' || 'CT' || 'FL' || 'GA' || 'IL' || 'IN' || 'KS' || 'LA' || 'MA' || 'MD' || 'MI' || 'MN' || 'MO' || 'NB' || 'NM' || 'NC' || 'OH' || 'OR' || 'NV' || 'NY' || 'PA' || 'RI' || 'SC' || 'TN' || 'TX' || 'UT' || 'VA' || 'VT' || 'WA' || 'WI' || 'DC') { 
          $tax = $discprice * .09; 
         } 
         else { 
          $tax = $discprice * .02; 
         } 
         break; 
        case "gnclisting": 
         $shipping = 6; 
         break; 
        case "bananarepubliclisting"; 
         $shipping = 7; 
         //call Banana Republic for list of taxable states 
         break; 
        case "guesslisting": 
         $shipping = 7.95; 
         if ($state == 'AZ' || 'CA' || 'CO' || 'CT' || 'FL' || 'GA' || 'HI' || 'IL' || 'IN' || 'KS' || 'LA' || 'MA' || 'MD' || 'MI' || 'MN' || 'MO' || 'NJ' || 'NV' || 'NY' || 'NC' || 'OH' || 'PA' || 'RI' || 'SC' || 'TN' || 'TX' || 'VA' || 'WA') { 
          $tax = $discprice * .09; 
         } 
         else { 
          $tax = $discprice * .02; 
         } 
         break; 
        case "footlockerlisting"; 
         $shipping = 6.99; 
         if ($state == 'AK' || 'DE'|| 'MT' || 'NH' || 'OR') { 
          $tax = $discprice * .02; 
         } 
         else { 
          $tax = $discprice * .09; 
         } 
         break; 
        case "americaneaglelisting": 
         switch($discprice) { 
          case ($discprice < 100): 
          $shipping = 7.00; 
          break; 
          case ($discprice > 100): 
          $shipping = 0; 
          break; 
         } 
          $tax = $discprice * .09; 
         break; 
       } 

       echo "Status: Claimed!"?> 
       <form action='https://www.paypal.com/cgi-bin/webscr' target='blank' method='post'> 
       <input type='hidden' name='business' value='<?php echo $VillainPaypal ?>'> 
       <input type='hidden' name='cmd' value='_xclick'> 
       <input type='hidden' name='item_name' value="<?php echo $itemname ?>"> 
       <input type='hidden' name='shipping' value="<?php echo $shipping ?>"> 
       <input type='hidden' name='tax' value="<?php echo $tax ?>"> 
       <input type='hidden' name='amount' value='<?php echo $row['DiscountedPrice'] ?>'> 
       <input type='hidden' name='currency_code' value='USD'> 
       <input type='image' name='submit' border='0' 
       src='https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif' 
       alt='PayPal - The safer, easier way to pay online'> 
       <img alt='blahblah' border='0' width='1' height='1' 
       src='https://www.paypal.com/en_US/i/scr/pixel.gif' > 
       </form> 
       <br /> 
       <?php ; 
     //STATUS 
     }   
      ?><br /><form action="MyAccountNEW.php" method="POST"> 
       <input type="hidden" name="deletelisting" id="deletelisting" value="yes"> 
       <input type="hidden" name="deleteid" id="deleteid" value="<?php echo $row['id']; ?>"> 
       <input type="hidden" name="storename" id="storename" value="<?php echo "$storetbl"; ?>"> 
       <input type="submit" class="deletelistingbutton" value="Delete listing"> 
       </form> 

      <?php 

      echo "</span></div>"; 

      $mensshirt = ""; 
      $waistsize = ""; 
      $lengthsize = ""; 
      $ladystopsize = ""; 
      $ladysdresssize = ""; 
      $ladysbottomsize = ""; 
      $shoesize = ""; 
     } 

    } 
} 
+0

정말 좋은 DB 추상화로 작업해야합니다. 엄지 규칙으로 함수/코드의 코드를 아래로 스크롤하면 너무 큽니다. 이러한 프로그래밍 스타일은 정기적으로 버그를 계속 생성 할 것입니다. –

답변

3

두 개의 다른 기능에서 동일한 리소스를 사용하고 있습니다.

쿼리 핸들 (이 경우 $ this-> displaylistings)에서 mysql_fetch_something을 사용하여 행을 읽으면 두 번째 읽을 수 없습니다.

그것은 $ this-> displaylistings에 관련된 결과 집합의 첫 번째 행에 MySQL의 내부 커서의 위치를 ​​변경 DisplayListing의 시작이 줄을 넣어 시도하고 CartTotal

mysql_data_seek($this->displaylistings, 0) 

. 작동하는지 알려주세요