Simpele vergelijking met negatieve integer lukt niet helemaal.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

15/04/2014 19:28:35
Quote Anchor link
Ik heb een verzend limiet van 15 emails per dag. Je kan emails toevoegen om te versturen.
Zodra de limiet bereikt is van 15 emails moet er een error komen maar stel ik probeer 45 emails toe te voegen in 1x en ik heb er vandaag pas 10 verzonden dan wil ik een error weergeven met daarbij het aantal emails dat nog toegevoegd kunnen worden (in dit geval dus 5).

Ik heb het volgende geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php  

// counter zijn de emailtjes die de gebruiker nog wilt toevoegen..
// emailuitnodigingen zijn de mailtjes die vandaag al verzonden zijn.
// getKlantPakketVerzendLimiet() is de limiet van 15 emails per dag.


$totaalMailtjes =  $counter + $emailsUitnodigingen;
                            
$credits = getKlantPakketVerzendLimiet() - $totaalMailtjes;
                            
echo $credits;
if ($credits >= 0)
{

   $errors[] .= "De dag limiet van ".getKlantPakketVerzendLimiet() ." emails per dag is bereikt. Upgrade uw pakket om meer uitnodigingen te versturen.";
}

else
{
 $credits = str_replace('-', '', ($credits));
 $errors[] .= "De dag limiet van ".getKlantPakketVerzendLimiet() ." emails per dag is bijna bereikt. U kunt nog ".$credits." emails toevoegen. Upgrade uw pakket om meer uitnodigingen te versturen.";
}


?>



Hoe kan ik dit simpel uitrekenen en weergeven?
Gewijzigd op 15/04/2014 19:32:07 door Furio Scripting
 
PHP hulp

PHP hulp

13/11/2024 08:10:12
 
Ward van der Put
Moderator

Ward van der Put

15/04/2014 19:46:03
Quote Anchor link
Dat kan mooier in een while ... of een do ... while ...

Maar voordat je het zo oplost: ik zou het overschrijden van de limiet naar voren halen. Als iemand 45 uitnodigingen wil verzenden maar er maar 15 kan verzenden, wil je dat eerder melden. De gebruiker kan dan namelijk zelf de keuze "welke 1 op de 3 zullen we uitnodigen" maken.

Als er al 15 e-mails zijn verzonden en je vervolgens nog 30 ongebruikte e-mailadressen overhoudt, dan staat de gebruiker voor een voldongen feit. En dan hoor je het gemopper al: "Had ik dat nou eerder geweten, dan had ik wel x en niet y uitgenodigd."
 
Furio Scripting

Furio Scripting

15/04/2014 19:54:04
Quote Anchor link
Ward van der Put op 15/04/2014 19:46:03:
Dat kan mooier in een while ... of een do ... while ...

Maar voordat je het zo oplost: ik zou het overschrijden van de limiet naar voren halen. Als iemand 45 uitnodigingen wil verzenden maar er maar 15 kan verzenden, wil je dat eerder melden. De gebruiker kan dan namelijk zelf de keuze "welke 1 op de 3 zullen we uitnodigen" maken.

Als er al 15 e-mails zijn verzonden en je vervolgens nog 30 ongebruikte e-mailadressen overhoudt, dan staat de gebruiker voor een voldongen feit. En dan hoor je het gemopper al: "Had ik dat nou eerder geweten, dan had ik wel x en niet y uitgenodigd."


Bedankt voor de goede tips Ward,

Ik neem aan dat ik dan via Javascript moet gaan werken om al bij de invoer te gaan rekenen en dus de gebruiker snel op de hoogte kan brengen, ik werk liever enkel met PHP.

De emails worden niet meteen verzonden na het bevestigen, ze worden in een database opgeslagen, daarna kan men binnen 2 uur nog emails verwijderen. Een automatische cron job verstuurt vervolgens na 2 uur de emailtjes.

Bij een foutmelding blijven wel alle emailadressen staan en kan men dus zelf kiezen welke die nog graag wilt versturen.
Gewijzigd op 15/04/2014 19:54:27 door Furio Scripting
 
Ward van der Put
Moderator

Ward van der Put

15/04/2014 20:00:45
Quote Anchor link
Dan is het wel sjiek om er een wachtrij van te maken (want dat is het feitelijk ook) en de gebruiker de mogelijkheid te bieden de volgorde te veranderen. Mevrouw Jansen éérst uitnodigen, meneer Pietersen onderaan de wachtrij plaatsen.

Praktisch is dat ook wel gebruikersvriendelijk, want je kunt dan bijvoorbeeld één keer per week je uitnodigingen "klaar zetten" en jouw site doet in de dagen erna de rest.
 
Furio Scripting

Furio Scripting

15/04/2014 21:11:22
Quote Anchor link
Maar ik wil nog steeds weergeven hoeveel emails er nog bij kunnen indien er teveel emails togevoegd proberen te worden. Ik krijg het maar niet voor elkaar terwijl het zo simpel lijkt.

A. Ik heb de emails die erbij gevoegd willen worden. (lets say 70).
B. Ik heb de verzendlimiet van 50.
C. Ik heb de tot nu toe verzonden emails van vandaag. (lets say 10).

Als ik nu dus: A + C doe heb ik de totale emails (80). Dit is 30 teveel, je kan er nog maximaal 40 toevoegen vandaag. dit wil ik weergeven aan de gebruiker. Maar het wilt niet helemaal lukken :(
 
Ward van der Put
Moderator

Ward van der Put

15/04/2014 21:24:11
Quote Anchor link
In pseudo-code is dat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if (A > (B - C)) {
    (verzendlimiet overschreden)
}
 
Furio Scripting

Furio Scripting

15/04/2014 21:32:02
Quote Anchor link
Ward van der Put op 15/04/2014 21:24:11:
In pseudo-code is dat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if (A > (B - C)) {
    (verzendlimiet overschreden)
}


Oke top, ik lees het helaas net iets te laat.

Ik heb dit in elkaar geknutseld en het geeft eindelijk het bewenste resultaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
     if ( $limietBereikt !== 1 && $emailsUitnodigingen + $counter > getKlantPakketVerzendLimiet())
                        {

                            
                            $limietBereikt = 1;
                            
                            // emails die erbij willen komen.
                            $emailsToevoeging = $counter;
                            // Verzend limiet van 15.
                            $verzendEmailLimiet = getKlantPakketVerzendLimiet();
                            // Emails vandaag al verzonden.
                            $emailsVandaagVerzonden =  $emailsUitnodigingen;
                            
                            echo $emailsToevoeging.'<br/>'.$verzendEmailLimiet.'<br/>'.$emailsVandaagVerzonden;
                            
                            $totaalAantalEmails =  $emailsToevoeging + $emailsVandaagVerzonden;
                            
                            $verschil = $totaalAantalEmails - $verzendEmailLimiet;
                            
                            $goede =  $emailsToevoeging - $verschil;
                            
                             if ($totaalAantalEmails > $verzendEmailLimiet && $emailsVandaagVerzonden < $verzendEmailLimiet )
                             {

                                $errors[] .= "De dag limiet van ".getKlantPakketVerzendLimiet() ." emails per dag is bijna bereikt. U kunt nog ".$goede." emails toevoegen. Upgrade uw pakket om meer uitnodigingen te versturen.";

                             }

                             elseif($emailsVandaagVerzonden >= $verzendEmailLimiet)
                             {

                            
                                  $errors[] .= "De dag limiet van ".getKlantPakketVerzendLimiet() ." emails per dag is bereikt. Upgrade uw pakket om meer uitnodigingen te versturen.";
                             }
        
                        }

?>
 
Obelix Idefix

Obelix Idefix

15/04/2014 23:08:11
Quote Anchor link
Het quoten van een (volledige) reactie, zeker als die er direct boven staat, is niet nodig.
Als je quote, citeer dan alleen het deel waar je op reageert/vraag over hebt.
Houdt het topic van leesbaarder.

Furio Scripting op 15/04/2014 19:54:04:
De emails worden niet meteen verzonden na het bevestigen, ze worden in een database opgeslagen, daarna kan men binnen 2 uur nog emails verwijderen. Een automatische cron job verstuurt vervolgens na 2 uur de emailtjes.

Ben wel benieuwd hoe jij dan die cronjob hebt ingesteld. Als Pietje om 14.04 uur bevestigt en Klaartje om 14.12 uur, worden beide exact twee uur later (dus om 16.04 en 16.12 uur) verstuurd?
Dat zou dan betekenen dat er 24/7 een cronjob wordt gestart!?
 
Furio Scripting

Furio Scripting

15/04/2014 23:31:48
Quote Anchor link
De cronjob zal ieder uur mijn php script uitvoeren, in het php script pakken we zo een 500 emails om te versturen. Het zal dus allemaal niet precies zijn maar ik vermoed dat iedere gebruiker zijn emails binnen 2 uur wel verzonden zullen zijn aangezien de meeste pakketten slecht 50 emails per dag mogen versturen.

Excuses voor het qouten...
 
Erwin H

Erwin H

16/04/2014 00:10:15
Quote Anchor link
Furio Scripting op 15/04/2014 19:28:35:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php  
$credits
= str_replace('-', '', ($credits));
?>

Hiervoor heeft php de functie abs, oftewel, de absolute waarde berekening. Een getal is nu eenmaal geen string.... behalve dan in php....
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.