Visualizzazione risultati 1 fino 24 di 24

Discussione: Problema con script [Explode]

  1. #1
    Guest

    Predefinito Problema con script [Explode]

    ciao a tt, volevo chiedere aiuto a voi per uno mio script. Visto che uso sempre xml ho pensato che forse un search non fosse male! Allora ho fatto:
    Codice PHP:
    if(isset($_GET['key']) != NULL) {
    $concosa = $_GET['key'];
    $xml = simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $news) {
    $valore = explode(" ", $news['contenuto']);
    foreach(
    $valore as $line) {
    if(
    $line == $concosa) {
    echo
    $line;
    }
    }
    }
    }
    Ovviamente non funziona. Attenzione, ho notato che simplexml_load_file() non è una funzione molto usata su av da voi, però non questo è un errore causato dall'explode o dall'ultimo if..come posso fare ? grazie a priori..ciaooo

  2. #2
    Guest

    Predefinito

    Assicurati del contenuto di $news['contenuto']


    Ciaooo!!!!!

  3. #3
    Guest

    Predefinito

    Mi sn dimenticato di postarlo, , eccolo:
    Codice:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xml>
    <news title="Titolo" fonte="http://fonte.org/?id=39347 " data="25/09/2007" ora="15:48:37" author="NetSkin" contenuto="Contents here, thanks -_-" />
    <news title="ciaooo" fonte=" " data="25/09/2007" ora="15:54:39" author="NetSkin" contenuto="\&amp;quot; \' " />
    <news title="" fonte=" " data="26/09/2007" ora="19:36:50" author="NetSkin" contenuto="" />
    </xml>
    scrivendo nel $_GET['key'] un valore , here , dovrebbe scriverlo, ma niente, rimane bianco senza alcun errore

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

    Predefinito

    sicuro che $news contenga quello che deve contenere? piazzaci una print_f e guarda cosa ti dice, per ogni iterazione.

    riguardo all' "errore causato dall'explode", ricorda sempre che al 99,999% gli errori li causi tu, non le funzioni predefinite, usandole male o passandogli parametri sbagliati

  5. #5
    Guest

    Predefinito

    Non hai capito, prova a scrivere echo$news['contenuto']; nel file php, dopo il primo foreach.

    Se è correttamente valorizzata, prova a stampare tutte le variabili.


    Ciaooo!!!!!

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    sicuro che $news contenga quello che deve contenere? piazzaci una print_f e guarda cosa ti dice, per ogni iterazione.

    riguardo all' "errore causato dall'explode", ricorda sempre che al 99,999% gli errori li causi tu, non le funzioni predefinite, usandole male o passandogli parametri sbagliati
    c'è sempre un 0,001% giusto !? Ora post il risultato asp..

    Codice HTML:
    News['contenuto'] è uguale a:
    Contents here, thanks -_-
    
    valore è uguale a:
    Array
    
    News['contenuto'] è uguale a:
    \" \' 
    
    valore è uguale a:
    Array
    
    News['contenuto'] è uguale a:
    
    
    valore è uguale a:
    Array
    XD ho scritto:
    Codice PHP:
    if(isset($_GET['key']) != NULL) {
    $concosa = $_GET['key'];
    $xml = simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $news) {
    echo
    "News['contenuto'] è uguale a:<br />".$news['contenuto']."<br /><br />";
    $valore = explode(" ", $news['contenuto']);
    echo
    "valore è uguale a:<br />".$valore."<br /><br />";
    foreach(
    $valore as $line) {
    if(
    $line == $concosa) {
    echo
    $line;
    }
    }
    }
    }
    ...la funzione print_f in locale nn esiste XD ho fatto così..ciaooo
    EDIT: il problema da come noto nell'out-put è nel $valore, ossia nell'explode (come ha detto dreadnaut) l'ho utilizzata male, anche xkè nn ne ho mai avuto il bisogna, quindi non ci ho dimestichezza!
    Ultima modifica di NetSkin : 27-09-2007 alle ore 19.45.24

  7. #7
    Ospite Guest

    Predefinito

    ..la funzione print_f in locale nn esiste XD
    Il problema non è che non esiste in locale, è che non è proprio implementata in php! :D
    Probabilmente dreadnaut intendeva print_r().

    EDIT: il problema da come noto nell'out-put è nel $valore, ossia nell'explode (come ha detto dreadnaut) l'ho utilizzata male, anche xkè nn ne ho mai avuto il bisogna, quindi non ci ho dimestichezza!
    Non credo sia quello l'errore.
    La funzione explode() la utilizzi correttamente.

    Devo dire che anche io ho avuto problemi che non sono riuscito a spiegare con scripts molto simili a questo, anche con l'uso di funzioni diverse da explode().

    Risolvi in questo modo:
    Codice PHP:
    <?if(isset($_GET['key']) != NULL) {
    $concosa = $_GET['key'];
    $xml = simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $news) {
    $valore = explode(" ", $news['contenuto']);
    foreach(
    $valore as $line){
    $r[]= $line;
    }
    }
    if(
    in_array($concosa,$r)){
    echo
    $concosa;
    }
    }
    ?>

  8. #8
    Guest

    Predefinito

    EDIT: funge , ma ho un dubbio, come potrei fare per far visualizzare anche più ricerche ? cioè se ho due news che hanno entrambi la parola: computer ed io immetto come parola computer lo script mi visualizza il primo che trova, posso farne visualizzare anche di più? poi magari implemento le pagine 1 - 2 - 3 , ma quello me lo vedo io, mi servirebbe più che altro una dritta per poter visualizzare più risultati, grazie ancora per l'aiuto, ciaoo
    Ultima modifica di NetSkin : 27-09-2007 alle ore 21.42.45

  9. #9
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Spero di aver capito:
    Codice PHP:
    <?php
    if (isset($_GET['key'])!=NULL) {
    $concosa=$_GET['key'];
    $xml=simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $news) {
    $valore=explode(" ",$news['contenuto']);
    if (
    in_array($concosa,$valore))
    echo
    implode(" ",$valore);
    }
    }
    ?>
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  10. #10
    Guest

    Predefinito

    thx 1000! funziona come dovrebbe, però non riesco proprio ad implementarlo qui: (ho cambiato quel codice..)
    Codice PHP:
    if(isset($_GET['key']) != NULL) {
    $concosa = strtolower(ltrim(rtrim($_GET['key'])));
    echo
    "<h2 id=\"welcome\">SEARCH</h2><br />
    Per la parola chiave: <strong style=\"color:#FF0000;\">"
    .$concosa."</strong>";
    $xml = simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $news) {
    $valore = explode(" ", $news['contenuto']);
    $val_ore = explode(" ", $news['title']);
    foreach(
    $valore as $line) {
    $r[]= strtolower($line);
    }
    foreach(
    $val_ore as $mine) {
    $z[]= strtolower($mine);
    }
    }
    if(
    in_array($concosa,$r)) {
    echo
    " &egrave; stata trovata la seguente corrispondenza: <br /><br />";
    echo
    "<h3 style=\"color:#FF0000;\">".$xml->news['title']."</h3>";
    echo
    "<br />";
    if(
    $xml->news['fonte'] != NULL) {
    echo
    "Fonte: ".$xml->news['fonte']."<br />";
    }
    echo
    "Scritto da <strong>".$xml->news['author']."</strong> il ".$xml->news['data']." alle

    "
    .$xml->news['ora']."<br /><br />";
    $evidenziato = str_replace($concosa,"<strong

    style=\"color:#FF0000;\">"
    .$concosa."</strong>",$xml->news['contenuto']);
    echo
    $evidenziato."<br />&nbsp;";
    } elseif(
    in_array($concosa,$z)) {
    echo
    " &egrave; stata trovata la seguente corrispondenza: <br /><br />";
    echo
    "<h3 style=\"color:#FF0000;\">".$xml->news['title']."</h3>";
    echo
    "<br />";
    if(
    $xml->news['fonte'] != NULL) {
    echo
    "Fonte: ".$xml->news['fonte']."<br />";
    }
    echo
    "Scritto da <strong>".$xml->news['author']."</strong> il ".$xml->news['data']." alle

    "
    .$xml->news['ora']."<br /><br />";
    $evidenziato = str_replace($concosa,"<strong

    style=\"color:#FF0000;\">"
    .$concosa."</strong>",$xml->news['contenuto']);
    echo
    $evidenziato."<br />&nbsp;";
    } else {
    echo
    " non sono state trovate corrispondenze, riprovare con un altro termine chiave.<br />&nbsp;";
    }
    }
    Praticamente in questo script cerco anche nel titolo, e scrivo titolo fonte autore data ora e contenuto. Però non saprei dove mettere questo impode !
    come posso fare? ciaooo

  11. #11
    Ospite Guest

    Predefinito

    Visto che ora si va su qualcosa di un'pò più complicato, suggerisco di cambiare completamente metodo:

    Codice PHP:
    <?if(isset($_GET['key']) != NULL) {
    $concosa = strtolower(ltrim(rtrim($_GET['key'])));
    echo
    "<h2 id=\"welcome\">SEARCH</h2><br />
    Per la parola chiave: <strong style=\"color:#FF0000;\">"
    .$concosa."</strong>";
    $xml = simplexml_load_file("test.xml");

    foreach(
    $xml->Children() as $c){
    $titoli[]=$c['title'];
    $contenuti[]=$c['contenuto'];
    $date[]=$c['data'];
    $ore[]=$c['ora'];
    $fonti[]=$c['fonte'];
    $autori[]=$c['author'];
    }
    }

    for(
    $i=0;$i<count($titoli);$i++){
    if(
    $titoli[$i]==$concosa || $contenuti[$i]==$concosa){
    $trovati[]=$i;
    }
    }
    if(
    count($trovati)==0){
    echo
    " non sono state trovate corrispondenze, riprovare con un altro termine chiave.<br />&nbsp;";
    }
    else{
    echo
    " sono state trovate le seguenti corrispondenze: <br /><br />";
    foreach(
    $trovati as $r){

    echo
    "<h3 style=\"color:#FF0000;\">".$titoli[$r]."</h3>";
    echo
    "<br />";
    if(
    $fonti[$r] != NULL) {
    echo
    "Fonte: ".$fonti[$r]."<br />";
    }
    echo
    "Scritto da <strong>".$autori[$r]."</strong> il ".$date[$r]." alle ". $ore[$r]."

    "
    .$ore[$r]."<br /><br />";
    }
    }

    ?>
    Visto quant'è più semplice così? :D

  12. #12
    Guest

    Predefinito

    Codice PHP:
    if(isset($_GET['key']) != NULL) {
    $concosa = stripslashes(strtolower(ltrim(rtrim(htmlspecialchars($_GET['key'])))));
    echo
    "<h2 id=\"welcome\">SEARCH</h2><br /> Per la parola chiave: <strong style=\"color:#FF0000;\">".$concosa."</strong>";
    $xml = simplexml_load_file("data/news.xml");
    foreach(
    $xml->Children() as $c) {
    $titoli[]=$c['title'];
    $contenuti[]=$c['contenuto'];
    $date[]=$c['data'];
    $ore[]=$c['ora'];
    $fonti[]=$c['fonte'];
    $autori[]=$c['author'];
    }
    }

    for(
    $i=0;$i<count($titoli);$i++){
    if(
    $titoli[$i]==$concosa || $contenuti[$i]==$concosa){
    $trovati[]=$i;
    }
    }
    if(
    count($trovati)==0){
    echo
    " non sono state trovate corrispondenze, riprovare con un altro termine chiave.<br />&nbsp;";
    } else{
    echo
    " sono state trovate le seguenti corrispondenze: <br /><br />";
    foreach(
    $trovati as $r){

    echo
    "<h3 style=\"color:#FF0000;\">".$titoli[$r]."</h3>";
    echo
    "<br />";
    if(
    $fonti[$r] != NULL) {
    echo
    "Fonte: ".$fonti[$r]."<br />";
    }
    echo
    "Scritto da <strong>".$autori[$r]."</strong> il ".$date[$r]." alle ". $ore[$r]."

    "
    .$ore[$r]."<br /><br />";
    }
    }
    non funge, non cerca e mi dà un errore:
    Undefined variable: trovati
    ..non esiste la variabile trovati, eppure la vedo nei cicli...dove è l'errore? (si noti che ho modificato il $concosa leggermente ma ciò non dà errori..ciaooo

  13. #13
    Ospite Guest

    Predefinito

    A me funziona perfettamente, se aggiungo key=valore alla querystring.
    Le notifiche che riporti vengono mostrate perchè forse non hai impostato un valore a $key.
    Se comunque non vuoi mostrarli nemmeno nel caso la variabile non sia impostata puoi nasconderli aggiungendo
    Codice PHP:
    error_reporting(E_ALL ^ E_NOTICE);
    all'inizio del codice.

  14. #14
    Guest

    Predefinito

    il problema è che levando l'errore mi dice nessuna corrispondenza trovata, usando il vecchio invece si. Il valore al get key l'ho inserito, ciaooo e grazie per l'aiuto :)

  15. #15
    Ospite Guest

    Predefinito

    Prova a sostituire:
    Codice PHP:
    $autori[]=$c['author'];
    }
    }
    con
    Codice PHP:
    $autori[]=$c['author'];
    }
    e ad aggiungere una graffa di chiusura alla fine dello script.

  16. #16
    Guest

    Predefinito

    niente, mi cerca sempre solo un file.
    Ora sennò faccio una cosa, metti il "sito_prova" dal locale sul web, in modo che capite
    quando finito il sito sarà su:
    http://netskin.altervista.org/
    la grafica è verde!ciaooo

  17. #17
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Codice PHP:
    if (isset($_GET['key'])!=NULL) {
    $concosa = strtolower(trim($_GET['key']));
    echo
    "<h2 id=\"welcome\">SEARCH</h2><br />
    Per la parola chiave: <strong style=\"color:#FF0000;\">"
    .$concosa."</strong>";
    $xml=simplexml_load_file("data/news.xml");
    $trovato=false;
    foreach(
    $xml->Children() as $news) {
    $valore=explode(" ", $news['contenuto']);
    $val_ore=explode(" ", $news['title']);
    if (
    in_array($concosa,$valore) || in_array($concosa,$val_ore)) {
    $trovato=true;
    echo
    " &egrave; stata trovata la seguente corrispondenza: <br /><br />";
    echo
    "<h3 style=\"color:#FF0000;\">".$xml->news['title']."</h3>";
    echo
    "<br />";
    if (
    $xml->news['fonte']!=NULL)
    echo
    "Fonte: ".$xml->news['fonte']."<br />";
    echo
    "Scritto da <strong>".$xml->news['author']."</strong> il ".$xml->news['data']." alle ".$xml->news['ora']."<br /><br />";
    $evidenziato = str_replace($concosa,"<strong style=\"color:#FF0000;\">".$concosa."</strong>",$xml->news['contenuto']);
    echo
    $evidenziato."<br />&nbsp;";
    }
    }
    if (!
    $trovato)
    echo
    " non sono state trovate corrispondenze, riprovare con un altro termine chiave.<br />&nbsp;";
    }
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  18. #18
    Guest

    Predefinito

    niente..
    questo è l'xml: http://netskin.altervista.org/data/news.xml
    qui provo a cercare la parola: a (che è presente in due <news ... /> ) oltre a darmi solo uno, dà, diciamo, un errore, cioè che scrive prima la news, poi è stata trovata una corrispondenza, poi di nuovo la news.
    ecco la pagina:
    http://netskin.altervista.org/?key=a

  19. #19
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    A me sembra corretto...
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  20. #20
    Guest

    Predefinito

    il codice si, ma il problema è che non effettua la ricerca tra tt i parametri news nel file xml (vedi post sopra al tuo ultimo)

  21. #21
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Come ho scritto prima, io non lo vedo come hai spiegato tu, ma mi sembra corretto.

    Per la parola chiave: a è stata trovata la seguente corrispondenza:

    Titolo

    Fonte: http://fonte.org/?id=39347
    Scritto da NetSkin il 25/09/2007 alle 15:48:37

    a a a a Contents here, thanks -_-
    è stata trovata la seguente corrispondenza:

    Titolo

    Fonte: http://fonte.org/?id=39347
    Scritto da NetSkin il 25/09/2007 alle 15:48:37

    a a a a Contents here, thanks -_-
    Bisognerebbe aggiungere solo un <br /> prima di "è stata trovata la seguente corrispondenza:".
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  22. #22
    Guest

    Predefinito

    si, ma se il news.xml è questo:
    Codice:
      <?xml version="1.0" encoding="ISO-8859-1" ?> 
    - <xml>
      <news title="Titolo" fonte="http://fonte.org/?id=39347" data="25/09/2007" ora="15:48:37" author="NetSkin" contenuto="a a a a Contents here, thanks -_-" /> 
      <news title="" fonte="" data="26/09/2007" ora="19:36:50" author="NetSkin" contenuto="a a a a ggr44" /> 
      </xml>
    perchè mi scrive due volte una news e l'altra no ? mentre quello che dicevi tu, si , non avevo capito come funzionava XD, un br e risolve , ma per questo come posso fare?

  23. #23
    Ospite Guest

    Predefinito

    Perfettamente funzionante, supera i vari tests
    Codice PHP:
    <?
    if(isset($_GET['key']) != NULL) {
    $concosa = strtolower(ltrim(rtrim($_GET['key'])));
    echo
    "<h2 id=\"welcome\">SEARCH</h2><br />
    Per la parola chiave: <strong style=\"color:#FF0000;\">"
    .$concosa."</strong>";

    $xml = simplexml_load_file("test.xml");

    foreach(
    $xml->Children() as $c){
    $titoli[]=$c['title'];
    $contenuti[]=$c['contenuto'];
    $date[]=$c['data'];
    $ore[]=$c['ora'];
    $fonti[]=$c['fonte'];
    $autori[]=$c['author'];
    }


    for(
    $i=0;$i<count($titoli);$i++){
    if(
    in_array($concosa,explode(" ",$contenuti[$i])) || in_array($concosa,explode(" ",$titoli[$i])))
    $trovati[]=$i;

    }

    if(
    count($trovati)==0)
    echo
    " non sono state trovate corrispondenze, riprovare con un altro termine chiave.<br />&nbsp;";
    else{
    echo
    " sono state trovate le seguenti corrispondenze: <br /><br />";

    foreach(
    $trovati as $r){
    $evidenziato=str_replace($concosa,"<strong style=\"color:#FF0000;\">".$concosa."</strong>",$contenuti[$r]);
    echo
    "<h3 style=\"color:#FF0000;\">".$titoli[$r]."</h3>";
    echo
    "<br />";
    if(
    $fonti[$r] != NULL) {
    echo
    "Fonte: ".$fonti[$r]."<br />";
    }
    echo
    "Scritto da <strong>".$autori[$r]."</strong> il ".$date[$r]." alle ". $ore[$r]."
    "
    .$ore[$r]."<br /><br />";
    echo
    $evidenziato."<br />&nbsp;";
    }
    }
    }
    ?>

  24. #24
    Guest

    Predefinito

    alla perfezione :D prob risolto, potete chiudere

Regole di scrittura

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