java0986 schrieb am 09.11.2003 um 16:42 Uhr
hallo,
um es kurz zu fassen, mein Codeschnipsel:
$abfrage = "SELECT * FROM `$banner_table` WHERE status = '1' AND art = 'Non-Erotik' ORDER BY rand() LIMIT 1";
$abfrage_do = mysql_query($abfrage);
while ($row = mysql_fetch_object($abfrage_do)) {
if($row->is_code == "true"){
$count=$row->adviews + 1;
echo $row->bannercode;
if (ipcheck($REMOTE_ADDR)==true){
$update = "UPDATE `$banner_table` SET adviews = '$count' WHERE id=$row->id";
$update_do = mysql_query($update);
}
}
Das Problem ist, dass bei bestimmten PHP oder MySQL Versionen bei dieser Abfrage immer NUR der allererste Banner angezeigt wird.
Standardmäßig funktioniert die Rotation einwandfrei, sodass die Banner wechseln.
Gibt es vielleicht irgendeine Funktion die bei php oder apache aktiviert oder deaktiviert sein muss, damit dies funktioniert?
vielen Dank im Vorraus!
java0986
Shadow schrieb am 09.11.2003 um 21:33 Uhr
irgendwie gibst du bei rand garkeine min, max parameter an. Auserdem ist es bei älteren php Versionen nötig rand erstmal zu intialisieren. Mit srand();
vesuch das so mal:
$query = mysql_query("SELECT * FROM ".$banner_table." WHERE status='1' AND art='Non-Erotik' ORDER BY ASC";
$anzahl = mysql_num_rows($query);
srand();
$rand = rand(1, $anzahl);
for($i=1; $i=$rand; $i++) {
while ($row = mysql_fetch_array($query)) {
$bannecode = $row['bannercode'];
}
}
echo $bannercode;
bdominik schrieb am 09.11.2003 um 22:00 Uhr
Naja, shadow, dein Code kann eher nicht funktionieren. Erst limitierst du das ergebmiss mit 1, dann fragste wieder ab, wieviel denn jetzt da ist. Da will ich wetten, das $anzahl immer 1 enthält.
Tendor schrieb am 09.11.2003 um 22:41 Uhr
java0986 postete
Das Problem ist, dass bei bestimmten PHP oder MySQL Versionen bei dieser Abfrage immer NUR der allererste Banner angezeigt wird.
Standardmäßig funktioniert die Rotation einwandfrei, sodass die Banner wechseln.
Gibt es vielleicht irgendeine Funktion die bei php oder apache aktiviert oder deaktiviert sein muss, damit dies funktioniert?
"ORDER BY RAND()" geht ab mysql >= 3.23
(siehe
http://www.mysql.com/doc/en/Mathematical_functions.html)
gruß
java0986 schrieb am 09.11.2003 um 22:50 Uhr
also wenn ich das richtig verstehe reicht es eigentlich, wenn ich srand(); über den code schreibe oder gibt es dann mit neueren Versionen konflikte? Wenn das nicht geht, wie löse ich dieses Problem dann für Benutzer mit mysql < 3.23?
Jürgen S. schrieb am 10.11.2003 um 10:00 Uhr
das PHP und MySQL arbeitet Serverseitig! Das heißt es ist Benutzerunabhängig. Es liegt einzig und allein daran, was auf dem Server installiert ist.
Shadow schrieb am 10.11.2003 um 15:31 Uhr
bdominik postete
Naja, shadow, dein Code kann eher nicht funktionieren. Erst limitierst du das ergebmiss mit 1, dann fragste wieder ab, wieviel denn jetzt da ist. Da will ich wetten, das $anzahl immer 1 enthält.
naja. nich so nen Aufstand! :P. Einfach limit 1 löschen. Naja hatte eben sein sql query kopiert. Aber ich denke jeder einigermaßen aufgeweckte mensch sieht sowas ;)
edit: JürgenS. das stimmt leider nicht ganz. Ich hatte schon nen Script das auf manchen PCs wenn man es aufgeruft hat immer ne weiße Seite angezeigt hat. Auf anderen PCs konnte man es Problemlos aufrufen.
Zum schluss wars nen exit das ich in ner if Bedingung "vergessen" hatte. Wenn alles aber zu 100% Serverbedingt wäre hätte es a) garnicht gehen dürfen b) immer gehen müssen.
Vorallem das exit war eigentlich nicht wirklich nötig.
bdominik schrieb am 10.11.2003 um 15:33 Uhr
auf jeden fall geht shadows lösung, wenn gleich, man sie ein bischen optimieren könnte! Nur noch den einen Datensatzt selecten!
Shadow schrieb am 10.11.2003 um 15:37 Uhr
Ja, das ist klar :). Nur ich hab doch keine Ahnung welche Datensätze er benötigt. War ja nur ein Beispiel. Ich denke mit dem Beispiel sollte es möglich sein sich das für seine Zwecke 100% angepasste Script zu schreiben. - Aber gut das du das nochmal erwähnst, nachher hätte ers so gelassen und das hätte unnötiger Traffic und Serverlast bedeutet.