PHP DBlookup
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<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>
<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>
Gewijzigd op 08/10/2015 14:40:20 door Joni Fleischer
Joni Fleischer:
Zou je ook willen uitleggen wat voor fouten er dan in zitten?
Gewijzigd op 08/10/2015 11:54:33 door Joni Fleischer
Het documenttype ontbreekt
form wordt niet afgesloten
html wordt niet geopend
body ontbreekt
linebreaks worden afgesloten, volgens mij alleen noodzakelijk bij XML
inputs worden afgesloten, volgens mij alleen noodzakelijk bij XML
input gegevens staan tussen single quotes i.p.v. tussen dubbelquotes
geen ruimte tussen value en class
bij name ontbreken de quotes volledig
Ik denk dat ik daarmee de meeste fouten wel heb.
Overigens verwacht ik dan nog niet dat één der bovenstaande fouten er de oorzaak van is dat de gewenste gegevens niet getoond worden.
Gewijzigd op 08/10/2015 13:10:19 door Pipo Clown
Pipo Clown op 08/10/2015 13:08:40:
Overigens verwacht ik dan nog niet dat één der bovenstaande fouten er de oorzaak van is dat de gewenste gegevens niet getoond worden.
Dat andere maakt me niets uit dat fix ik zelf nog wel, het gaat erom dat de functie niet goed werkt :)
Quote:
Dat andere maakt me niets uit dat fix ik zelf nog wel, het gaat erom dat de functie niet goed werkt :)
Mogelijk, maar in dit geval niet erg waarschijnlijk, is dat de medeveroorzaker van het ongewenste gedrag.
Het heeft geen zin om je af te vragen wat er in een bepaalde setting fout gaat als je WEET dat bepaalde dingen niet kloppen. Los dit eerst op, en kijk dan of de problemen nog spelen.
Staat error_reporting wel aan?
Thomas van den Heuvel op 08/10/2015 13:55:39:
Ik denk dat ik het weet - er staat geen pad ($path_to_check) voor $filename in de file() aanroep.
>_<
>_<
Ik heb het html gedeelte gefixt, ik geloof dat dit wel goed staat? @ $path_to_check voor $filename. Hoe zou jij het anders doen? :o
Mits $path_to_check klopt - mogelijk moet je het absolute, interne bestandspad gebruiken, in plaats van simpelweg "dbs/", tenzij je het script aanroept vanaf /x/ en de tekstbestanden zich bevinden in /x/dbs/?
Pipo Clown op 08/10/2015 13:08:40:
linebreaks worden afgesloten, volgens mij alleen noodzakelijk bij XML
inputs worden afgesloten, volgens mij alleen noodzakelijk bij XML
input gegevens staan tussen single quotes i.p.v. tussen dubbelquotes
bij name ontbreken de quotes volledig
inputs worden afgesloten, volgens mij alleen noodzakelijk bij XML
input gegevens staan tussen single quotes i.p.v. tussen dubbelquotes
bij name ontbreken de quotes volledig
In het kader van "ken uw taal": je verklaart hier een paar dingen fout die helemaal niet fout zijn.
Self-closing tags zijn in HTML niet verplicht, maar wel toegestaan.
Attribute values mogen zowel tussen enkele als tussen dubbele quotes staan. Het gebruik van quotes is zelfs niet eens verplicht, tenzij de value een spatie of ander teken bevat dat verwarring kan veroorzaken voor de parser.
Quote:
Attribute values mogen zowel tussen enkele als tussen dubbele quotes staan. Het gebruik van quotes is zelfs niet eens verplicht, tenzij de value een spatie of ander teken bevat dat verwarring kan veroorzaken voor de parser.
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.
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
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?
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
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?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>
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>
Gewijzigd op 10/10/2015 13:02:41 door Pipo Clown