Hallo Iedereen,

Ik gebruik dit script om voor een naam in meerdere .txt databases te zoeken.
Maar op een 1 of andere manier kijkt hij alleen in de 1e database en niet allemaal.
Dit is mijn script, heeft iemand een idee?


<div class="content"><br />
<html><body>
<a style='font-size: 110%;'>Input:</a><br /><br />
<form method='post'>
	  <input class='form-control' placeholder='Name' name='search' size='100' /><br />
	  <input type='submit' value='Search' class='btn btn-info blue' /><br />
</form>

<br />
<?php
$path_to_check = 'dbs/';
$needle = $_POST['search'];
foreach(glob($path_to_check.'*.txt') as $filename)
{
  foreach(file($filename) as $fli=>$fl)
  {
    if(strpos($fl, $needle)!==false)
    {
      echo "<div style='width:100%;'><pre>$fl</pre></div>";
    }
  }
}
?>
</html>
</body>
</div>
Thomas van den Heuvel op 08/10/2015 19:40:30

In het kader van een eenduidige opmaak en eenduidige manier van output escaping lijkt mij dat (mede in het kader van de veiligheid/beveiliging van de applicatie) toch wel heel erg wenselijk. Als je hier geen lijn in aanbrengt liggen veiligheidsrisico's (XSS enzo) op de loer.

Dat was mijn punt niet. Het ging mij er in dit geval om dat je niet moet beweren dat iets ongeldig is als het gewoon volledig valide is.

Uiteraard is het wel handig om een vaste lijn aan te houden, maar dat is vooral handig om het teruglezen (en begrijpen) van je code te vergemakkelijken. Als je het voor de veiligheid van je code moet hebben van het feit of je enkele of dubbele quotes gebruikt, ben je dertig stappen geleden al verkeerd gelopen.
Nog steeds niet opgelost :s, geen idee hoe ik dit moet doen
Ik heb de code zelf eens uitgeprobeerd, en bij mij werkt de code correct.

Waardoor krijg jij de indruk dat alleen het eerste bestand wordt verwerkt?
Willem vp op 10/10/2015 11:45:12

Ik heb de code zelf eens uitgeprobeerd, en bij mij werkt de code correct.

Waardoor krijg jij de indruk dat alleen het eerste bestand wordt verwerkt?


Als ik een lijn uit het 1e bestand zoek vind hij die wel maar een 2e bestand niet :s
> Als ik een lijn uit het 1e bestand zoek vind hij die wel maar een 2e bestand niet :s

Ja, maar is dat omdat hij het tweede bestand niet verwerkt, of omdat je een $needle hebt opgegeven die alleen in het eerste bestand is terug te vinden? ;-)

Je zou eens kunnen proberen om vóór de tweede foreach iets als echo "<pre>$filename</pre>"; te zetten om te kijken welke bestanden worden verwerkt. En desnoods zet je voor de if een echo "<pre>$fl</pre>"; om te kijken welke input wordt verwerkt. Alleen dan kun je er zeker van zijn of je script alleen in het eerste bestand zoekt.
Kijk eensnaar onderstaande code, je foutafhandeling kan je misschien verder helpen.


<?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

    if (isset($_POST['submit']))    {
        
        $error = '';
        $path_to_check = 'dbs/';
        $result = array();

        if (!is_dir($path_to_check))     {
            $error .= 'Directorie bestaat niet.<br>';
        }
    
        $needle = $_POST['search'];
        if ($needle == '')  {
            $error .= 'Geen zoekterm ingevuld.<br>';
        }
    
        if ($error == '')   {
            if ($lezer = opendir($path_to_check)) {
                while (false !== ($entry = readdir($lezer))) {
                    if ($entry != "." && $entry != ".." && !is_dir($entry)) {
                        if(strpos($entry, $needle)!= false)  {
                            $result[] = $entry;
                        }
                    }
                }
                closedir($lezer);
            }
             else echo 'Kan de directorie niet openen.<br>';
        }
        else echo $error;
    } 
    
    if (count($result) > 0)  {
        foreach ($result as $r) {
            echo $r.'<br>';
        }
        echo '<br>' 
    }
    else echo 'Geen resultaten gevonden.<br><br>'      
        
?>

<html>
    <body>
        <div class="content">
            <br>
            <a style="font-size: 110%;">Input:</a>
            <br><br>
            <form action="index.php" method="post">
                <input class="form-control" placeholder="Name" name="search" size="100" /><br>
                <input type="submit" value="Search" name="submit" id="submit" class="btn btn-info blue"><br>
            </form>
            <br>
        </div>
    </body>
</html>

Reageren