PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maasive Vergütungsausfälle durch fehlerhafte cron ?!?



j.knopf
24.08.2007, 12:33
Hallo ihr lieben,

wie ihr sicher schon in dem anderen Tread von mir bemerkt habt, versuche ich mich intensiv mit meinem VMS auseinander zu setzen und möchte mal auf folgendes aufmerksam machen:

(korrigiert mich, wenn ich falsch liege, wenn ich nicht falsch liege bitte euere Meinung)

wenn ich einen cron zum Einlesen der Bannerkampagnen ausführe passiert folgendes:

alle Kampagnen des Sponsors werden auf Status=0 gesetzt,
Interfaceabfrage startet und Kampagnen werden eingelesen,
es wird überprüft, welche Kampagne noch aktuell ist und den Kriterien (min.Menge etc.) entspricht,
noch gültige Kampagnen werden wieder aktiviert (status=1)

und nun wird es heikel...der Rest wird einfach so (ohne Überprüfung) gelöscht.

was passiert aber...

wenn sich das Interface mal verschluckt(bemerke ich öfter bei verschiedenen Sponsoren) bzw. die Abfrage mangels aufgebrauchter Interfaceabfragen keinen Returncode bekommt?

Richtig! Alle Kampagnen des betreffenden Sponsors werden gelöscht und somit sind auch die vorhandenen Reloadeinträge hinfällig. Wenn der Cron dann 1 o. 2 Stunden später erneut aufgerufen wird, werden die Kampagnen alle neu eingelesen und bekommen eine neue Tan, da sie ja jetzt nicht mehr zum update vorhanden sind und somit werden alle Kampagnen, die sich noch im Reload befänden zu Minusbannern für den Webmaster, da der Sponser die Kampagnen aufgrund der Reloads natürlich nicht vergütet. Wäre es nicht also angebracht, im cron eine Abfrage einzusetzten (eine simpler Zähler z.B. und die abfrage des Kampagnenlöschens in eine if-Anweisung zu setzen zb: if ($count>1.....dann löschen


Gruß

Christian
www.mac-lose.de

Xenon
24.08.2007, 13:12
ich würde auch sagen das es auch bei meinchen sponsoren auf meiner seite ebenso ist aber es werde trozdem beim 2ten ma neueingebucgt wenn alle gelöscht wurden sind was mich tirisch nervt aber naja aber wenn ich mir das vms2 holle gibt es nicht so große probleme mti den crons ect. naja aber bis dahin muss ich mich leidr mit meinen vms1 hin und her schlagen

Dany
24.08.2007, 15:20
Kann ich nicht so bestätigen das sich die Crons aufhängen, ich hab aber auch nun nicht jeden x-beliebigen "15 Lose für den Banner" Sponsor drin.

@adi
woher weißt Du, das es nicht so große Probleme mit dem Equinox gibt?
und wenn nicht damit, hat es andere Macken, so wie jedes Script.
Das hört sich irgendwie so an: Ich brauchte unbedingt eine Loseseite, da ich mir aber das Equinox nicht leisten konnte hab ich erstmal das scheiß VMS1 genommen.

Gruß Dany

DimpleX
24.08.2007, 15:31
ist mir auch bei 1 sponsoren (lose4allweb) extrem aufgefallen das wenn der sponsor nicht erreichbar war alle kampangen gelöschtworden sind, bei nächsten durchgang neu eingelesen worden sind und reload nicht mehr stimmte.

hatte damals mal überlegt in den vms_reloads die bid mit rein zunehmen da die sich bei den kampangen ja nicht ändert, aber wegen script wechsel ich der sache nicht mehr nachgegangen bin



DimpleX

Xenon
24.08.2007, 15:39
Original von Dany
Kann ich nicht so bestätigen das sich die Crons aufhängen, ich hab aber auch nun nicht jeden x-beliebigen "15 Lose für den Banner" Sponsor drin.

@adi
woher weißt Du, das es nicht so große Probleme mit dem Equinox gibt?
und wenn nicht damit, hat es andere Macken, so wie jedes Script.
Das hört sich irgendwie so an: Ich brauchte unbedingt eine Loseseite, da ich mir aber das Equinox nicht leisten konnte hab ich erstmal das scheiß VMS1 genommen.

Gruß Dany

ne ich bin stolz eine vms1 seite zur haben und lose habe ich genung nur das problem ist ich bin 14 dh kriege ich es nicht und ich möchte erst auf vms1 alles lernen und dann holle ich mir vms2 nicht das ich dann scheiße mit dem vms2 mache

MFG
adi

dude32
24.08.2007, 18:41
hab da was gefunden:


Beschreibung für den Umbau des Reloadsystems
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
Die nachfolgende Beschreibung erklärt euch den Ablauf, wie ihr den Vergütungsausfall fast auf 0% drücken könnt, wenn ein Sponsornetzwerk mal nicht da ist und die Kampagnen gelöscht werden und dann wieder auftauchen.

Die dazu notwendigen Umbauarbeiten der Dateien finden in ALLEN Sponsorencrons statt an den Tabellen in welche ihr die Tan sonst einträgt und auch alle Dateien die aus der Relaodtabelle, ganz gleich aus welcher Reloadtabelle, auslesen.

Kommen wir nun zur Datenbankstrukturänderung:
Hinweis: Bevor ihr diese Änderungen macht, würde ich aus Sicherheitsgründen ein Backup empfehlen. Man kann ja nie wissen.

1. setzt ihr die Spalte KID in der `vms_gebuchte_werbung` o.ä. die kampagnen aus sponsorencrons beziehen auf Varchar(20)

2. Alle die Tabellen, die sich die KID aus der `vms_gebuchte_werbung`
genauso alle anderen Tabellen die von dieser Tabelle die KID beziehen setzt ihr bitte die KID auf Varchar(20)
3. In der vms_reloads o.ä. fügt ihr eine Spalte mit dem namen KID und des Typs Varchar(20) hinzu.

Nun dürfte die Datenbankstrukturänderung beendet worden sein.


Es geht nun zu den SponsorenCrons.
Hinweis: Ich habe mir einen Cron geschrieben, der mir jeden Sponsor einzeln Updatet auf die neue KID, da sich die Kampagnen dann doppelt reinschreiben würden, da die KID ja dann anders ist. Zu der näheren Erläuterung komme ich später.

Vorher noch einen Standart den ihr beachten solltet. Da die KID mit 11 Stellen auf Zahlenbasis deklariert worden ist. und diese jetzt 20 Zeichen hat mußte ich einen kleinen Standart einfallen lassen. Dieser wäre wie folgt: 5 Zeichen für den Sponsor und die letzten 2 Zeichen für die Werbeart. Somit hätte ich theoretisch 13 Zeichen für die eigentliche Kampagnenid des Sponsors. Dieses würde bedeuten das der Sponsor eine Maximale KID von 9.999.999.999.999 haben kann. Und das pro Werbeart!
Nun zum Beispiel einer neuen KID. Als Beispiel nehmen wir Lose4Admin, Webmasterlose, HP-Lose, Fuco-Ads und Nickeysponsor.

Sponsorenkürzel:
Webmasterlose = wml
Hp-Lose = hp-lo
Lose4Admin = l4adm
Fuco-Ads = fu-ad
Nickeysponsor = nispo

Die Werbearten sind wie folgt unterteilt:
ForcedBanner = fb
HighForcedBanner = hf
Premiumbanner = pb
Klick4Win = kw
Paidlinks = pl
Text Paidmail = pm
HTML Paidmail = hm
Traffic = tr
Surfviews = sw


Als Beispiel gehen wir dann von folgenden Szenario aus: WML bucht KID 13 von Forcedbanner ein und HP die KID 13 bei den Paidlinks und FuCo-Ads die KID 13 ebenfalls bei den Forcedbannern.
Wir haben dann folgende Konstelationen:
wml13fb
hp-lo13pl
fu-ad13fb

da die KID beim Sponsor, egal ob er nicht erreichbar ist oder nicht sich theoretisch nicht ändert haben wir somit einen Schlüssel, der eindeutiger ist als die TAN die nur temporär erstellt wird.


Nun zu den Eigentlichen Umbauarbeiten:
Ihr öffnet die Crondatei und sucht folgendes (meistens die $int_kid)
direkt unter der $int_kid schreibt ihr folgendes:
$int_kid = "SPONSORKÜRZEL".$int_kid."WERBEARTKÜRZEL";

Achtet nun daruaf das bei den eintragungen in der Datenbank überall wo die $int_kid steht es wie folgt steht: '".$int_kid."', da er diese dann sonst nicht eintragen würde.

Dann speichert ihr den Cron. Vorher müßt ihr für diesen SPonsor, den ihr gerade bearbeitet habt einen Cron schreiben, der wie folgt funkrionieren sollte:


--> AUSZUG ANFANG
//Variablen Deklarieren
$sponsor = "SPONSORNAME";
$kurz = "SPONSORKÜRZEL";

//Durchlauf für Forcedbanner
$sponsor = db_query("SELECT `kid` FROM `".$db_prefix."_gebuchte_werbung` WHERE `sponsor` = '".$sponsor."' AND `werbeart` = 'forcedbanner'"):
while($sp = mysql_fetch_array($sponsor)){
$kid_neu = $kurz.$sp['kid']."fb";
//In die Datenbank eintragen
db_query("UPDATE `".$db_prefix."_gebuchte_werbung` WHERE `kid` = '".$kid_neu."' AND `sponsor` = '".$sponsor."' AND `werbeart` = 'forcedbanner'");
}

//Durchlauf für Forcedbanner
$sponsor = db_query("SELECT `kid` FROM `".$db_prefix."_gebuchte_werbung` WHERE `sponsor` = '".$sponsor."' AND `werbeart` = 'paidlinks'"):
while($sp = mysql_fetch_array($sponsor)){
$kid_neu = $kurz.$sp['kid']."fb";
//In die Datenbank eintragen
db_query("UPDATE `".$db_prefix."_gebuchte_werbung` WHERE `kid` = '".$kid_neu."' AND `sponsor` = '".$sponsor."' AND `werbeart` = 'paidlinks'");
}

//Durchlauf für Paidmails
$sponsor = db_query("SELECT `kid` FROM `".$db_prefix."_gebuchte_werbung` WHERE `sponsor` = '".$sponsor."' AND `werbeart` = 'paidmails'"):
while($sp = mysql_fetch_array($sponsor)){
$kid_neu = $kurz.$sp['kid']."fb";
//In die Datenbank eintragen
db_query("UPDATE `".$db_prefix."_gebuchte_werbung` WHERE `kid` = '".$kid_neu."' AND `sponsor` = '".$sponsor."' AND `werbeart` = 'paidmails'");
}

AUSZUG ENDE -->

Somit verhindert ihr, wenn ihr Sponsor für Sponsor durchgeht, das ihr Kampagnen doppelt einbucht, da diese dann in dem Sponsorencron mit der neuen KID eingebucht werden. Somit könnt ihr das System auch Stück für Stück umbauen, ohne das der User oder ihr Verlust macht, da ihr die Crons nicht deaktivieren müsst. Wenn ihr den UpdateCron dann durchgelaufen habt, guckt bitte in der Tabelle `vms_gebuchte_werbung` nach, ob die KID auch so umgetragen worden ist. Beachtet bitte auch, das der Cron und der UpdateCron so nachfolgend wie nur möglich hochgeladen wird und der UpdateCron auch so schnell wie Möglich dann ausgeführt wird.


Nachdem ihr also schon die Datenbank und die Crons alle geändert habt, müßt ihr nun folgendes machen. Überall dort wo Dateien die `vms_reload` o.ä. mit Daten befüllen müßt ihr folgendes suchen:
INSERT INTO ".$db_prefix."_reloads (ip,uid,tan,bis...
Am besten hinter der Spalte `uid` fügt ihr dann ,kid ein und bei den Spalten dort wo $VARIABLENNAME['tan'] steht dann $VARIABLENNAME['kid'] ein. Somit werden dann die `vms_reloads` o.ä. Tabellen mit den neuen Daten bestückt. Die Dateien in der die `vms_reloads` auftaucht sind:
topframe_forced,topframe_hf,topframe_text,betteln, startseitenaufruf und unter umständen pcheck, topframe_premium und topframe_betau.

Nachdem ihr also eurer ganzes Projekt schon vorbereitet habt, könnt ihr, jenachdem wie ihr das betteln eingestellt habt und/oder den Startseitenaufruf dann folgendes machen.

Überall dort wo dann steht: (erst nur betteln und startseitenaufruf
SELECT ... FROM `vms_reloads` WHERE tan='".$VARIABLENNAME[TAN]."' macht ihr dann daraus:
SELECT ... FROM `vms_reloads` WHERE kid='".$VARIABLENNAME[KID]."'
Auch die nachfolgenden Variablen müßt ihr beachten, da eventuell dann noch tan steht.

Wenn ihr das betteln und den Startseitenaufruf schon umgestellt habt, könnt ihr die betteln und den startseitenaufruf aufrufern, wo in die `vms_reloads` geschrieben wird und die INSERT INTO anweisung so kürzen, das er die TAN nicht mehr mit einträgt.

Nun könnt ihr euch an euer WMS oder auch an den Adminbuchungen ranwagen. Dort müßt ihr dann beim eintragen in die `vms_gebuchte_werbung` o.ä. dann beachten das er eine KampagnenID ebenfalls mit einträgt. Am besten per Zufall mit 6 stellen berechnen lassen und vorher dann admin und hinten die werbeart mit angeben. Somit bucht ihr auch Standartkonforme Kampagnen ein und ihr vergewisdsert euch, dass ihr auch adminbuchungen dann im reload habt.

Nachdem die alle Zeilen mit der KID gefüllt sind (nachzuprüfen mit dem Befehl: SELECT COUNT(*) FROM `vms_reloads` WHERE `kid`="" in der Datenbank selber) könnt ihr also die Klick4, Paidlinks, Mailhistory halt alle Verdienen bereiche auch darauf umbauen so wie beim betteln.

Im Enddeefekt habt ihr dadurch 2 Vorteile gewonnen. Zum einen ist die neue KID die dann in der `vms_reloads` o.ä. Tabellen drinsteht eindeutiger als die TAN und auch kürzer, somit wird auch der speicherumfang geringer und die Abfrage aus dieser geht ein tick schneller. Und wenn euer Sponsor abbraucht, braucht ihr euch keine Gedanken machen, das ihr wieder kampagnen einbucht, die noch im reload bei euch sind.

Ich hoffe die Erklärung war so ok, da es ja zig arten vn addons gibt, die die vms_gebuchte_webrung und die vms_reloads nachbilden habe ich versucht diese so allgemein wie möglich zu gestalten.

Liebe Grüße,
Stigma_Bln

j.knopf
24.08.2007, 23:45
Hi ihr lieben,

@dude

habe ich auch gefunden (allerdings erst, nachdem ich schon gepostet hatte--schäm--)
aber ich finde es ziemlich aufwändig und frage mich ob es nötig ist, so tief in den Eingeweiden des vms rum zu fummeln. Ich persönlich würde es wohl hinbekommen, aber viele Webbis stehen da glaube ich echt auf dem Schlauch. M.E. nach reicht es völlig aus, wenn man einfach nur verhindert das die Kampagnen gelöscht werden, wenn kein oder ein fehlerhafter RT-Code kommt.

@ der rest

Läuft das vms2 (kenne ich nur vom Namen her) nicht mit crons um die Kampagnen einzulesen?

Da es sich hier um ein Problem der Erreichbarkeit des Interfaces der Sponsoren handelt (was für ein Satz) wäre vms2 genauso betroffen, wenn es auch crons benutzt, oder?

mastermix
25.08.2007, 14:22
könnte man nicht einfach die tan so ummodeln, wie oben beschrieben? (zB : hp12345fb , hp-lo ist der sponsor, 12345 ist die KID und fb ist dann Forced-Banner ) dann würde die tan immer wieder die gleiche werden auch bei erneutem einlesen und man brächte nicht so viel umschreiben?
Was ist denn eigentlich der Sinn der Tan? Es macht eine einmalige Zuordnung der zB Banner möglich, oder? Das wäre ja bei obiger Methode auch eine einmalige Kombination!?

oje
25.08.2007, 14:37
un die tan soll aber auch wohl erschweren, dass man die banner einfach so aufrufen kann per script oder?

mastermix
25.08.2007, 14:45
ok, dann wäre zumindest system in den tans zu erkennen. aber es macht sich doch nicht echt jemand die mühe alle nummern durchzuprobieren, oder? Nagut, mit Klickprogrammen oder so weiß man nicht was alles möglich ist, geb ich zu...

j.knopf
25.08.2007, 14:55
nunja.. es sollte auch beachtet werden, ob es überhaupt so vorteilhaft ist, feste TANs zu vergeben..Beim Homebanking benutzt du auch nicht 10mal die gleiche Tan für den gleichen Empfänger.

Ich tendiere hingegen ehr dazu, auch die Tans beim Update der Kampagnen zu ändern und im cron eine weitere abfrage einzubauen. Ich stelle mir das ungefähr so vor:

wo die Banner gesplittet werden einen Zähler einbauen zb. $count++

vor dem updaten der Kampagne die alte tan auslesen

Kampagne updaten mit neuer Tan

tabelle _reloads updaten und alte Tan durch die neue ersetzen, damit die User im Reload bleiben

und am Ende

if($count >'1'){abgelaufene Banner löschen}


somit bekommt die Kampagne jedesmal eine neue Tan , die User bleiben im Reload und die abgelaufenen Kampagnen werden nur gelöscht, wenn ein Returncode gekommen ist


und ein vielleicht nicht ganz unerheblicher Aspekt: Die Chance sich sein VMS unbrauchbar zu machen ist wesentlich geringer, als bei der schon erwähnten Version und geht wesentlich schneller

j.knopf
25.08.2007, 16:11
..also nach reiflicher Überlegung habe ich mich von dem Gedanken, die Tan zu ändern wieder verabschiedet. Der Grund:

Wenn gerade viele User Banner klicken und ich dann die Tans per cron ändere kommt es wohl zwangsläufig häufiger vor, das die User die Klicks nicht vergütet bekommen, weil ich genau in der Phase zwischen Klick und Vergütung die Tan geändert habe. Das macht keinen seriösen Eindruck. Also werde ich mich nur darauf beschränken, die Ausfälle zu verhindern

plopp
26.08.2007, 23:34
Könnte man die tan nicht aus dem Kürzel und der kid erstellen und dann z.b. mit md5 unkenntlich machen?

j.knopf
27.08.2007, 01:15
sicher....
man kann das bestimmt...man kann auch vms3 schreiben...nee jetzt mal im ernst, war ein scherz.

also ich habe die von mir angesprochene Version jetzt mal über das WE getestet und festgestellt, das die super läuft und total simpel umzusetzen ist. Mir scheint dies die beste Lösung zu sein, da die meisten Webmaster ( auch die, die nicht so gut oder garnicht programmieren können) das selbst erledigen können, ohne sich ihr vms gänzlich zu zerschiessen.

Es ist bei meiner Methode lediglich zwischen Einzelcrons (die, die nur eine Werbeform abholen) und Multicrons (die, die mehrere Werbearten abholen) zu unterscheiden.

Hier mal anhand des Banna-crons ein Beispiel für ein Einzelcron: (Änderungen rot)

@require_once ('../lib/functions.lib.php');
db_connect();
$file1 = "";
$countbanner='0';

$interfacedaten = mysql_fetch_array(db_query("SELECT * FROM ".$db_prefix."_interface WHERE interface = 'banna'"));
if ($interfacedaten['mindestverguetung'] > 0.00) {
// Forcedbanner nullen
db_query("UPDATE ".$db_prefix."_gebuchte_werbung SET status='0' WHERE sponsor='banna' and werbeart='forcedbanner' and status='1'");
// Forcedbanner einlesen
$fb=@fopen("http://www.banna.de/interface/ausgabe.php?userid=".$interfacedaten['betreiber']."&key=".$interfacedaten['pass']."&art=forcedklick&reload=24&left=1&payout=".$interfacedaten['mindestverguetung']."","r");
if($fb){
while($line=fgets($fb,1000)) {
$file1.=$line;
}
fclose($fb);
}
$code = explode("|", $file1);
$tl_count = (count($code)/6)-1;
$bid_lesen = 0;
// Forcedbannercodes splitten
// 0id;1name;2reload;3mindestaufenthalt;4verguetung;5 Klicksübrig
for ($tl_anz=0;$tl_anz <= $tl_count;$tl_anz++) {
$int_tan = '';
$int_ziel = "http://www.banna.de/abbau/forcedklick.php?id=".$code[$bid_lesen]."&uid=".$interfacedaten['betreiber']."&wid=".$interfacedaten['seite']."";
$int_banner = "http://www.banna.de/abbau/forcedbanner.php?id=".$code[$bid_lesen]."&uid=".$interfacedaten['betreiber']."&wid=".$interfacedaten['seite']."";
$int_menge = round($code[$bid_lesen+5]);
$int_dauer = $code[$bid_lesen+3]+5;
$int_kid = $code[$bid_lesen];
$int_reload = $code[$bid_lesen+2]*3610;
$int_verdienst = ($code[$bid_lesen+4]*$interfacedaten['umrechnung']) - (($code[$bid_lesen+4]*$interfacedaten['umrechnung']) / 100 * $interfacedaten['eigenverdienst']);
$int_preis = $code[$bid_lesen+4]*$interfacedaten['umrechnung'];
$ext_verguetung = $code[$bid_lesen+4];
$int_tan = create_code(32);
$bid_lesen=$bid_lesen+6;
$countbanner++;

// Forcedbanner updaten oder eintragen
$int_menge = round($int_menge/100*$interfacedaten['restklicks']);
echo 'extver: '.$ext_verguetung.' mindestverg: '.$interfacedaten['mindestverguetung'].' int.menge: '.$int_menge.' int.reload: '.$int_reload.'<br>';
if ($ext_verguetung >= $interfacedaten['mindestverguetung'] and $int_menge > 1 and $int_reload >= 3600) {
$forcedbanner_check = db_query ("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'banna' and kid = '".$int_kid."'");
if (!mysql_num_rows($forcedbanner_check)) {
db_query ("INSERT INTO ".$db_prefix."_gebuchte_werbung (tan,kid,ziel,banner,preis,verdienst,aufendhalt,me nge,reload,sponsor,werbeart) VALUES ('".$int_tan."','".$int_kid."','".$int_ziel."','".$int_banner."','".$int_preis."','".$int_verdienst."','".$int_dauer."','".$int_menge."','".$int_reload."','banna','forcedbanner')");
} else {
db_query ("UPDATE ".$db_prefix."_gebuchte_werbung SET status = '1',menge = '".$int_menge."',preis = '".$int_preis."',verdienst = '".$int_verdienst."', aufendhalt = '".$int_dauer."' WHERE sponsor = 'banna' and kid = '".$int_kid."' and status = '0'");
}
}
}
}

// Abgelaufene Banner löschen

if($countbanner > '2'){
db_query ("DELETE FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'banna' and status = '0'");
}

// Zeit setzen
db_query ("UPDATE ".$db_prefix."_crons SET laufzeit = '".time()."' WHERE bezeichnung = 'Banna.de Forcedbanner'");
db_close();

j.knopf
27.08.2007, 01:16
Beispiel für ein Multicron (hier ist es etwas mehr, da sonst wenn man Pech hat trotzdem alle Kampagnen gelöscht werden)


@require_once ('../lib/functions.lib.php');
db_connect();
$file1 = "";
$countbanner='0';

$interfacedaten = mysql_fetch_array(db_query("SELECT * FROM ".$db_prefix."_interface WHERE interface = 'werbekrise'"));

if ($interfacedaten['mindestverguetung'] > 0.00) {
// Werbekrise Forcedbanner nullen
db_query("UPDATE ".$db_prefix."_gebuchte_werbung SET status='0' WHERE sponsor='werbekrise' and werbeart='forcedbanner' and status='1'");
// Forcedbanner einlesen
$fb=@fopen("http://www.werbekrise.de/interface/output_forcedbanner.php?id=".$interfacedaten['betreiber']."&pw=".$interfacedaten['pass']."&reload=24&verguetung=".$interfacedaten['mindestverguetung']."&uebrig=1","r");
if($fb){
while($line=fgets($fb,1000)) {
$file1.=$line;
}
fclose($fb);
}
$code = explode("|", $file1);
$tl_count = (count($code)/5)-1;
$bid_lesen = 0;
// Forcedbannercodes splitten

for ($tl_anz=0;$tl_anz <= $tl_count;$tl_anz++) {
$int_tan = '';
$int_ziel = "http://www.werbekrise.de/lose/forcedclickbanner.php?id=".$interfacedaten['betreiber']."&bid=".$code[$bid_lesen]."&aid=".$interfacedaten['seite']."";
$int_banner = "http://www.werbekrise.de/lose/forcedviewbanner.php?id=".$interfacedaten['betreiber']."&bid=".$code[$bid_lesen]."&aid=".$interfacedaten['seite']."";
$int_menge = round($code[$bid_lesen+3]);
$int_kid = $code[$bid_lesen];
$int_reload = $code[$bid_lesen+2]*3610;
$int_verdienst = ($code[$bid_lesen+4]*$interfacedaten['umrechnung']) - (($code[$bid_lesen+4]*$interfacedaten['umrechnung']) / 100 * $interfacedaten['eigenverdienst']);
$int_preis = $code[$bid_lesen+4]*$interfacedaten['umrechnung'];
$ext_verguetung = $code[$bid_lesen+4];
$int_tan = create_code(32);
$bid_lesen=$bid_lesen+5;
$countbanner++;

// Forcedbanner updaten oder eintragen
$int_menge = round($int_menge/100*$interfacedaten['restklicks']);
if ($ext_verguetung >= $interfacedaten['mindestverguetung'] and $int_menge > 1) {
$forcedbanner_check = db_query ("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'werbekrise' and kid = '".$int_kid."'");
if (!mysql_num_rows($forcedbanner_check)) {
db_query ("INSERT INTO ".$db_prefix."_gebuchte_werbung (tan,kid,ziel,banner,preis,verdienst,aufendhalt,me nge,reload,sponsor,werbeart) VALUES ('".$int_tan."','".$int_kid."','".$int_ziel."','".$int_banner."','".$int_preis."','".$int_verdienst."','".$interfacedaten['aufendhalt']."','".$int_menge."','".$int_reload."','werbekrise','forcedbanner')");
} else {
db_query ("UPDATE ".$db_prefix."_gebuchte_werbung SET status = '1',menge = '".$int_menge."',preis = '".$int_preis."',verdienst = '".$int_verdienst."', aufendhalt = '".$interfacedaten['aufendhalt']."' WHERE sponsor = 'werbekrise' and kid = '".$int_kid."' and status = '0'");
}
}
}
}

if($countbanner > '2'){

db_query ("DELETE FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'werbekrise' and werbeart ='forcedbanner' and status = '0'");
}



$file1 = "";
$counttext='0';

$interfacedaten = mysql_fetch_array(db_query("SELECT * FROM ".$db_prefix."_interface WHERE interface = 'werbekrise'"));

if ($interfacedaten['tlmindestverguetung'] > 0.00) {
// Werbekrise Forcedbanner nullen
db_query("UPDATE ".$db_prefix."_gebuchte_werbung SET status='0' WHERE sponsor='werbekrise' and werbeart='textlink' and status='1'");
// Forcedbanner einlesen
$fb=@fopen("http://www.werbekrise.de/interface/output_forcedtextlink.php?id=".$interfacedaten['betreiber']."&pw=".$interfacedaten['pass']."&reload=24&verguetung=".$interfacedaten['tlmindestverguetung']."&uebrig=1","r");
if($fb){
while($line=fgets($fb,1000)) {
$file1.=$line;
}
fclose($fb);
}
$code = explode("|", $file1);
$tl_count = (count($code)/6)-1;
$bid_lesen = 0;
// Forcedbannercodes splitten

for ($tl_anz=0;$tl_anz <= $tl_count;$tl_anz++) {
$int_tan = '';
$int_ziel = "http://www.werbekrise.de/lose/forcedclicktextlink.php?id=".$interfacedaten['betreiber']."&bid=".$code[$bid_lesen]."&aid=".$interfacedaten['seite']."";
$int_banner = $code[$bid_lesen+5];
$int_menge = round($code[$bid_lesen+3]);
$int_kid = $code[$bid_lesen];
$int_reload = $code[$bid_lesen+2]*3610;
$int_verdienst = ($code[$bid_lesen+4]*$interfacedaten['umrechnung']) - (($code[$bid_lesen+4]*$interfacedaten['umrechnung']) / 100 * $interfacedaten['eigenverdienst']);
$int_preis = $code[$bid_lesen+4]*$interfacedaten['umrechnung'];
$ext_verguetung = $code[$bid_lesen+4];
$int_tan = create_code(32);
$bid_lesen=$bid_lesen+6;
$counttext++;

// Forcedbanner updaten oder eintragen
$int_menge = round($int_menge/100*$interfacedaten['tlrestklicks']);
if ($ext_verguetung >= $interfacedaten['tlmindestverguetung'] and $int_menge > 1) {
$forcedbanner_check = db_query ("SELECT * FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'werbekrise' and kid = '".$int_kid."'");
if (!mysql_num_rows($forcedbanner_check)) {
db_query ("INSERT INTO ".$db_prefix."_gebuchte_werbung (tan,kid,ziel,banner,preis,verdienst,aufendhalt,me nge,reload,sponsor,werbeart) VALUES ('".$int_tan."','".$int_kid."','".$int_ziel."','".$int_banner."','".$int_preis."','".$int_verdienst."','".$interfacedaten['tlaufendhalt']."','".$int_menge."','".$int_reload."','werbekrise','textlink')");
} else {
db_query ("UPDATE ".$db_prefix."_gebuchte_werbung SET status = '1',menge = '".$int_menge."',preis = '".$int_preis."',verdienst = '".$int_verdienst."', aufendhalt = '".$interfacedaten['tlaufendhalt']."' WHERE sponsor = 'werbekrise' and kid = '".$int_kid."' and status = '0'");
}
}
}
}


if($counttext > '2'){

db_query ("DELETE FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'werbekrise' and werbeart ='textlink' and status = '0'");
}
// Zeit setzen
db_query ("UPDATE ".$db_prefix."_crons SET laufzeit = '".time()."' WHERE bezeichnung = 'Forcedbanner werbekrise'");

db_close();

j.knopf
27.08.2007, 01:21
Naja.. leider ist die Formatierung ein wenig durcheinander gekommen, aber ich hoffe man kann trotzdem nachvollziehen, wo was hin muss. Ich habe den counter auf 2 gesetzt, da es einige Sponsoren gibt, die vor dem Returncode einen Status schicken und ich keine Ahnung habe, ob der die while schleife durchläuft. Bin einfach auf Nummer Sicher gegangen. Aber wer hat schon Sponsoren, die nur 2 Kampagnen rausschicken, also sollte es kein Problem sein ;-)

Gnarf
29.08.2007, 11:19
hmm interessantes thema...hat jemand zeit mir gegen lose die ganzen crons upzudaten? :)

Greggy
29.08.2007, 13:10
if($counttext > '2'){
db_query ("DELETE FROM ".$db_prefix."_gebuchte_werbung WHERE sponsor = 'werbekrise' and werbeart ='textlink' and status = '0'");
}


würde ich durch das folgende ersetzen



if($counttext <= '2'){
db_query ("update ".$db_prefix."_gebuchte_werbung set verdienst = verdienst/2, status='1' WHERE sponsor = 'werbekrise' and werbeart ='textlink' and status = '0'");
}


Begründung: falls nur der cron nicht richtig aufgerufen wurde würden sonnst alle banner gelöscht (obwohl der anbieter eigentlich da ist)==> so wird nach dem ersten cron-aurfruf der "schaden" halbiert, beim 2ten cronaufruf derschaden geviertelt

Hab ich was übersehen?

j.knopf
29.08.2007, 13:45
Du hast da ganz kräftig was übersehen. Bei deinem Vorschlag <=2 passiert nur folgendes: wenn der cron nicht funktioniert hat, aktivierst du die Kampagnen wieder ( auch die, die eigentlich gelöscht werden sollen, weil sie abgelaufen sind) zum halben Preis und bekommst die Klicks deiner User nicht vergütet, weil z.B. der Sponsor down ist

Wenn der Sponsor also down ist, lässt du die Banner zum halben Preis weiterlaufen und wenn der cron durchläuft (dann ist der zähler ja >2) passiert am Ende nach dem Update nichts mehr (alte Kampagnen bleiben in der DB) Wenn du das so machst, hast du nach 3 Wochen 3000 aktive Kampagnen in der DB, wovon 2300 beim Sponsor nicht mehr vergütet werden, weil si längst abgelaufen sind.

winni1
01.09.2007, 16:16
Nur was nu Heute ist werbekriese down. Ich hab es genauso gemacht wie beschrieben das mit dem Counter. Der Cron hat alle Kampangen trotzdem gelöscht.

Wäre es nicht besser die Kampange zu Nullen ich meine die MENGE. Und wenn der Sponsor wieder da ist kann er es wieder updaten.

Das einzigste was jetzt passieren kann das die dboptimize die Kampange mit 0 menge löscht da es denkt der ist abgelaufen.

Aber Kampangen mit 0 menge könnte man einmal peer Hand löschen die Woche was kein beinbruch wäre und zuviel für die db wirds auch nicht, da die Tan mit der id bleibt in der db. Wenn ich es richtig verstanden hab Updatet der Cron die Dateien und was nicht da ist schreibt er Neu.

j.knopf
08.09.2007, 03:06
Hi,

war ne Woche in Urlaub. Also wenn bei dir die Kampagnen trotzdem gelöscht werden, hast du definitiv etwas falsch gemacht. Bei mir läuft es jetzt seit 2 Wochen, ohne das die Kampagnen gelöscht werden, wenn der Sponsor down ist.

Hast du in der DB nachgesehen, ob die Banner wirklich gelöscht wurden, oder hast du im Adminforce auf Interfacebanner (Werbekrise) geklickt. Dort tauchen die nämlich nicht auf wenn sie inaktiv sind. Sie sind aber trotzdem nicht gelöscht!

halk
08.09.2007, 23:43
hallo



fage wo hast du die cron bzw die addon her ich habe die erfahrung gemacht,


ich hatte erst alle addon von hier aber da waren zuviele x banner drin und ich musste viel manuell ausführen . dann habe ich mich entschlossen addons zu kaufen von Script-Kiste und es hat sich ausgezahlt .Zb.wenn der sponsor nicht zuereichen ist speißt er auch nicht ein ,nicht wie hier die addon nur mit ein x banner


Mfg halk

j.knopf
09.09.2007, 03:13
...vielleicht stehe ich ja gerade auf dem Schlauch....x Banner?!?..einspeißen ?!?
..ich verstehe nur Bahnhof. Das einzige, was ich aus deinem Post kapiert habe ist, das du deine Addons bei Skriptkiste gekauft hast...

PS: KEIN Addon speißt ein (um es mal mit deinen Worten zu sagen) wenn der Sponsor down ist, egal ob Skriptkiste, Cornflakes oder sonstiges, weil dann nix zum einspeißen ankommt.

..ich glaube (ohne dir zu nahe treten zu wollen) du hast nicht richtig verstanden, worum es hier geht.

Bonzai
15.09.2007, 15:32
Danke j.knopf,

das ist eine einfache aber sehr effektive Lösung, ich bin gerade dabei meine Interfaces zu überarbeiten.

Bisher hatte ich die Problemseiten nur noch aller 12 Stunden abgefragt und dann immer nur eine sehr kleine Menge eingebucht, so geht das natürlich viel besser. :D

Gruß
Bonzai