Aiuto Gestione di un form iscrizione a numero chiuso

  • Creatore Discussione Creatore Discussione anton
  • Data di inizio Data di inizio

anton

Nuovo Utente
16 Lug 2012
27
0
1
Nuovo del forum e qindi un salve a tutti.
Premetto la mia scrsissima conoscenza del codice PHP, il problema, devo realizzare un form che invia i dati immessi ad un indirizzo mail che preveda però un numero chiuso di iscritti e che quindi una volta arrivati al numero massimo la submit non spedisca la mail con i dati ma apra una pagina info con le date del nuovo inizio iscrizioni, qui nasce il problema. Il codice che utilizzo per il formmail è il seguente:
PHP:
<?php
   function ValidateEmail($email)
   {
      $pattern = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
      return preg_match($pattern, $email);
   }

   if($_SERVER['REQUEST_METHOD'] == 'POST')
   {
      $mailto = '[email protected]';
      $mailfrom = isset($_POST['email']) ? $_POST['email'] : $mailto;
      $subject = 'Contact Information';
      $message = 'Values submitted from web site form:';
      $success_url = '';
      $error_url = '';
      $error = '';
      $autoresponder_from = '[email protected]';
      $autoresponder_subject = 'grazie';
      $autoresponder_message = 'grazie grazie';
      $eol = "\n";
      $max_filesize = isset($_POST['filesize']) ? $_POST['filesize'] * 1024 : 1024000;
      $boundary = md5(uniqid(time()));

      $header  = 'From: '.$mailfrom.$eol;
      $header .= 'Reply-To: '.$mailfrom.$eol;
      $header .= 'MIME-Version: 1.0'.$eol;
      $header .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'"'.$eol;
      $header .= 'X-Mailer: PHP v'.phpversion().$eol;
      if (!ValidateEmail($mailfrom))
      {
         $error .= "The specified email address is invalid!\n<br>";
      }

      if (!empty($error))
      {
         $errorcode = file_get_contents($error_url);
         $replace = "##error##";
         $errorcode = str_replace($replace, $error, $errorcode);
         echo $errorcode;
         exit;
      }

      $internalfields = array ("submit", "reset", "send", "captcha_code");
      $message .= $eol;
      $message .= "IP Address : ";
      $message .= $_SERVER['REMOTE_ADDR'];
      $message .= $eol;
      foreach ($_POST as $key => $value)
      {
         if (!in_array(strtolower($key), $internalfields))
         {
            if (!is_array($value))
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . $value . $eol;
            }
            else
            {
               $message .= ucwords(str_replace("_", " ", $key)) . " : " . implode(",", $value) . $eol;
            }
         }
      }

      $body  = 'This is a multi-part message in MIME format.'.$eol.$eol;
      $body .= '--'.$boundary.$eol;
      $body .= 'Content-Type: text/plain; charset=ISO-8859-1'.$eol;
      $body .= 'Content-Transfer-Encoding: 8bit'.$eol;
      $body .= $eol.stripslashes($message).$eol;
      if (!empty($_FILES))
      {
          foreach ($_FILES as $key => $value)
          {
             if ($_FILES[$key]['error'] == 0 && $_FILES[$key]['size'] <= $max_filesize)
             {
                $body .= '--'.$boundary.$eol;
                $body .= 'Content-Type: '.$_FILES[$key]['type'].'; name='.$_FILES[$key]['name'].$eol;
                $body .= 'Content-Transfer-Encoding: base64'.$eol;
                $body .= 'Content-Disposition: attachment; filename='.$_FILES[$key]['name'].$eol;
                $body .= $eol.chunk_split(base64_encode(file_get_contents($_FILES[$key]['tmp_name']))).$eol;
             }
         }
      }
      $body .= '--'.$boundary.'--'.$eol;
      mail($mailto, $subject, $body, $header);
      $autoresponder_header  = 'From: '.$autoresponder_from.$eol;
      $autoresponder_header .= 'Reply-To: '.$autoresponder_from.$eol;
      $autoresponder_header .= 'MIME-Version: 1.0'.$eol;
      $autoresponder_header .= 'Content-Type: text/plain; charset=ISO-8859-1'.$eol;
      $autoresponder_header .= 'Content-Transfer-Encoding: 8bit'.$eol;
      $autoresponder_header .= 'X-Mailer: PHP v'.phpversion().$eol;
      mail($mailfrom, $autoresponder_subject, $autoresponder_message, $autoresponder_header);
      header('Location: '.$success_url);
      exit;
   }
?>

Qualcuno può suggerirmi come e dove inserire un contatore per avere il risultato di cui sopra?
Grazie
 
Ultima modifica di un moderatore:
ciao
per prima cosa: quando scrivi del codice racchiudile negli appositi tag altrimenti si lege male (seconda riga di formattazione del post ultime tre iconcine, nell'ordine CODE HTML PHP).
poi da quello che scrivi di voler fare mi sembra che tu dabba avere un db, altrimenti lo script non può ricordarsi quanti hanno scritto.
 
Mi scuso per l'errore se c'è modo di rimediare ti prego di suggerirmelo, riguardo al db posso crearlo, il sito che sto realizzando per mia figlia non è ancora in linea
 
Dunque, qui bisogna affrontare discorso in maniera un po' più ampia.

Innanzitutto io non mi sentirei per niente a mio agio manipolando i dati degli utenti per email: l'email per può non arrivare per problemi tecnici oppure può essere cancellata per sbaglio (e tu perderesti un utente e impediresti a quello successivo di iscriversi).

Il database, invece, ti fornisce un responso immediato (saprai subito se la registrazione è andata a buon fine), e ha potenzialità infinite: potresti creare, per esempio, un pannello di controllo da cui manipolare i dati. Inoltre, come ha detto borgo, con un database puoi facilmente limitare le iscrizioni.

Per questi e per mille altri motivi dovresti usare un database; trattandosi di un'infrastruttura semplice consiglio MySQL.
 
Premettendo che se il problema fosse solo il contatore potresti creare anche un file di testo e salvarti il valore per poi aggiornarlo ogni volta che c'è una nuova iscrizione.
Ti consiglio di salvarti tutti gli indirizzi e-mail degli utenti che si sono iscritti e hanno confermato l'iscrizione, quindi ti serve un db per comodità e velocità. Puoi risalire al numero di utenti che si sono iscritti facendo una semplice query.
 

Discussioni simili