[PHP] Probleem met de eregi() functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik gebruik momenteel de volgende code. Maar dit wil ik eigenlijk niet.

PHP:
1
2
3
4
5
6
7
8
9
10
11
foreach ($xml->movielist->movie as $movie) {        
    
    if (!eregi("^".$_GET['letter'], $movie->titlefirstletter->sortname))        
        continue; 
    if (!eregi("^".$_GET['keyword'], $movie->title))
        continue; 
    if (!eregi("^".$_GET['year'], $movie->releasedate->date))
        continue; 
    
    array_push($movielist,$movie->title."");
}


Je ziet nu dat ik bij mij eregi() het dakje (^) heb moeten gebruiken. Maar ik wil juist dat hij over de gehele tekst zoekt. Dus dan zou ik eigenlijk de volgende code moeten gebruiken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
foreach ($xml->movielist->movie as $movie) {        
    
    if (!eregi($_GET['letter'], $movie->titlefirstletter->sortname))        
        continue; 
    if (!eregi($_GET['keyword'], $movie->title))
        continue; 
    if (!eregi($_GET['year'], $movie->releasedate->date))
        continue; 
    
    array_push($movielist,$movie->title."");
}


Dus zonder de dakjes. Alleen dan werkt hij vreemd genoeg helemaal niet. Ik wed dat het een domme fout zal zijn, maar ik heb me eigen ondertussen scheel staan te kijken.

(Ja, bij het echte php bestand staat nog veel meer code. Maar ik verwacht niet dat de fout daarin zit. Voor de zekerheid heb ik hieronder alsnog de gehele code voor je:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<html>
<head>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Movie Catalog</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<link href="style.css" rel="stylesheet" type="text/css" />
<?php
echo "Movie Catalog<br><br>";
//======================================Load XML files================================================
$file = 'database.xml';                                                                             
if (file_exists($file)) {                                                                           
    $xml = simplexml_load_file($file);                                                              
} else {                                                                                            
    exit('Failed to open '.$file.'.');                                                              
}                                                                                                   


$totalmovielist = array();
foreach ($xml->movielist->movie as $movie) {
    array_push($totalmovielist,$movie->title."");
}
$idmovielist = array();
foreach ($xml->movielist->movie as $movie) {
    array_push($idmovielist,$movie->id."");
}

//for($i=0;$i<=count($totalmovielist);$i++) {
//   echo $idmovielist[$i]." - ".$totalmovielist[$i]."<br />";
//}


//======================================Search form===================================================
echo "<form id=\"form1\" name=\"form1\" method=\"post\" action=\"search_action.php\">";             
echo "<select size=\"1\" style=\"font-family:'Verdana'; font-size:10px;\" name=\"letter\">";        
echo "<option value=\"\">Geen letter selecteren</option>";      
echo "<option value=\"0-9\">0-9</option>";                                      
echo "<option value=\"A\">A</option>";                                                              
echo "<option value=\"B\">B</option>";                                                              
echo "<option value=\"C\">C</option>";                                                              
echo "<option value=\"D\">D</option>";                                                              
echo "<option value=\"E\">E</option>";                                                              
echo "<option value=\"F\">F</option>";                                                              
echo "<option value=\"G\">G</option>";                                                              
echo "<option value=\"H\">H</option>";                                                              
echo "<option value=\"I\">I</option>";                                                              
echo "<option value=\"J\">J</option>";                                                              
echo "<option value=\"K\">K</option>";                                                              
echo "<option value=\"L\">L</option>";                                                              
echo "<option value=\"M\">M</option>";                                                              
echo "<option value=\"N\">N</option>";                                                              
echo "<option value=\"O\">O</option>";                                                              
echo "<option value=\"P\">P</option>";                                                              
echo "<option value=\"Q\">Q</option>";                                                              
echo "<option value=\"R\">R</option>";                                                              
echo "<option value=\"S\">S</option>";                                                              
echo "<option value=\"T\">T</option>";                                                              
echo "<option value=\"U\">U</option>";                                                              
echo "<option value=\"V\">V</option>";                                                              
echo "<option value=\"W\">W</option>";                                                              
echo "<option value=\"X\">X</option>";                                                              
echo "<option value=\"Y\">Y</option>";                                                              
echo "<option value=\"Z\">Z</option>";                                                                                                                                                                  //
echo "</select>";                                                                                   
echo "<br \><br \>";                                                                                        
echo "<select size=\"1\" style=\"font-family:'Verdana'; font-size:10px;\" name=\"year\">";          
echo "<option value=\"\">Geen jaartal selecteren</option>";                                         
for ($a = 2007; $a >= 1950; $a--){                                                                  
    echo "<option value=\"".$a."\">".$a."</option>";                                                
}                                                                                                   
echo "</select>";                                                                                   
echo "<br \><br \>";
echo"<label>Search <input name=\"keyword\" type=\"text\" id=\"keyword\" value=\"\" size=\"61\" />"; 
echo"<input type=\"submit\" name=\"button\" id=\"button\" value=\"Zoeken\" /></label>";             
echo"</form>";                      

if (isset($_GET["keyword"])) {
    if ($_GET["keyword"] != "") {
        echo "U heeft gezocht op: <i>".$_GET["keyword"]."</i>";
        echo "<br \><br \>";
    }
}
//======================================Filmtitel lijst weergeven=====================================
echo "<form>";                                                                                      
echo "<select class=\"movielist\" size=\"25\" style=\"font-family:'Verdana'; font-size:10px;\" name=\"movielist\">";    
$movielist = array();                                                                                                                                                       
foreach ($xml->movielist->movie as $movie) {        
    
    if (!eregi($_GET['letter'], $movie->titlefirstletter->sortname))        
        continue; 
    if (!eregi($_GET['keyword'], $movie->title))
        continue; 
    if (!eregi($_GET['year'], $movie->releasedate->date))
        continue; 
    
    array_push($movielist,$movie->title."");
}
sort($movielist);                               
foreach($movielist as $key =>$value) {
    $value_slash = $value;
    echo "<option onclick=\"window.location='".$_SERVER['PHP_SELF']."?movieid=".addslashes($value_slash)."'\">".$value."</option>";
}
echo "</select>";
echo "<br \><br \>";
echo "</form>";
echo "Gevonden resultaten: ".count($movielist);                                                 
echo "<br \><br \>";
echo "Totaal aantal films in de database: ".count($totalmovielist);
echo "<br \><br \>";
//====================================================================================================
include('inc.show.php'); 
?>
</body>
</html>

Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Moet je dan niet strpos() gebruiken?

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
foreach ($xml->movielist->movie as $movie) {        
    
    if (strpos($_GET['letter'], $movie->titlefirstletter->sortname) !== FALSE || strpos($_GET['keyword'], $movie->title) !== FALSE || strpos($_GET['year'], $movie->releasedate->date) !== FALSE)
    {
           continue; 
    }
    
    array_push($movielist,$movie->title);
}
?>


En als je dan wilt kijken of het aan het begin van de string staat vergelijk je het met 0, in plaats van FALSE.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik neem aan dat het zoeken over het gehele veld alleen geld voor het keyword? Waarom haal je dan ook het dakje bij letter weg?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@l0c4lh0st: Heb het ook met strpos() geprobeerd, maar die wilde helemaal niets doen :(

@Janoz: Klopt, bij de letter zou wel mogen blijven staan. Echter bij de year moet hij wel staan. In het XML bestand staan namelijk 2 notaties. Zowel "2004" als "23-05-2004" wordt gebruikt. Dus als ik qua jaartal door het geheel laat zoeken, dan vind hij ze beide.

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
XML-bestand? Heh wat? XPath/XQuery? ;)