[PHP] Filtro da TXT con collegamento ipertestuale

Metodo21

Nuovo Utente
21 Mar 2018
7
0
1
53
Ciao, ho un problema... premetto che non sono molto pratico e i codici che ho sono stati copiati da altre fonti e adattati in base alle mie esigenze
con un filtro che preleva da un file txt ho dei collegamenti ipertestuali ma non funzionano
PHP:
<?php
/*

text file search script
  
searches text file or url for user-entered string,
outputs line and location with context
*/

// set text file location here
$PATH   = 'p.txt';
// if no location is set, an input field will be used (for a url)
#$PATH   = null;


$search = filter_input(INPUT_GET,'q',FILTER_SANITIZE_STRING);
$source = filter_input(INPUT_GET,'loc',FILTER_SANITIZE_STRING);
//enforce url, no local paths
if (!empty($source)) $PATH = 'http://'.preg_replace('@^http://@','',$source);

$FILE   = fopen($PATH,'r');


$results = '';
$line_number = 0;
$TEXT = '';
if ($FILE) {
    while (!feof($FILE)) {
        $buffer = fgetss($FILE, 4096);
        ++$line_number;
        $TEXT .= "<div id=\"line_$line_number\">$buffer</div>";
        $loc = preg_match('@('.preg_quote($search).')@i',$buffer);
        if ($loc > 0) {
            $results .= print_results($buffer,$search,$line_number,'line');
        }
    }
    fclose($FILE);
}

// takes $line as input, outputs formatted search results for $str
function print_results($line,$str,$lnum=null,$class=null) {
    $style = '';
    if (null != $class) $style = " class=\"$class\"";
    $res = "<div$style><span>$lnum</span>: ".preg_replace('@('.preg_quote($str).')@i',"<b>$1</b>",$line)."</div>";
    return $res;
}

$title = 'Search '.htmlspecialchars(basename($PATH));
$searched = " for '$search'";
?>
<!doctype html>
<html>
<head>
<title><?php echo $title, $searched; ?></title>
<meta name="keywords" content="site search, search script, text index, remote search">
<meta name="description" content="Use this free PHP script to search text of files located on your web server or contents of remote web sites">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script type="text/javascript">
    $(document).ready(function() {
        $('#results div').click(function() {
            baseOffset = $('#context').offset().top;
            baseOffset = $('#context').offsetTop;
            targetLine = $(this).children().filter('span:first').text();
            targetOffset = $('#line_'+targetLine).position().top;
            $('#context').animate({scrollTop: $('#context').scrollTop() + targetOffset}, 400);
             return false;
        });
    });
</script>
<style type="text/css">
.line {
    background:#ccccff;
    border:1px dotted #6666cc;
    cursor:pointer;
}
.line span {
    font-style:italic;
    font-size:90%;
}
label:after {
    content:': ';
}
.field label {
    width:80px;
    display:inline-block;
}
.field input {
    width:400px;
}
#results,#context {
    border:1px solid #ccc;
    padding:3px;
    min-width:300px;
    width:45%;
    float:left;
    height:600px;
    overflow:auto;
    position:relative;
}
#output {
    margin:19px auto;
    width:90%;
    position:relative;
}
#ad {
    float:right;
}
</style>
</head>
<body>
<h1><?php echo $title; ?></h1>

<div id="ad">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-6842783303907583";
google_ad_slot = "4895617718";
google_ad_width = 320;
google_ad_height = 50;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>

<form action="" method="GET">
<?php if (empty($PATH) || !empty($source)): ?>
<div class="field"><label for="source">Location</label><input type="text" name="loc" id="source" class="source" value="<?php echo $source; ?>"></div>
<?php endif; ?>
<div class="field"><label for="search">Search</label><input type="text" name="q" id="search" class="search" value="<?php echo $search; ?>"></div>
<input type="submit" value="Search">
</form>
<br>
<?php if (!empty($search)) echo "<h2>Searched $searched</h2>";?>
<div id="output">
<div id="results">
<?php echo $results;?>
</div>
<div class="context" id="context">
<?php echo '<pre>'.$TEXT.'</pre>';?>
</div>
</div>
</body>
</html>

//Questo è il file txt che preleva il filtro

<a href="https://www.xxxxxx.it/">Collegamento 1</a>
<a href="https://www.xxxxxx.it/">Collegamento 2</a>
<a href="https://www.xxxxxx.it/">Collegamento 3</a>
Grazie
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.939
294
83
@Metodo21
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

Metodo21

Nuovo Utente
21 Mar 2018
7
0
1
53
Grazie 1000, come ho detto non sono pratico... molto auto didatta
grazie per la comprensione
 

macus_adi

Utente Attivo
5 Dic 2017
1.036
59
48
IT/SW
Passerei ad una soluzione un pò più compatta del tipo:
PHP:
$lines=str_getcsv(file_get_contents("file_name.ext"),"\r\n");
$output='';
for($i=0;$i<count($lines);$i++){
    echo 'Linea numero '.($i+1).' - - '.$lines[$i];
    $output .= '<div id="line_'.($i+1).'">'.$lines[$i].'</div>';
}
 

macus_adi

Utente Attivo
5 Dic 2017
1.036
59
48
IT/SW
Ho semplicemente rimpiazzato il tuo codice
$results = '';
$line_number = 0;
$TEXT = '';
if (
$FILE) {
while (!
feof($FILE)) {
$buffer = fgetss($FILE, 4096);
++
$line_number;
$TEXT .= "<div id=\"line_$line_number\">$buffer</div>";
$loc = preg_match('@('.preg_quote($search).')@i',$buffer);
if (
$loc > 0) {
$results .= print_results($buffer,$search,$line_number,'line');
}
}
fclose($FILE);
}
 

Metodo21

Nuovo Utente
21 Mar 2018
7
0
1
53
:(si questo l'avevo capito.... ma come dicevo sono molto autodidatta e ne capisco molto poco
:)potresti mettermi tutto il codice......o_O
 

macus_adi

Utente Attivo
5 Dic 2017
1.036
59
48
IT/SW
Partendo dal fatto che non so quello che devi fare, non so come hai salvato il file, etc... Il codice funziona, ma giacché a te non va qui trovi l'esecuzione del codice qui, qui invece trovi il file... Ora se metti il codice di cui sopra e il file txt nella stessa cartella potrai verificare tu stesso il risultato...
Ti invito a copiare/incollare stando attendo ai vincoli del codice.
 

Metodo21

Nuovo Utente
21 Mar 2018
7
0
1
53
Peggio... cmq quello che vuoi fare già funzionava nell'esempio "più compatto"
ma non è quello che ho chiesto io
mi serve un filtro dove preleva i dati con collegamento ipertestualeo da txt e i risultati devono essere cliccabili
Grazie cmq
Buona giornata;)
 

macus_adi

Utente Attivo
5 Dic 2017
1.036
59
48
IT/SW
mi serve un filtro dove preleva i dati con collegamento ipertestualeo da txt

PHP:
$filtro=$_POST['filtro'];
$lines=str_getcsv(file_get_contents("file_name.ext"),"\r\n");
$output='';
for($i=0;$i<count($lines);$i++){
    
if(strstr($lines[$i],$filtro))$output .= '<div id="line_'.($i+1).'">'.$lines[$i].'</div>';
}
Per i click e quant'altro devi provvedere tu a modificare lo script....