Visualizzazione risultati 1 fino 13 di 13

Discussione: aiuto per script profili utente

  1. #1
    Guest

    Predefinito aiuto per script profili utente

    Codice PHP:
    $visit = $_GET['utente']; $folder = "visite";
    $file_txt = "$folder/$visit.txt";
    if(isset(
    $_SESSION['nick']))
    {
    if(!
    is_writable($file_txt)){ $open = fopen($file_txt, "w") or die("il file non si apre");
    }
    $bad_char = array("|", "\r\n", "\r", "\n");
    $visita = str_replace($bad_char, "", $_SESSION['nick']);
    $open = fopen($file_txt, "a+");
    fwrite($open, $visita."|"."\r\n");
    fclose($open);
    }
    $riga = explode(" ",$file_txt);
    echo
    "<br/>ultime 5visite:";
    for(
    $i = 0; $i < count($riga); $i++){
    echo
    " <a href='profile.php?utente=$riga[$i]'>$riga[$i]</a>";
    }
    echo
    "<br/>";
    potete aiutarmi a capire dove sbaglio in questo script?? mi serve x vedere le visite nei profili utenti :(





    P.S: ok risolto :) avevo dimenticato il file_get_contents x explode :) xò ora il mio problema è un altro!! nel loop che visualizza i nickname se un utente entra due volte esce consecutivamente anche il suo nick in lista!! come faccio a far saltare questa visualizzazione nel loop :S
    Ultima modifica di Sharefiles : 17-06-2011 alle ore 22.54.04 Motivo: risolto il primo problema

  2. #2
    tiberistefano non è connesso Utente
    Data registrazione
    28-01-2011
    Messaggi
    125

    Arrow

    dovresti inserire un altro array e fare un controllo dentro al for:
    leggo se il nick esiste nel nuovo array, altrimenti lo inserisco nel nuovo array, in caso contrario lo salto
    Per leggere se esiste nel nuovo array potresti fare un for identico al primo ma che va da 1 al numero di elementi che hai inserito finora nel nuovo array

    EDIT:

    Provo a rispondere con un po' di codice (speriamo bene perche' lo sto scrivendo senza fare la prova che funzioni)
    Codice PHP:
    $visit = $_GET['utente']; $folder = "visite";
    $file_txt = "$folder/$visit.txt";
    if(isset(
    $_SESSION['nick']))
    {
    if(!
    is_writable($file_txt)){ $open = fopen($file_txt, "w") or die("il file non si apre");
    }
    $bad_char = array("|", "\r\n", "\r", "\n");
    $visita = str_replace($bad_char, "", $_SESSION['nick']);
    $open = fopen($file_txt, "a+");
    fwrite($open, $visita."|"."\r\n");
    fclose($open);
    }
    $riga = explode(" ",$file_txt);
    echo
    "<br/>ultime 5visite:";
    $apparr = array();
    $elem = 0;
    for(
    $i = 0; $i < count($riga); $i++){
    $trovato = 0;
    for(
    $j = 0; $j < $elem; $j++){
    if (
    $apparr[$j] = $riga[$i]) {
    $trovato=1;
    }
    }
    if (
    $trovato==0){
    echo
    " <a href='profile.php?utente=$riga[$i]'>$riga[$i]</a>";
    $apparr[]=$riga[$i];
    $elem++;
    }
    }
    echo
    "<br/>";
    Ultima modifica di alemoppo : 18-06-2011 alle ore 01.49.10 Motivo: Non fare doppi post. Usa il tasto Edita!

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    come faccio a far saltare questa visualizzazione nel loop :S
    Dovresti mettere un "flag" se un utente esiste già... (però non apparirà per primo); altrimenti, dovrai riscrivere tutto il file, mettendo al primo posto il nick (come ho fatto nello script qui sotto):

    Codice PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_GET['utente']))
    die(
    'parametro utente non conosciuto');
    $visit = $_GET['utente'];
    $folder = "visite";
    $file_txt = "$folder/$visit.txt";
    $visita = str_replace(array("|", "\r\n", "\r", "\n"), "", $_SESSION['nick']);
    if(
    file_exists($file_txt))
    {
    if((
    $file = file_get_contents($file_txt)) === FALSE)
    die(
    'Impossibile aprire '.$file_txt);
    $file = str_replace($visita,'',$file); //elimino eventuali visite dell'utente (per non farlo apparire più di una volta)
    }
    else
    $file = '';
    if((
    file_put_contents($file_txt, $visita."|"."\r\n".$file)) === FALSE) //NOTA: devi avere PHP5 attivo. In questo modo, salva la visita mettendola all'inizio del file (presumo sia meglio per te)
    die('impossibile aggiornare il file'.$file_txt);
    echo
    'Ultime 5 visite: ';
    $visite = file($file_txt);
    $i=0;
    foreach(
    $visite as $riga)
    if(
    $i++ < 5)
    echo
    '<a href="profile.php?utente='.$riga.'">'.$riga.'</a>';
    else
    break;
    ?>
    testato, e sembra funzionare

    Ciao!
    Ultima modifica di alemoppo : 18-06-2011 alle ore 01.42.17

  4. #4
    Guest

    Predefinito

    wow funziona bene grazie ragà ( buona st idea del "flag" :) mi hai aperto la mente x altri script :) )

    EDIT:

    Codice PHP:
    if(!isset($_GET['utente']))
    die(
    'parametro utente non conosciuto');
    $visit = $_GET['utente'];
    $folder = "visite";
    $file_txt = "$folder/$visit.txt";
    $visita = str_replace(array("|", "\r\n", "\r", "\n"), "", $_SESSION['nick']);
    if(
    file_exists($file_txt))
    {
    if((
    $file = file_get_contents($file_txt)) === FALSE)
    die(
    'Impossibile aprire '.$file_txt);
    $file = str_replace($visita,"",$file); //elimino eventuali visite dell'utente (per non farlo apparire più di una volta)
    }
    else
    $file = '';
    if((
    file_put_contents($file_txt, $visita."|"."\r\n".$file)) === FALSE) //NOTA: devi avere PHP5 attivo. In questo modo, salva la visita mettendola all'inizio del file (presumo sia meglio per te)
    die('impossibile aggiornare il file'.$file_txt);
    echo
    '<br/>Ultime 5 visite: ';
    $visite = file($file_txt);
    $i=0;
    foreach(
    $visite as $riga)
    if(
    $i++ < 5){$riga = str_replace(array("|", "\r\n", "\r", "\n"), "", $riga);
    echo
    '<a href="profile.php?utente='.$riga.'">'.$riga.'</a>';}
    else
    break;
    uff sò na frana a usare i file come database :( cmq ho fatto na piccola modifica x adattarlo ma ad ogni accesso doppio mi lascia uno spazio vuoto che non viene letto e di conseguenza i nick diversi van di una riga indietro e non escono:( come devo fare x far fare un "salto" quando si ha una visita doppia :(
    Ultima modifica di alemoppo : 18-06-2011 alle ore 15.34.00 Motivo: Niente UP!

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    prova modificando:

    Codice PHP:
    $file = str_replace($visita,"",$file);
    Con:

    Codice PHP:
    $file = str_replace($visita."|"."\r\n","",$file);
    p.s: se vuoi usare dei file di testo come database, puoi usare sqlite!

    Ciao!

  6. #6
    Guest

    Predefinito

    niente ale mi dà sempre sto spazio vuoto :( ho modificato anche il codice in questo modo ma continua a darmi sta riga vuota che mi sballa la lista
    Codice PHP:
    $file = str_replace("|"."\r\n"." ","",$file);
    è la prima volta che uso file.txt x memorizzare :( e sinceramente sto trovando davvero difficoltà ad andare avanti :(

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Riavvolgiamo Che formato ha questo file? Perche' ci scrivi dentro il nick seguito da un "|"?

    Altre cose: puoi usare la costante PHP_EOL invece di "\r\n" - che a volte ti serve solo "\n"; con quel ciclo in fondo al codice, nel primo post, stai cercando di reinventare in_array() o array_search()?

  8. #8
    Guest

    Predefinito

    ciao dreadnaut il file dove sta questo script è .php ho usato il simbolo "|" perchè inizialmente usavo explode() per ricavarne le righe poi qui come vedi è stato successivamente modificato!! va benissimo solo che quando trova una riga vuota mi scala i nomi in lista di tante posizioni quanti sono le righe vuote :( ho sempre usato mysql per memorizzare però vorrei capire anche quest altro metodo per memorizzare i dati :)
    Ultima modifica di Sharefiles : 19-06-2011 alle ore 21.58.50

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Fammi un piacere, edita il tuo post sopra togliendo le x, e rimpiazzale con quel che ci dovrebbe essere, ok?

    Nel file non ci saranno mai righe vuote, se lo riempi con quel codice; e' un non-problema. Come ho scritto sopra, evita di usare \r\n quando e' piu' sicuro aggiungere PHP_EOL. Si puo' pero' ripulire assai dai vari if contorti.

    Vedi implode(), array_slice(), array_search().

    Codice PHP:
    if(!isset($_GET['utente']))
    die(
    'parametro utente non conosciuto');

    $visit = $_GET['utente'];
    $folder = "visite";
    $file_txt = "$folder/$visit.txt";
    $nick = $_SESSION['nick'];

    // carichiamo le ultime 5 visite
    $visite = array_slice( file($file_txt), -5); // vedi guida array_slice

    // controlliamo se esiste gia', nel caso lo togliamo
    $pos = array_search($nick, $visite);
    if (
    $pos !== false)
    unset(
    $visite[$pos]);

    // aggiungiamo in fondo
    $visite[] = $nick;

    // riscriviamo il file
    file_put_contents($file_txt, implode(PHP_EOL, $visite));

    // mostriamo le visite
    echo '<p>Ultime 5 visite: ';
    $visite = array_slice($visite, -5); // accertiamoci che siano 5

    foreach($visite as &$nick) // la & perche' ci andiamo a scrivere dentro
    $nick = '<a href="profile.php?utente=' . $nick. '">' . $nick . '</a>';

    echo
    implode(', ', $visite); // mettiamo virgole fra i nomi

    echo '</p>';
    Ultima modifica di dreadnaut : 19-06-2011 alle ore 22.40.55 Motivo: fix array_search

  10. #10
    Guest

    Predefinito

    dreadnaut non va :( ho provato a fare questa modifica perche non mi dava alcun record
    Codice PHP:
    foreach($visite as &$nick) {
    $nick = '<a href="profile.php?utente=' . $nick. '">' . $riga . '</a>';

    echo
    implode(', ', $visite);
    }
    però ora ho di nuovo il problema delle righe vuote e le entrate duplicate non vengono rimpiazzate :(

    Cancella i file che hai adesso, in modo che non ci siano piu' righe vuote. Se non ce le metti a mano, non ne appariranno piu'.
    Ultima modifica di dreadnaut : 19-06-2011 alle ore 22.33.58

  11. #11
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Quel codice non e' quello scritto sopra: c'e' $nick... $nick, non $nick... $riga.

    Vero' pero', c'era un errore subdolo qua:
    Codice PHP:
    // controlliamo se esiste gia', nel caso lo togliamo
    if ($pos = array_search($nick, $visite))
    doveva essere

    Codice PHP:
    // controlliamo se esiste gia', nel caso lo togliamo
    $pos = array_search($nick, $visite);
    if (
    $pos !== false) // trovato!
    Ultima modifica di dreadnaut : 19-06-2011 alle ore 22.42.40

  12. #12
    Guest

    Predefinito

    niente da fare dreadnaut :( mi cancella anche le voci che già eran memorizzate :( cmq grazie dell aiuto proverò co mysql sto script sembrava na cosa semplice ma a quanto pare non è cosa :)

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Sinceramente, e' molto difficile capire quello che ti succede per tre motivi: non hai spiegato con precisione cosa vuoi che avvenga, non sappiamo piu' che codice tu stia guardando e cosa ci sia nei file, e non si capisce nulla di cosa non vada

    "mi cancella anche le voci che già eran memorizzate" ne tiene 5, e cancella solo quella che sta per reinserire in fondo, quindi non possono sparirtene altre; se poi non ce l'hai detto ed invece di cinque vuoi tenerle tutte, allora e' un discorso diverso, e va cambiato questo pezzo nel mio codice:

    Codice PHP:
    // carichiamo le ultime 5 visite
    $visite = array_slice( file($file_txt), -5); // vedi guida array_slice
    in

    Codice PHP:
    // carichiamo tutte le ultime visite
    $visite = file($file_txt);
    Ultima modifica di dreadnaut : 19-06-2011 alle ore 22.51.13

Regole di scrittura

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