Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    stampare dati su file txt: impedire l'inserimento multiplo

    Ciao a tutti,
    ho un form che mi stampa i dati in un file di testo (nome, cognome, email).
    Non riesco a impedire all'utente l'inserimento multiplo, ovvero ripetere lo stesso nome, cognome e email.
    Questi i file (in rosso lo script in questione):

    FORM:
    Codice PHP:
    <form action="replay.php" method="post">
    <
    input type="text" name="var1">
    <
    input type="text" name="var2">
    <
    input type="text" name="var3">
    <
    input type="submit" value="Invia">
    </
    form

    SCRIPT:
    Codice PHP:
    <?
    $filelocation
    ="dati.txt";

    if (!
    file_exists($filelocation)) {
        
    $newfile fopen($filelocation,"w+");
        
    fclose($newfile);
        }
    $lines array_map('rtrim'file$filelocation ));
    for ( 
    $key 0$key count($lines); $key++ ) {
      if ( 
    $lines[$key] == ($_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . "
    "
    )) {
        
    $found 1;
      }
    }

    $_POST['var1'] = stripslashes($_POST['var1']); 
    $_POST['var2'] = stripslashes($_POST['var2']);
    $_POST['var3'] = stripslashes($_POST['var3']);
    ?>

    REPLAY:
    Codice PHP:
    <?php
    $var1
    =$_POST['var1'];
    $var2=$_POST['var2'];
    $var3=$_POST['var3'];
    if (
    $var1 == "" || (eregi("[0-9]"$var1)))
        {
        echo 
    "Attenzione! Non hai compilato il campo 'Nome'" ;
    }
    elseif (
    $var2 == "" || (eregi("[0-9]"$var2)))
        {
        echo 
    "Attenzione! Non hai compilato il campo 'Cognome'" ;
    }
    elseif (
    $var3 == "" || (!ereg(".+\@.+\..+"$var3)) || (!ereg("^[a-zA-Z0-9_@.-]+$"$var3)))
        {
        echo 
    "Attenzione! Non hai compilato il campo 'Email'" ;
    }
    else
        {
        if (
    $found==1){
            echo 
    "ATTENZIONE, HAI GIA' INSERITO QUESTI DATI!";
        }
        elseif ( 
    $f fopen($filelocation"a+") ) {
           
    fwrite($f$_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . "\n"); 
           
    fclose($f);
           echo 
    "Dati inseriti!";
        }
    }
    ?>
    :master:
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  2. #2

  3. #3
    è una lunga storia...
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  4. #4
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  5. #5
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Beh, sorvolando sul "discorso lungo" e su quanto sia sbagliato programmare cosi (se non puoi avere un db vero, usa sqlite), se ho capito qualcosa, il problema sembra ovvio.

    Tu nel file scrivi:
    Codice PHP:
    $_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . "\n"
    mentre controlli :
    Codice PHP:
    $_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . "

    Noti la differenza?

  6. #6
    ho corretto lo script...
    poi ho provato a inserire la prima riga ma, se provo a inserire gli stessi dati, mi scrive anche la seconda riga...
    ho provato anche a eliminare l'"a capo" nel controllo (\n) ma non succede niente, continua a stamparmi gli stessi dati, senza darmi l'avviso di dati già inseriti...
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  7. #7
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    ho provato anche a eliminare l'"a capo" nel controllo
    hai fatto bene, perche' quando leggi il file, fai un rtrim su ogni riga.

    Tornando al resto, secondo me il codice e' corretto. E' probabile che tu sbagli da qualche parte con una virgola in piu', o un problema con qualche apice (il controllo lo fai prima di stripslashes) o qualcosa del genere.
    Ti consiglio di fare cosi:
    1. Fai attenzione che il file di dati sia piccolo, poche righe, per non fare confusione con dati non rilevanti.
    2. Quando lo leggi, stampa ogni riga, quindi
    Codice PHP:
    for ( $key 0$key count($lines); $key++ ) { 
     
    var_dump($lines[$key]); 
    3. Stampa anche i dati POST-ati, quindi metti da qualche parte

    Codice PHP:
    $_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . "\n" 
    Poi non ti resta che paragonare quello che hai POSTato con quello che c'e' nel file, per vedere dov'e' la differenza.

  8. #8
    grazie bubi1!!!
    ho spostato gli stripslashes prima del controllo...
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  9. #9
    ma se adesso volessi impedire l'inserimento multiplo del solo campo 'email'???
    lo SCRIPT sarebbe una cosa del tipo:
    Codice PHP:
    for ( $key 0$key count($lines); $key++ ) {
      if ( 
    $lines[$key] == ($_POST['var1'] . " " $_POST['var2'] . " - " $_POST['var3'] . " - " $_POST['var4'])) {
        
    $found 1;
      }
      elseif ( 
    $lines[$key] == ($_POST['var4'])) {
        
    $found 2;
      }

    ma mi va in errore...
    :master:
    solo alla stregua di un sogno mi troverò, e non vorrò più svegliarmi...

  10. #10
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Posta il messaggio di errore, ed il codice intorno alla riga che ti viene segnalata.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.