Visualizzazione risultati 1 fino 19 di 19

Discussione: form php?

  1. #1
    Guest

    Post form php?

    ragazzi sapete per caso come si chiama quando compili un form dopo un tot puoi compilarlo ancora, se no la gente ogni secondo ti contatta e ti arrivano 4235423 email, grazie per l'aiuto

  2. #2
    Guest

    Predefinito

    Non ho ben capito: vuoi sapere come si chiama o come fare?

  3. #3
    Guest

    Predefinito

    in pratica quando un utente mi contatta in un form, dopo che mi ha contattato ci vuole ad esempio 30 minuti per contattarmi di nuovo, ogni volta deve aspettare 30 minuti per contattarmi, se ci fai caso ogni volta che scrivi un messaggio qui, ti dice di aspettare 30 secondi prima di rispondere

    questo è il messaggio che esce

    SI SONO VERIFICATI ALCUNI ERRORI DURANTE L'INVIO DI QUESTO MESSAGGIO

    Questo forum richiede un'attesa di 30 secondi tra i messaggi. Riprova tra 14 secondi.
    Ultima modifica di AmOrEaMiCiZa : 18-04-2014 alle ore 21.07.27

  4. #4
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Il modo più semplice è impostare un cookie che duri 30 min, però attento che io potrei cancellarlo o non accettarlo e ti riscrivo dopo 2 secondi.
    Un modo più difficile sarebbe un cookie per un controllo rapido + salvi l IP dell utente e al secondo tentativo verifichi che quell' ip non abbia scritto nell'ultima mezzora.
    per il come si chiama mm è una sorta di Flooding, mailbombing, anti spam? roba del genere non so bene cosa faccia il tuo form e se quelli che ti arrivano siano messaggi di spam o semplici utenti che scrivono una lettera per messaggio.

  5. #5
    Guest

    Predefinito

    Potresti anche utilizzare un database dove salvi IP e ora del messaggio e poi fai eventuali controlli.

  6. #6
    Guest

    Predefinito

    in pratica la gente scrive l'email e nome utente poi possono mandarmi un messaggio e vorrei aggiungerci anche un input dove può inviarmi l'url dell'utente se per caso viola le regole del mio social network ecc...

  7. #7
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    bhè se gli utenti sono già identificati è semplice, nella tabella degli utenti metti una campo aggiuntivo in cui salvi la data e l'ora dell'ultima segnalazione, al momento dell'invio controlli che in quel campo non ci sia un ora più vecchia di 30 min. in questo modo è piuttosto sicuro che non possano bombardarti senza cookie etc

  8. #8
    Guest

    Predefinito

    non so come si fa il punto è quello

  9. #9
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Dovresti dare qualche informazione di più, è una funzione che va inserita in un cms preconfezionato (se si quale?) o è un form a parte e quindi è modificabile come ti pare?

  10. #10
    Guest

    Predefinito

    è un form che posso modificarlo come mi pare

  11. #11
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Seguiamo la strada del database che è la più facile.
    Il database lo hai già, devi utilizzare phpmyadmin per creare una tabella che chiameremo "controllo" (chiamala come vuoi ).
    La tabella deve avere almeno un campo che contiene l'ip dell'utente (puoi fare un char o un varchar ricordando per la lunghezza che un indirizzo ip è al massimo di 15 caratteri IPv4), e un campo per la data e l'ora.
    Utilizzerei microtime() così è più facile conteggiare il tempo in più o in meno.
    Quando un utente cerca di inviare un messaggio apri una connessione con il database cerchi se esiste una riga che contiene il suo indirizzo ip e un microtime passato da meno di mezzora, se la trovi restituisci un errore in caso contrario invii il messaggio.
    Ti consiglio in fondo al tuo script di inserire una query che ricerchi ed elimini tutti i record nella tabella "Controllo" con un microtime passato da più di mezzora in questo modo eviti che si accumulino dati spazzatura.

    Per il codice da scrivere ti rimanda alla documentazione ufficiale di php che è con corredata da esempi pratici non dovresi avere problemi a capirla.
    Ricorda sempre di controllare i dati che ricevi dai form per evitare caratteri nocivi, questo sopratutto se decidi di archiviare dati nel database.

    Questa è una soluzione ce ne sono altre migliori ma questa mi è sembrata la più facile se hai problemi con il codice postalo :D

  12. #12
    Guest

    Predefinito

    scusa ma non ho capito molto bene lo uso da poco phpmyadmin potresti scriverlo tu qui? :( grazie mille se lo fai

    Codice PHP:
    <?php
    require_once('commentanything/config.inc.php');
    require_once(
    'commentanything/funcs.inc.php');


    //get comments from database
    $comments = $db->query("SELECT * FROM em_comments WHERE object_id = ".$db->quote($object_id)." ORDER BY id")->fetchAll();


    // -- form output ------------------------------------------------
    $total = count($comments);
    $counter = 1;
    $html = '<div id="emContent">';
    if(
    $total > $CCOUNT){
    $html .= '<div class="emShowAllComments" id="emShowAllComments"><a href="javascript:viewAllComments();">'.$lang['view'].' <span id="total_em_comments">'.$total.'</span> '.$lang['view2'].'</a> <noscript><em>This page needs JavaScript to display all comments</em></noscript></div>';
    }
    foreach(
    $comments as $comment){
    if(
    $comment['sender_name']){
    if(
    $comment['sender_mail']){
    $comment['sender_name'] = jsEncode($comment['sender_mail'], $comment['sender_name']);
    }
    $sender = '<span class="emSenderName">'.$comment['sender_name'].'</span>: ';
    }else{
    $sender = '';
    }

    $html .= '<div class="emComment" id="comment_'.$comment['id'].'" '.($counter < ($total - ($CCOUNT - 1))?'style="display:none"':'').'>
    <div class="emCommentImage">
    <img src="http://www.gravatar.com/avatar/'
    .gravatar($comment['sender_mail'], false).'" width="32" height="32" alt="Gravatar" />
    </div>
    <div class="emCommentText">
    '
    .$sender.stripslashes($comment['comment_text']).'
    </div>
    <div class="emCommentInto">
    '
    .strftime($DATEFORMAT,strtotime($comment['created'])).'
    </div>
    </div>'
    ;
    $counter++;
    }
    $html .= '</div>';

    $html .= '<div id="emAddComment">
    <form method="post" action="commentanything/php/addComment.php" onsubmit="return false;">
    <span '
    .($SHOWNAME?'':'').' id="emNameSpan">
    <label for="addEmName">'
    .$lang['name'].':</label>
    <input type="text" placeholder="'
    .$lang['enterName'].'" id="addEmName" name="sender_name" />
    </span>

    <span '
    .($SHOWMAIL?'':'').' id="emMailSpan">
    <label for="addEmMail">'
    .$lang['mail'].':</label>
    <input type="text" placeholder="'
    .$lang['enterMail'].'" id="addEmMail" name="sender_mail" />
    </span>

    <textarea placeholder="'
    .$lang['enterComment'].'" id="addEmComment" name="comment"></textarea>

    <input type="text" name="email" value="" id="addEmPot" />
    <input type="hidden" name="object_id" value="'
    .$object_id.'" />

    <span class="emButton">
    <input type="submit" class="emButton" id="emAddButton" value="'
    .$lang['comment'].'" onclick="addEMComment(\''.$object_id.'\')" />
    </span>
    </form>
    </div>'
    ;

    //send reply to client
    echo '<div id="emComments" object="'.$object_id.'" class="ignorejsloader">'.$html.'</div>';
    ?>




    <?php
    /***
    * Encode MailAddresses against Spam Bots
    ***/
    function jsEncode($address, $text){
    preg_match('!^(.*)(\?.*)$!',$address,$match);
    if(!empty(
    $match[2])) {
    $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
    return;
    }
    $address_encode = '';
    for (
    $x=0; $x < strlen($address); $x++) {
    if(
    preg_match('!\w!',$address[$x])) {
    $address_encode .= '%' . bin2hex($address[$x]);
    } else {
    $address_encode .= $address[$x];
    }
    }
    $text_encode = '';
    for (
    $x=0; $x < strlen($text); $x++) {
    $text_encode .= '&#x' . bin2hex($text[$x]).';';
    }

    $mailto = "mailto:";
    return
    '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
    }

    /***
    * Get rid of all HTML in the input
    ***/
    function cleanInput($str){
    return
    nl2br(htmlspecialchars(strip_tags(trim(urldecode($str)))));
    }

    /***
    * Prepare a Gravatar String
    ***/
    function gravatar($email, $absolute=true){
    if(
    $absolute){
    $dir = str_replace('/commentanything/ajax/loadComments.php','/',$_SERVER['REQUEST_URI']);
    $dir = str_replace('/commentanything/ajax/addComment.php','/',$dir);
    return
    md5( strtolower( trim( $email ) ) ).'?s=32&d='.urlencode('http://'.$_SERVER['HTTP_HOST'].$dir.'commentanything/css/images/default.gif');
    }

    $dirs = explode('/',$_SERVER['REQUEST_URI']);
    array_pop($dirs);
    $dir = implode('/',$dirs);
    return
    md5( strtolower( trim( $email ) ) ).'?s=32&d='.urlencode('http://'.$_SERVER['HTTP_HOST'].$dir.'/commentanything/css/images/default.gif');
    }
    ?>
    Ultima modifica di karl94 : 28-04-2014 alle ore 19.21.16 Motivo: formattazione del codice

  13. #13
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Allora la tabella può essere qualcosa del genere
    Codice PHP:
    CREATE TABLE 'controllo' (
    'id' int(11) NOT NULL AUTO_INCREMENT,
    'ip' varchar(20) NOT NULL,
    'ora' int(11) NOT NULL,
    PRIMARY KEY ('id')
    )
    ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    la query per il controllo
    Codice PHP:
    SELECT * FROM controllo WHERE ora < '".$microtime2."'
    $microtime sta per una funzione che restituisce solo i secondi della funzione microtime() (inutile controllare i centesimi di secondo) in particolare solo la parte evidenziata del risultato tipico di una microtime()
    0.21706100 1398703860
    $microtime2 è $microtime +30min (in secondi)

    Questa la query per aggiungere quando un utente ti invia un email
    Codice PHP:
    INSERT INTO controllo (ip, ora) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$microtime."')
    Questa la query per ripulire dai dati vecchi
    Codice PHP:
    DELETE FROM controllo WHERE ora < '".$microtime2)."'
    Questa la puoi usare per ottenere i secondi da microtime
    Codice PHP:
    function microtime_s()
    {
    list(
    $usec, $sec) = explode(" ", microtime());
    return ((float)
    $sec);
    }
    Spero sia corretto (sia come codice che logicamente) non ho avuto modo di testarlo

  14. #14
    Guest

    Predefinito

    mi da questo errore #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''controllo' ( 'id' int(11) NOT NULL AUTO_INCREMENT, 'ip' varchar(20) NOT NUL' at line 1.
    tutte le query dove devo metterla di preciso, vicino dove si commenta?

  15. #15
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Scusa non ci sono tutti gli apici nel comando SQL per creare la tabella.

    Le query le metti nello script che processa l'invio dell'email, il controllo all'invio, l'aggiunta della riga dopo l'invio e l'ultima query in fondo al file.

    Se prima hai scritto il codice che prende i dati dal form li elabora e ti invia l'email non avrai problemi ora a inserire tre query.

  16. #16
    Guest

    Predefinito

    ahh okei ma tutto nello stesso script php devo inserire questi codici?

  17. #17
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    bhè si direi di si sono però stai attento che se la query che verifica se l'utente ha già scritto restituisce un ip coincidente con il suo devi escludere tutto il resto del codice e dare subito un errore.
    Tra le altre cose ho visto che puoi più semplicemente modificare la query di controllo includendo direttamente nel WHERE anche il controllo dell'ip WHERE ip LIKE .. AND ..

  18. #18
    Guest

    Predefinito

    grazie mille poi lo sistemerò piano piano. posso chiederti un'altra cosa riguardo al database?

  19. #19
    L'avatar di naviland
    naviland non è connesso Utente
    Data registrazione
    31-12-2009
    Messaggi
    128

    Predefinito

    Il forum serve a chiedere no? :D Se posso rispondere sono felice

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •