PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bannersortirung geht nicht mehr



Masterphil
10.06.2009, 23:16
Hallo, ich hoffe mal jemand hier hatte das Problem auch schon, bin nun nämlich echt ratlos.

Gestern meinte ein User ich sollte mal zu den Bannern gucken die seien total durcheinander, obwohl sie nach dem Verdienst geordnet werden..

Ich habe also gekuckt, und sie sind wirklich durcheinander.

Ich habe an der klick4.php seit 6 Monaten nichts geändert.

Habe erstmal alle Banner in der DB gelöscht, das hat aber nicht gebracht.

Irgendwas läuft das plötzlich schief und ich weiß absolut nicht was.


Hier mal der DB-Befehl zum Einlesen der Banner, obwohl ich an diesem und den Rest der Klick4 wie gesagt nichts geändert habe.



$forcedbanner = db_query("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE menge >='1' and werbeart = 'forcedbanner' and status = '1' ORDER BY 'verdienst' DESC");


MfG

jpwfour
11.06.2009, 12:33
Dieser Befehl liest ja alle Banner aus, auch die die im Reload sind und natürlich auch wesentlich mehr, als du maximal anzeigen lässt.

Wenn du ihn manuell in der Datenbank ausführst, müsste das mit dem ORDER BY auch passen, aber die Datensätze werden dann ja noch weiterverarbeitet.

Sprich geprüft, ob der Banner im Reload ist, wenn nicht, angezeigt, und das solange bis MAXBANNER erreicht ist.

Ich würde dir an sich raten, das so umzustellen, dass nur ein Query benötigt wird, der gleich nur Banner ausliest, die nicht im Reload sind, und nur soviele, wie angezeigt werden sollen (siehe VMS1.2.3).

Wenn du dabei bleiben willst, wäre der Teil mit der "Weiterverarbeitung" auch noch interessant.

Alternativ mal die Tabelle vms_gebuchte_werbung prüfen und/oder reparieren lassen, evtl ist da nur was mit den Indizes durcheinander, so dass die Sortierung nach dem Verdienst nicht korrekt arbeitet.

Masterphil
11.06.2009, 13:08
So, ich habe soeben mal die DB-Tabelle vms_gebuchte_werbung
(die ich gestern schonmal zum Test geleert hatte) erst geprüft,
dann repariert und dann optimiert, leider hat auch dies nichts geändert.

Edit: Ich habe den Ursprung des Fehlers glaube ich gefunden, scheint wohl ein defektes Interface zu sein.

Denn das letzte was ich gemacht hatte war neue Sponsoren einbinden.

Werde das mal versuchen nachzuvollziehen und nochmal schreiben was genau rausgekommen ist.

Edit2:
Habe nun nochmal genau in der DB geschaut,
finde leider nichts was verdächtig wäre im Bezug zu den neuen Sponsor.

Bei gebuchte_werbung stehen genau jene Banner ganz oben die von dem Sponsor kommen, jedoch mit normalen Angaben.

Also alles ehr seltsam, wenns sein muss wird der sponsor wieder ausgebaut.

Werde mich eute abend nochmal dran machen, vielleicht hat ja noch wer eine Idee.

Edit3: Habe eben nochmal testweise selbst Banner geklickt, die werden genau in der Reihenfolge geladen wie sie in der DB stehen, auch die Reloads werden berücksichtigt, nur die Sortierung halt nicht.

In der DB selbst lassen sie sich aber ordnen.

Vielleicht liegts doch an der Klick4.



<?
userstatus();
$max_banner = mysql_fetch_array(db_query("SELECT `max_forced` FROM ".$db_prefix."_userdaten WHERE uid=".$_SESSION['uid'].""));
head("");
echo '<div align="center"><font color="#FF0000"><b>Jetzt neu, 5000 Lose Bonus wenn alle vorhandenen Banner geklickt wurden!</b></font><br>';
$forcedbanner = db_query("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE menge >='1' and werbeart = 'forcedbanner' and status = '1' ORDER BY 'verdienst' DESC");
while($f_banner=mysql_fetch_array($forcedbanner)){
$int_reload = db_query("SELECT * FROM ".$db_prefix."_reloads WHERE tan='".$f_banner['tan']."' and (uid='".$_SESSION['uid']."' or ip='".$ip."') and bis >= ".time()."");
if (!mysql_num_rows($int_reload) && $x_banner <= ($max_banner['max_forced']-1) and $f_banner['verdienst'] < 5000) {
echo '<div align="center" id="banner_'.$x_banner.'"><a href="fc.php?tan='.$f_banner['tan'].'" target="_blank"><img src="'.$f_banner['banner'].'" border="0" height="60" width="468" alt="" onClick="document.getElementById(\'banner_'.$x_banner.'\'). style.display=\'none\';"></a><br>Reload:'. $f_banner['reload']/3600 .' Std. | Verdienst: '.number_format($f_banner['verdienst'],2,',','.').' | Aufenthalt:'.$f_banner['aufendhalt'].' Sekunden<br><b><a href="?content=/verdienen/framebrecher&tan='.$f_banner['tan'].'&sponsor='.$f_banner['sponsor'].'">TAN: '.$f_banner['tan'].'</a></b> << Framebrecher melden<br/><br></div>';

$x_banner++;
}
}
if ($x_banner <= 0) {
echo '<div align="center"><font color="#FF0000"><b>Alle Forcedbanner im Reload !</b></font>';
echo '<div align="center">&nbsp;</div><div align="center"><font color="#FF0000"><b><font size="5">Bonus</font><script language="javascript">window.open(\'content/verdienen/bonusbanner_popup.php?key='.md5($_SESSION['uid']."-".date("H:i")).'\', \'sv\', \'width=610, height=135 scrollbar=no, status=no, resizable=no\')</script></b></font></div><div align="center">&nbsp;</div><div align="center"><b>.: Vielen dank, das du alle Forcedbanner geklickt hast, dafür erhälts du ein Bonus :.</b>';
echo '<br/><b>.: der Bonus Startet im Popup, bitte PopupBlocker entsprechend deaktivieren:.</b>';
} else {
echo '<div align="center"><form action="" method="post"><input type="Submit" name="mehr_banner" value="Weitere Forcedbanner ?"></form></div>';
}
foot();
?>



MfG

Sebmaster
11.06.2009, 13:57
$forcedbanner = db_query("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE menge >='1' and werbeart = 'forcedbanner' and status = '1' ORDER BY 'verdienst' DESC");[/php]



Soweit ich das sehe hast du verdienst in ' gesetzt.
Ist aber das Kennzeichen für einen String. Nimm die entweder ganz rau, oder ersetz sie durch ` oder ´ weiß ich grad nicht genau:wink:

Außerdem solltest du die Reloads nicht für jeden Banner abfragen, sondern einen Left-Join verwenden... Aber das ist nur was Performance-mäßiges...