11. august 2004 - 20:46Der er
18 kommentarer og 1 løsning
Nyhedsmail - sleep + database spørgsmål
Min nyhedsmail skal sende mails ud hurtigere. Kan jeg gøre det med sleep funktionen? Og hvad gør jeg, når nogen har tilmeldt sin mail flere gange i databasen, men den kun skal sende 1 gang til hver mail adresse?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Hurtigere? Det kan vel ikke gøres med sleep, da den laver pauser ;) Du kan lade være med at sende til personerne personligt, men sætte dem på BCC, og så sende til f.eks. 10-20 ad gangen. Altså sæt dig selv eller en "bogus" adresse som recipient, og tilføj folk til headerne:
fik bare at vide at hvis man satte sleep '1'; så ville den kun bruge et sekund pr. mails - i stedet for at gå i stå ved hver enkelt (pga. noget firewall/spam kontrol på serveren)
men hvorfor skriver den disse fejlmeddelser (skulle sende til 600) Warning: mail(): SMTP server response: 452 Message for <webmaster@wsy.dk> would exceed mailbox quota in d:\webroot\...\nyhedsbrev.php on line 88
Warning: mail(): SMTP server response: 452 Message for <webmaster@wsy.dk> would exceed mailbox quota in d:\webroot\...\nyhedsbrev.php on line 88
CoderDK --> Har lige et lille spørgsmål som jeg håber du vil hjælpe med.. Det er omkring det du sagde med at man ikke må kunne oprette en profil 2 gange.. Men hvad gør man hvis de har klikket på knappen "opret" og så kliker på F5 bagefter?? Kan man lave et eller andet smart hvor den hopper et andet sted hen eller melder fejl?
Min kode er således:
if ($submit) { //indsætter i database og skriver profil oprettet } else { //her er forms mv. (knap med $submit) }
Når du så submitter første gang, så tilføje følgende kode til modtagende side:
<?php
session_start();
if ( isset( $_SESSION['submitArray'] ) && in_array( $_POST['submit_id'], $_SESSION['submitArray'] ) ) { // Gør intet? Denne formular har været submittet. } else { $_SESSION['submitArray'][] = $_POST['submit_id']; // Resten af din kode her, til at oprette brugeren }
?>
Dette princip kan du bruge i alle dine forms. "submit_id" er en MD5-hash af microtime(), og vil derfor være rimelig unik for en bruger ;) Vi opretter så en sessionsvariabel som er et array der så skal indeholde alle de submit_id'er som brugeren har submittet. Dette betyder at brugeren ikke kan gå tilbage og bruge samme formular hvis han vil submitte en ny form. Dette kan dog omgås ved at tvinge browseren til ikke at cache formularsiden, så vil brugeren få en ny ID hver gang.
if ( isset( $_SESSION['submitArray'] ) && in_array( $_POST['submit_id'], $_SESSION['submitArray'] ) ) { // Gør intet? Denne formular har været submittet. } else { if ( !isset( $_SESSION['submitArray'] ) ) { $_SESSION['submitArray'] = array(); } $_SESSION['submitArray'][] = $_POST['submit_id']; // Resten af din kode her, til at oprette brugeren }
if ( isset( $_SESSION['submitArray'] ) && in_array( $_POST['submit_id'], $_SESSION['submitArray'] ) ) { // Gør intet - dvs. her skal mine <FORM>'s være? } else { if ( !isset( $_SESSION['submitArray'] ) ) { $_SESSION['submitArray'] = array(); //Hvad skal der ske her? Er det her vi indsætter brugeren i databasen? } $_SESSION['submitArray'][] = $_POST['submit_id']; // Resten af din kode her, til at oprette brugeren - dvs. <FORM>'s ? }
Og ved mine forms skal jeg bruge denne knap? echo "<input type='hidden' name='submit_id' value='" . md5( microtime() ) . "'>";
> if ( isset( $_SESSION['submitArray'] ) && in_array( $_POST['submit_id'], $_SESSION['submitArray'] ) ) > { > // Gør intet - dvs. her skal mine <FORM>'s være? // Nej, her behøver du ikke gøre noget som helst :) Dette script skal være på siden som modtager form-data! Altså den du POST'er til! > } > else > { > if ( !isset( $_SESSION['submitArray'] ) ) > { > $_SESSION['submitArray'] = array(); > //Hvad skal der ske her? Er det her vi indsætter brugeren i databasen? // Nej her skal ikke være andet, her sætter vi bare sessionsvariablen hvis den ikke er sat... > } > $_SESSION['submitArray'][] = $_POST['submit_id']; > // Resten af din kode her, til at oprette brugeren - dvs. <FORM>'s ? //Nej, her gemmer du data, altså opretter brugeren! > } > > >Og ved mine forms skal jeg bruge denne knap? >echo "<input type='hidden' name='submit_id' value='" . md5( microtime() ) . "'>";
Ja du indsætter blot sådan et hidden felt i din formular :)
Jeg deler altid mine scripts op så der er ét til formen, og ét til at modtage formen - Du kan dog godt skrive dem sammen hvis du vil :)
jamen hvordan skriver jeg dem så sammen? altså hvis min form er: <FORM method="POST" action="'.$php_self.'">
Kan du ikke vise et eksempel hvor <FORM>'en forsvinder når man klikker "opret". -og stadig med den session kode du har lavet... (hvor det hele ligger i en fil)
if ( isset( $_POST['submit_id'] ) ) { if ( isset( $_SESSION['submitArray'] ) && in_array( $_POST['submit_id'], $_SESSION['submitArray'] ) ) { // Gør intet, evt skriv at data allerede er gemt. } else { if ( !isset( $_SESSION['submitArray'] ) ) { $_SESSION['submitArray'] = array(); } $_SESSION['submitArray'][] = $_POST['submit_id']; $sql = "insert into bruger set brugernavn='$_POST[brugernavn]' osv osv"; // osv } echo "Data er gemt."; } else { // Vis din form }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.