PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : maximale Anzahl an Paidmails empfangen



snowcat
05.05.2009, 16:55
Eine Userin meiner Seite fragte mich mal, ob ich nicht den Versand an ihre eMail-Adresse beschränken könne, da ihr manchmal das Postfach zu voll werde.

Da habe ich mir Gedanken gemacht, wie man das Umsetzen kann, ausser natürlich weniger Paidmails zu versenden.

Und das ist dabei rausgekommen!

Ausprobieren konnte ich es bisher noch nicht. Arbeite auch gerade noch an einer einfacheren Variante.

Es gibt keine Garantie auf die korrekte Funktion und es ist sicherer diese Schnippsel auf einem Testsystem auszuprobieren, bevor es in ein laufendes eingebunden wird.

Für Fehlerhinweise oder Tipps bin ich sehr dankbar.

Lieben Gruß
Ralf

--------------------------
--------------------------

Eine Neue Spalte in der Tabelle anlegen für die Maximalanzahl an Paidmails.

1. SQL ausführen:
ALTER TABLE `vms_userdaten`
ADD `max_pm` INT( 2 ) NOT NULL
DEFAULT '50' AFTER `max_forcedt` ;
Auswahlmöglichkeit für die User schaffen, wie viele Mails sie haben wollen.

2. in der content/konto/userprofil.php nach
---

db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."', qmails='".$_POST['qmails']."' WHERE uid=".$_SESSION['uid']."");

Folgendes einfügen:

db_query("UPDATE ".$db_prefix."_userdaten SET max_pm = '".$_POST['max_pm']."' WHERE uid=".$_SESSION['uid']."");

3. und nach
---
<td>Paidmails*:</td>
<td>
<select name="paidmails">
<option value="1" <? if ($paidmails == 1) echo 'selected';?>>Ja</option>
<option value="0" <? if ($paidmails == 0) echo 'selected';?>>Nein</option>
</select>
</td>
</tr>

Folgendes einfügen:
<?
@$maxpm = mysql_fetch_array(db_query("SELECT max_pm FROM ".$db_prefix."_userdaten WHERE uid=".$_SESSION['uid']." LIMIT 1"));
@$max_pm = $maxpm['max_pm'];
?>
<td>max. Paidmails*:</td>
<td>
<select name="max_pm">
<option value="0" <? if ($max_pm == 0) echo 'selected';?>>0</option>
<option value="5" <? if ($max_pm == 5) echo 'selected';?>>5</option>
<option value="10" <? if ($max_pm == 10) echo 'selected';?>>10</option>
<option value="15" <? if ($max_pm == 15) echo 'selected';?>>15</option>
<option value="20" <? if ($max_pm == 20) echo 'selected';?>>20</option>
<option value="25" <? if ($max_pm == 25) echo 'selected';?>>25</option>
<option value="50" <? if ($max_pm == 50) echo 'selected';?>>50</option>
<option value="100" <? if ($max_pm == 100) echo 'selected';?>>100</option>
</select>
</td>
</tr>Die Maximalpaidmailanzahl (tolles Wort :) ) runterrechnen und wieder rauf.

4. Suche in der Datei adminforce/content/werbesystem/paidmail_versenden.php:
---

$empfaenger = db_query("SELECT * FROM ".$db_prefix."_emaildaten WHERE freigabe_fuer = '3' or freigabe_fuer = '2'");

und ersetze es durch:

$empfaenger = db_query("SELECT e. * FROM ".$db_prefix."_emaildaten AS e LEFT JOIN ".$db_prefix."_userdaten AS u ON e.uid = u.uid WHERE ( e.freigabe_fuer = '3' OR e.freigabe_fuer = '2' ) AND u.max_pm > 0");
5. Suche in der Datei pcheck.php;
---
buchungsliste (create_code(14),$mail['verdienst'],'Paidmailverdienst',$mail['uid']);

füge danach folgendes ein:

db_query("UPDATE ".$db_prefix."_userdaten where uid=".$versendet['uid']." SET max_pm=max_pm+1 LIMIT 1");
6. In der adminforce/content/werbesystem/paidmail_versenden.php nach:
---

db_query("INSERT INTO ".$db_prefix."_paidmails_empfaenger (uid,gueltig,tan,status,aufendhalt) VALUES ('".$versendet['uid']."','".$bis."','".$_GET['tan']."','0','".$daten['aufendhalt']."')");

folgendes einsetzen:

db_query("UPDATE ".$db_prefix."_userdaten where uid=".$versendet['uid']." SET max_pm=max_pm-1 LIMIT 1");
Nicht geklickte Mails müssen ja auch wieder rückgerechnet werden.


7. Suche in der Datei adminforce/content/werbesystem/paidmail_hist.php:
---
db_query("INSERT INTO ".$db_prefix."_stats (menge,bestaedigt) VALUES ($abschluss[menge], $abschluss[bestaedigt])");

füge danach folgendes ein:

$pm_korrigieren = db_query("SELECT uid FROM ".$db_prefix."_paidmails_empfaenger WHERE tan='".$_GET['tan']."'");
while ($genug = mysql_fetch_array($pm_korrigieren)) {
db_query("UPDATE ".$db_prefix."_userdaten where uid=".$genug['uid']." SET max_pm=max_pm+1 LIMIT 1");
}

jpwfour
05.05.2009, 17:37
1. ich seh da nirgendswo den Code, der von der gesamtzahl was abzieht?

2. gibts sowas in der Art nicht schon, meine, dass das einige Seiten haben :suspicious:

Hardy
05.05.2009, 17:40
2. gibts sowas in der Art nicht schon, meine, dass das einige Seiten haben :suspicious:

soweit ich weis nur in verbindung mit dem stg_mailer

eRaaaa
05.05.2009, 17:47
also einstellen kann mans vllt, aber wie jpwfour scho sagte, irgnwedwie musste das noch beim versenden beachten ?! musst ja das limit da noch irgnediwe einbauen...

adminforce/content/werbesystem/paidmail_versenden.php <-- gibts bei mir nicht (std vms), für welches paidmail addon haste das denn angepasst?

irgendwie versteh ich das inkrementieren von max_pm in der pcheck auch nicht? ;/

snowcat
05.05.2009, 23:02
Da war noch was, genau. Hatte ich übersehen. Danke jpwfour.


In der adminforce/content/werbesystem/paidmail_versenden.php nach:

db_query("INSERT INTO ".$db_prefix."_paidmails_empfaenger (uid,gueltig,tan,status,aufendhalt) VALUES ('".$versendet['uid']."','".$bis."','".$_GET['tan']."','0','".$daten['aufendhalt']."')");

folgendes einsetzen:

db_query("UPDATE ".$db_prefix."_userdaten where uid=".$versendet['uid']." SET max_pm=max_pm-1 LIMIT 1");



@jpwfour
ja, gibt es, aber nicht für den standard-mail-versand aus den Interface-Mail-Übersichten.

@eRaaaa
Sobald ein User die Mail korrekt bestätigt hat, wird der Wert max_pm wieder um 1 hochgesetzt, damit für ihn wieder ein Platz für eine neue Mail wird. Sonst bestätigen die User 50 Mails und danach kommen keine Mehr, weil der max_pm-Wert bei 0 liegt.

eRaaaa
05.05.2009, 23:52
ahhh, ja ne, ich hab jetzt erst dein system gerafft (ohne deine letzte änderung hätte es nämlich auch kein sinn gemacht) ;)

allerdings könntest du dir die eine änderung/db abfrage sparen:



@$maxpm = mysql_fetch_array(db_query("SELECT max_pm FROM ".$db_prefix."_userdaten WHERE uid=".$_SESSION['uid']." LIMIT 1"));
@$max_pm = $maxpm['max_pm'];


folgendes:


$max_pm = $info['max_pm'];

dürfte völlig reichen...da die userdaten zuvor schon abgefragt werden(alle- zumindestens im std vms)

Besucher770
02.06.2009, 20:23
es ging am anfang darum:

es wird zwar festgestellt, dass nur noch ein User Paidmails empfangen sollte, allerdings werden die Paidmails trotzdem an den User geschickt, dessen "max_pm" schon <=0 ist.

Fehler gefunden und hier die Erklärung dazu:
in der paidmail_versenden.php muss man die folgende Zeile ersetzen:


$senden = db_query("SELECT * FROM ".$db_prefix."_emaildaten WHERE freigabe_fuer = '3' or freigabe_fuer = '2' ORDER BY RAND() LIMIT ".$daten['menge']."");durch


$senden = db_query("SELECT e. * FROM ".$db_prefix."_emaildaten AS e LEFT JOIN ".$db_prefix."_userdaten AS u ON e.uid = u.uid WHERE ( e.freigabe_fuer = '3' OR e.freigabe_fuer = '2' ) AND u.max_pm > 0 ORDER BY RAND() LIMIT ".$daten['menge']."");dadurch wird dann auch die Paidmail nur an die User geschickt, die wirklich >0 Paidmails noch empfangen können :smile: