gege Posted January 9, 2005 Report Share Posted January 9, 2005 Hallo, liebe Leute, bin so in den letzten Z?gen local und im Admin mal auf den Bannermanager (Vers. banner_manager.php,v 1.4 2004) gegangen und bekomme folgende Fehlermeldung: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-20, 20' at line 1 select banners_id, banners_title, banners_image, banners_group, status, expires_date, expires_impressions, date_status_change, date_scheduled, date_added from banners order by banners_title, banners_group limit -20, 20 Da in der Datei selbst der Code mit dem select so nicht drinsteht (wie bei osc), wei? ich nicht, wo ich den Fehler anfangen soll, zu suchen. Hab an dieser Datei bisher nichts gemacht.... Bin da f?r nen Tipp dankbar. Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Kann das sein, dass das mit der php-Version zu tun hat? Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Nee, ist es auch nicht, mit der php-version, hab eben mal auf 4.3.10 geswitcht, es ?ndert sich nichts.... Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Hab jetzt die Stelle gefunden, die diesen Fehler anscheinend hervorruft: <?php $banners_query_raw = "select banners_id, banners_title, banners_image, banners_group, status, expires_date, expires_impressions, date_status_change, date_scheduled, date_added from " . TABLE_BANNERS . " order by banners_title, banners_group"; $banners_split = new splitPageResults($_GET['page'], MAX_DISPLAY_SEARCH_RESULTS, $banners_query_raw, $banners_query_numrows); $banners_query = xtc_db_query($banners_query_raw); while ($banners = xtc_db_fetch_array($banners_query)) { $info_query = xtc_db_query("select sum(banners_shown) as banners_shown, sum(banners_clicked) as banners_clicked from " . TABLE_BANNERS_HISTORY . " where banners_id = '" . $banners['banners_id'] . "'"); $info = xtc_db_fetch_array($info_query); Aber was daran falsch sein k?nnte, wei? ich wirklich nicht, da ich nicht selbst coden kann.... Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Panikkkkkkkk! Die gleiche Fehlermeldung kommt auch beim Aufruf der Seite Sonderangebote admin/specials.php Ach Du meine Nase....... HIIIIIIILLLLFFFEEE Link to comment Share on other sites More sharing options...
Guest HHGAG Posted January 9, 2005 Report Share Posted January 9, 2005 gege, such mal nach mysql%version =) Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Kann das sein, dass diese function in admin/split_page_results.php Schuld ist? class splitPageResults { function splitPageResults(&$current_page_number, $max_rows_per_page, &$sql_query, &$query_num_rows) { if (empty($current_page_number)) $current_page_number = 1; $pos_to = strlen($sql_query); $pos_from = strpos($sql_query, ' from', 0); $pos_group_by = strpos($sql_query, ' group by', $pos_from); if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by; $pos_having = strpos($sql_query, ' having', $pos_from); if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having; $pos_order_by = strpos($sql_query, ' order by', $pos_from); if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by; $reviews_count_query = xtc_db_query("select count(*) as total " . substr($sql_query, $pos_from, ($pos_to - $pos_from))); $reviews_count = xtc_db_fetch_array($reviews_count_query); $query_num_rows = $reviews_count['total']; $num_pages = ceil($query_num_rows / $max_rows_per_page); if ($current_page_number > $num_pages) { $current_page_number = $num_pages; } $offset = ($max_rows_per_page * ($current_page_number - 1)); $sql_query .= " limit " . $offset . ", " . $max_rows_per_page; } Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Hallo, danke f?r den tipp, hab die ?nderung gem Thread Thread ?ffne die Datei admin/includes/classes/split_page_results.php In der ersten Funktion, im Konstruktor wird in ca. Zeile 43 das limit bestimmt. $sql_query .= " limit " . $offset . ", " . $max_rows_per_page; F?ge vor diese Zeile ein: if($offset<0) $offset=0; $sql_query .= " limit " . $offset . ", " . $max_rows_per_page; Leider ?ndert sich bei mir nichts, ich hab die mysql-Version 4.1.8 Und NUUUUUU????? Link to comment Share on other sites More sharing options...
gege Posted January 9, 2005 Author Report Share Posted January 9, 2005 Im Moment scheint mir, k?nnte das Problem nur mit der Installation einer Mysql-Version 4.0.x behoben werden, da mein Provider eine Vers. 4.0.15 hat, sodass, wenn ichs richtig verstanden habe, erstmal keine Probleme auftreten w?rden. Nur..... was ist denn zu tun, wenn er aufr?stet? Link to comment Share on other sites More sharing options...
teniente_snafu Posted January 9, 2005 Report Share Posted January 9, 2005 Nun, an MySQL, egal welche Version, liegt es _sicher_ nicht. Ein negativer 'limit' Wert ist nicht ok, und da kann MySQL nichts f?r, der wird tats?chlich von der Methode 'splitPageResults' der gleichnamigen Klasse in '/admin/includes/classes/split_page_results.php' zur?ckgegeben. Der gepostete Workaraound: if ($offset < 0) $offset=0; funktioniert. Der Hund liegt allerdings schon vorher bergraben: $current_page_number wird vom aufrufenden Script (z.B. manufacturers.php) via $_GET['page'] ?bergeben. Bei einer leeren Liste und nur einer Seite ist $_GET['page'] leer, und damit auch $current_page_number. Unten wird dann $max_rows_page mit ($current_page_number -1) multipliziert. $current_page_number ist 'leer', also wird $max_rows_page mit (-1) multipliziert, was -20 und damit den negativen limit-Wert ergibt, den die Methode zur?ckliefert. Die Bedingung if (empty($current_page_number)) $current_page_number = 1; sollte dem eigentlich abhelfen, tut es aber nicht. Es k?nnte an der Referenzierung (&)liegen, aber nach nur einem Blick auf den Code kann ich das noch nicht mit Sicherheit sagen. Das ist in jedem Fall ein Bug, hat nichts mit SQL, der Serverkonfiguration oder ?hnlichem zu tun und w?re somit ein Fall f?r die Entwickler. Der oben vorgestellte Workaround funktioniert, ist aber eben nur ein Workaround und keine saubere Sache. Link to comment Share on other sites More sharing options...
teniente_snafu Posted January 9, 2005 Report Share Posted January 9, 2005 Ok, es ist ein Fehler in der Logik: Wenn keine Seitennummer ?bergeben wird, wird $current_page_number auf 1 gesetzt. Es gibt also _immer_ eine Seite 1. Weiter unten wird gepr?ft, ob $current_page_number gr??er ist, als $num_pages. $num_pages wird durch die Division von $query_num_rows durch $max_rows_per_page ermittelt. AHA. Also, wenn die Tabelle (z.B. manufacturers) leer ist, hat $query_num_rows den Wert 0. somit ist $num_pages auch null. $current_page_number ist also auf jeden Fall 1, w?hrend $num_pages auch 0 sein kann. ind dem Falls wird $current_page_number nun wieder auf 0 gesetzt, und es ergibt sich der Falsche Wert aus der folgenden $offset-Berechnung. Die logische L?sung ist, nach $num_pages = ceil($query_num_rows / $max_rows_per_page); folgende Zeile hinzuzuf?gen: if ($num_pages <= 0) $num_pages = 1; Das ist auch nicht sch?ner oder eleganter als die oben vorgestellte L?sung mit der $offset-Korrektur, folgt aber der Logik, nachdem die Seitennummer nicht kleiner als 1 sein kann, was die Entwickler sich wohl so gedacht hatten. lg Link to comment Share on other sites More sharing options...
gege Posted January 10, 2005 Author Report Share Posted January 10, 2005 Hallo, Ihr Lieben, herzlichen Dank, dass Ihr Euch so bem?ht.... hab jetzt die L?sung von teniente_snafu eingebaut, und siehe da, jetzt ist die Welt wieder so was von in Ordnung........ :love: Danke, Danke, Danke,...... :bounce: Link to comment Share on other sites More sharing options...
hamd-user Posted January 28, 2005 Report Share Posted January 28, 2005 Hi, ich habe das selbe Problem wie "Gege". Leider hat sich nach der Code-?nderung, wie von "teniente_snafu" angegeben, bei mir nichts ge?ndert. Kann mir bitte jemand weiterhelfen?!? Danke und mfG Hamd-User Link to comment Share on other sites More sharing options...
benjoe Posted February 1, 2005 Report Share Posted February 1, 2005 Auch ich habe das Problem. Zu sehen momentan unter 4ballers.de. Bitte dringend um Hilfe. Link to comment Share on other sites More sharing options...
benjoe Posted February 1, 2005 Report Share Posted February 1, 2005 Hab mir jetzt vorl?ufig geholfen indem ich in der Tabelle "banners" folgende Zeilen eingef?gt habe date_scheduled expires_date expires_impressions status banners_title banners_image banners_html_text banners_group Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.