witam,
dostosowuje do moich potrzeb skrypt losujacy produkty z bazy danych osCommerce i dodanie wylosowanych do specjalnej tabelki z promocjami..
Gdy tabelka jest pusta skrypt wypelnia ja 31 rekordami.

W przypadku ponownego wywolania skryptu (zeby dopisac jeden rekord) skrypt nic nie robi. Gdy trzeci raz wyoluje skrypt wszystko jest ok. Zawsze "ucieka" mi rekord z id=32 pomimo tego, ze mam komunikat ze dodalo.
  1. <?php
  2. /*
  3.   Filename: specials_random.php
  4.   Created/Last Edit: 29/12/2003 8:15PM
  5.  
  6.   Created by Advis Network Systems
  7.   <a href=\"http://www.advisns.com/\" target=\"_blank\">http://www.advisns.com/</a>
  8.  
  9.   Using osCommerce, Open Source E-Commerce Solutions
  10.   <a href=\"http://www.oscommerce.com/\" target=\"_blank\">http://www.oscommerce.com/</a>
  11.  
  12.   Copyright (c) 2003 osCommerce & Advis Network Systems
  13. */
  14.  
  15.  
  16.  
  17. $non_count = 0;
  18. $count = 0;
  19.  
  20. require(&apos;includes/application_top.php&apos;);
  21.  
  22.  // require(DIR_WS_CLASSES . &apos;currencies.php&apos;);
  23.  // $currencies = new currencies();
  24.  
  25.  // $expires_date = strftime(\"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\")+NUMBER_SPECIAL_DAYS,date(\"Y\")));
  26.  // $date_time = strftime(\"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\"),date(\"Y\"))); 
  27.  
  28. // echo $end_date;
  29. // Funkcja zwraca liczbę dni między dwoma przekazanymi datami.
  30. function count_days($b) {
  31.  
  32. $b_dt = explode(&#092;"-\",$b);
  33.  
  34. $a_new = mktime(0,0,0,date(&#092;"m\"),date(\"d\"),date(\"Y\"));
  35. $b_new = mktime(0,0,0,$b_dt[&apos;1&apos;],$b_dt[&apos;2&apos;],$b_dt[&apos;0&apos;]);
  36.  
  37. return round(abs($a_new - $b_new) / 86400);
  38. }
  39.  
  40. /////////////////////robimy porzadki///////////////////
  41. $porzadki_query = tep_db_query(&#092;"SELECT * FROM \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC);
  42.  
  43. while ($porzadki=tep_db_fetch_array($porzadki_query)){
  44. if (count_days($porzadki[&apos;happy_hours_beginning_date&apos;]) == 2)
  45. {
  46. tep_db_query(&#092;"DELETE FROM `\".TABLE_HAPPY_HOURS_SPECIALS_BASIC.\"` WHERE `\".TABLE_HAPPY_HOURS_SPECIALS_BASIC.\"`.`specials_id` = \".$porzadki[&apos;specials_id&apos;].\" LIMIT 1\");
  47. }
  48.  
  49.  
  50. }
  51. ////////////////////////////////////////////////////////////////////////
  52. if (tep_db_num_rows($porzadki_query) == 0 ){
  53. $random_products_query = tep_db_query(&#092;"SELECT products_id, products_model, products_price from \" . TABLE_PRODUCTS . \" WHERE products_status =&apos;1&apos; and products_price > &apos;\". SPECIAL_PRODUCT_MIN_PRICE .\"&apos; order by rand() DESC limit \" . NUMBER_SPECIALS);
  54.  
  55. while ($random_products=tep_db_fetch_array($random_products_query)){
  56. $expires_date = strftime(&#092;"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\")+$count+1,date(\"Y\")));
  57. $date_time = strftime(&#092;"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\")+$count,date(\"Y\"))); 
  58. ///////////
  59. $special_product_query = tep_db_query(&#092;"select products_id from \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" where products_id = \" . $random_products[&apos;products_id&apos;]);
  60. if (tep_db_num_rows($special_product_query ) == 0 ){
  61. $specials_price = ($random_products[&apos;products_price&apos;] - round((SPECIAL_PERCENTAGE / 100) * $random_products[&apos;products_price&apos;]));
  62. tep_db_query(&#092;"insert into \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" (products_id, specials_new_products_price, specials_date_added, expires_date
    , status, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, s
    pecials_price_happy_hours) values (&apos;\" . (int)$random_products[&apos;products_id&apos;] . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;, &apos;\" . tep_db_input($date_time) . \"&apos;, &apos;\" . tep_db_input($expires_date) . \"&apos;, &apos;1&apos;, &apos;1&apos;, &apos;\" . tep_db_input($date_time) . \"&apos;, &apos;\" . tep_db_input($expires_date) . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;)\");
  63. $count++;
  64. } else {
  65. $non_count++;
  66. }
  67. }
  68. }
  69. else 
  70. {
  71.  
  72. //
  73. $random_products_query = tep_db_query(&#092;"SELECT products_id, products_model, products_price from \" . TABLE_PRODUCTS . \" WHERE products_status =&apos;1&apos; and products_price > &apos;\". SPECIAL_PRODUCT_MIN_PRICE .\"&apos; order by rand() DESC limit 2\");
  74.  
  75. while ($random_products=tep_db_fetch_array($random_products_query)){
  76. //$expires_date = strftime(\"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\")+$count+1,date(\"Y\")));
  77.  // $date_time = strftime(\"%Y-%m-%d\",mktime(0,0,0,date(\"m\"),date(\"d\")+$count,date(\"Y\"))); 
  78. ///////////
  79. $special_product_query = tep_db_query(&#092;"select products_id from \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" where products_id = \" . $random_products[&apos;products_id&apos;]);
  80. //////
  81.  $ostatni_query = tep_db_query(&#092;"SELECT happy_hours_beginning_date, happy_hours_end_date FROM \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" order by happy_hours_beginning_date DESC limit 1\");
  82.  
  83. $ostatni=tep_db_fetch_array($ostatni_query);
  84.  
  85. $ostatni_rozbity = explode(&#092;"-\", $ostatni[&apos;happy_hours_end_date&apos;]);
  86. $ostatniGaw = mktime(0,0,0,$ostatni_rozbity[&apos;1&apos;],$ostatni_rozbity[&apos;2&apos;],$ostatni_rozbity[&apos;0&apos;]);
  87. $ostatniGaw2 = mktime(0,0,0,$ostatni_rozbity[&apos;1&apos;],$ostatni_rozbity[&apos;2&apos;]+1,$ostatni_rozbity[&apos;0&apos;]);
  88.  
  89. //$ostatniGaw = $ostatniGaw+86400; //poczatek nowej
  90. //$ostatniGaw2 = $ostatniGaw+86400; //koniec nowej
  91. $ostatniGaw = strftime(&#092;"%Y-%m-%d\",$ostatniGaw);
  92. $ostatniGaw2 = strftime(&#092;"%Y-%m-%d\",$ostatniGaw2);
  93. echo $ostatniGaw.&apos;-&apos;;
  94. echo $ostatniGaw2.&apos;<br>&apos;;
  95.  
  96. //
  97. $specials_price = ($random_products[&apos;products_price&apos;] - round((SPECIAL_PERCENTAGE / 100) * $random_products[&apos;products_price&apos;]));
  98. tep_db_query(&#092;"insert into \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" (products_id, specials_new_products_price, specials_date_added, expires_date
    , status, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, s
    pecials_price_happy_hours) values (&apos;\" . (int)$random_products[&apos;products_id&apos;] . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw2) . \"&apos;, &apos;1&apos;, &apos;1&apos;, &apos;\" . tep_db_input($ostatniGaw) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw2) . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;)\");  
  99. echo &#092;"insert into \" . TABLE_HAPPY_HOURS_SPECIALS_BASIC . \" (products_id, specials_new_products_price, specials_date_added, expires_date
    , status, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, s
    pecials_price_happy_hours) values (&apos;\" . (int)$random_products[&apos;products_id&apos;] . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw2) . \"&apos;, &apos;1&apos;, &apos;1&apos;, &apos;\" . tep_db_input($ostatniGaw) . \"&apos;, &apos;\" . tep_db_input($ostatniGaw2) . \"&apos;, &apos;\" . tep_db_input($specials_price) . \"&apos;)\"; 
  100. $count++;
  101. }
  102. }
  103.  
  104.  
  105.  
  106. echo &#092;"Special Products added: \" . $count . \"<br>\";
  107. echo &#092;"Special Products not added due to duplicates: \" . $non_count . \"<br>\";
  108. ?>


na razie chce zeby to dzialalo dlatego prosze nie zwracac uwagi na niektore rzeczy (np. rozbijanie daty explode'em :-) )

Po pierwszym wywolaniu(i pustej tabeli) mam na ekranie
  1. Special Products added: 31
  2. Special Products not added due to duplicates: 0
czyli wszystko dobrze

Po drugim wywolaniu mam:
  1. 2007-12-26-2007-12-27
  2. insert into happy_hours_specials_basic (products_id, specials_new_products_price, specials_date_added, expires_date, status, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, specials_price_happy_hours) values ('52', '87', '2007-12-26', '2007-12-27', '1', '1', '2007-12-26', '2007-12-27', '87')2007-12-27-2007-12-28
  3. insert into happy_hours_specials_basic (products_id, specials_new_products_price, specials_date_added, expires_date, status, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, specials_price_happy_hours) values ('119', '103', '2007-12-27', '2007-12-28', '1', '1', '2007-12-27', '2007-12-28', '103')Special Products added: 2
  4. Special Products not added due to duplicates: 0


czyli wstawia:
  1. INSERT INTO happy_hours_specials_basic (products_id, specials_new_products_price, specials_date_added, expires_date, STATUS, status_happy_hours, happy_hours_beginning_date, happy_hours_end_date, specials_price_happy_hours) VALUES ('52', '87', '2007-12-26', '2007-12-27', '1', '1', '2007-12-26', '2007-12-27', '87')


ale problem w tym, ze ten rekord nie jest nigdy dodawany. absolutnie nigdy. no chyba ze dodam go w phpMyAdmin. zawsze gdzies ginie rekord o id=32
drugie zapytanie wstawiania wykonuje sie bez problemu czyli wstawia sie rekord o id=33 i dobrych datach.

Co najlepsze - przy trzecim wywolaniu skryptu dziala wszystko dobrze blinksmiley.gif

prosze o pomoc, bo sam nie moge znalesc bledu

p.s. skrypt forum dodal znaki "\" nie wiem co to - to nie nalezy do mojego skryptu