• Bannato User Attivo

    lettura database di testo

    Vorrei leggere questo tipo di database

    file.dat

    marco</>[email protected]</>www.marco.it</>523;
    luca</>[email protected]</>www.luca.it</>652;
    andrea</>[email protected]</i>www.andrea.it</i>689;

    file.def

    Username</>e-mail</>website</>topic

    dove il file .dat contiene il database e il .def contiene le definizioni per ogni utente

    come si può vedere ogni riga di utente è divisa da un punto e virgola e accapo.... (si può anche togliere il punto e virgola)

    ora la cosa che mi chiedo è come faccio a visualizzare per esempio il profilo di andrea?

    quindi per esempio la query di ottenere l'e-mail di andrea?

    grazie a chi cercherà di aiutarmi 🙂


  • User Attivo

    Più o meno così:

    
    $righe = file("file.def");
    $nomeCampi = explode("</>", $righe[0]);
    $righe2 = file("file.dat");
    foreach ($righe2 as $riga)
      {
      $valCampi = explode("</>", $righe[0]);
      foreach ($valCampi as $key => $campo)
        echo "Campo " . $nomeCampi[$key] . " = $campo<br />\n";
      }
    
    

  • Bannato User Attivo

    Ottengo questo

    Campo Username = Username
    Campo e-mail = e-mail
    Campo website = website
    Campo topic = topic
    Campo Username = Username
    Campo e-mail = e-mail
    Campo website = website
    Campo topic = topic
    Campo Username = Username
    Campo e-mail = e-mail
    Campo website = website
    Campo topic = topic
    è un errore nella query.... :mmm: ?

    con questa correzione:

    <?
    $riga = "andrea";
    $righe = file("file.def");
    $nomeCampi = explode("</>", $righe[0]);
    $righe2 = file("file.dat");
    foreach ($righe2 as $riga)
    {
    $valCampi = explode("</>", $righe2[0]);
    foreach ($valCampi as $key => $campo)
    echo "Campo " . $nomeCampi[$key] . " = $campo<br />\n";
    }
    ?>
    mi viene invece mostrato:

    Campo Username = marco
    Campo e-mail = [EMAIL="[email protected]"][email protected][/EMAIL]
    Campo website = www.marco.it
    Campo topic = 523
    Campo Username = marco
    Campo e-mail = [EMAIL="[email protected]"][email protected][/EMAIL]
    Campo website = www.marco.it
    Campo topic = 523
    Campo Username = marco
    Campo e-mail = [EMAIL="[email protected]"][email protected][/EMAIL]
    Campo website = www.marco.it
    Campo topic = 523

    basta poi quindi mettere una variabile a $righe2[$variabile];

    dove $variabile è presa da pagina.php?variabile=1 , cosi facendo 1 va a leggere il secondo record quindi luca

    l'unico problema è..... cosi visualizza per varie volte lo stesso risultato...ma se io volessi visualizzarlo una sola volta, ma soprattutto solo un unico valore...quindi per esempio solo l'e-mail?


  • User Attivo

    In realtà questa riga era sbagliata:

    $valCampi = explode("</>", $righe2[0]);

    Ma

    $valCampi = explode("</>", $riga);


  • Bannato User Attivo

    @Senamion said:

    In realtà questa riga era sbagliata:

    $valCampi = explode("</>", $righe2[0]);

    Ma

    $valCampi = explode("</>", $riga);

    capito ma il problema resta sempre lo stesso

    Campo Username = marco
    Campo e-mail = [email][email protected][/email]
    Campo website = www.marco.it
    Campo topic = 523
    Campo Username = luca
    Campo e-mail = [email][email protected][/email]
    Campo website = www.luca.it
    Campo topic = 652
    Campo Username = andrea
    Campo e-mail = [email][email protected][/email]689

    perchè tutti questi campi? a me interessa solo l'e-mail di luca per esempio..... :mmm:


  • User Attivo

    Nell'esempio che ti ho fatto fa il ciclo su tutti.
    Se vuoi aggiungere un test puoi farlo dentro il foreach:

    
    foreach ($righe2 as $riga)
      {
      $valCampi = explode("</>", **$riga**);
      if ($valCampi[0] == "luca")
        {
        foreach ($valCampi as $key => $campo)
          echo "Campo " . $nomeCampi[$key] . " = $campo<br />\n";
        }
      }
    
    

    Però è evidente che quando dici "solo luca per esempio" vuol dire che dietro ci dev'essere un'applicativo, dipende cosa vuoi fare, il mio esempio ti ha permesso di leggere i dati dal file ed associarli alle opportune definizioni.


  • Bannato User Attivo

    Però è evidente che quando dici "solo luca per esempio" vuol dire che dietro ci dev'essere un'applicativo, dipende cosa vuoi fare, il mio esempio ti ha permesso di leggere i dati dal file ed associarli alle opportune definizioni. __________________

    quello che volevo fare è visualizzare il campo e-mail di luca e non tutti i campi...ma solo un unico campo.....

    forze è colpa del foreach che ripete tutti i campi definizioni per tutti i campi dati?

    come faccio?


  • Bannato User Attivo

    @alessiofbt said:

    quello che volevo fare è visualizzare il campo e-mail di luca e non tutti i campi...ma solo un unico campo.....

    forze è colpa del foreach che ripete tutti i campi definizioni per tutti i campi dati?

    come faccio?

    poi ho comunque risolto cosi:

    [PHP]$record = file("db.def");
    $record2 = file("db.dat");
    foreach ($record2 as $riga)
    {
    $nomeCampi = explode("<~>", $record[0]);
    $campo = explode("<~>", $riga);
    if ($campo[0] == "nome2")
    {
    //echo "$campo[0]<br>";
    echo "$campo[1] (dato di luca)";
    }
    }[/PHP]

    ora ho però un problema...ho scoperto di non poter fare if all'interno di queste righe:

    if ($campo[0] == "nome2")
    {
    cioè per esempio non posso inserire constanti riguardanti il dato $campo[1] che vado ad ottenere.... ma perchè??? :mmm:
    }
    }


  • Bannato User Attivo

    @alessiofbt said:

    ora ho però un problema...ho scoperto di non poter fare if all'interno di queste righe:

    if ($campo[0] == "nome2")
    {
    cioè per esempio non posso inserire constanti riguardanti il dato $campo[1] che vado ad ottenere.... ma perchè??? :mmm:
    }
    }
    :bho:


  • User

    spiegati meglio cosa non ti funziona?