PFZ.nl - PHP Community: Zoekfunctie - PHP - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 22-02-2012 15:19
  • robbeke
  • Groep: Forumleden
  • Posts: 164
  • Actief sinds: 11-07-2011
Ik heb een zoekfunctie gemaakt, alles werkt prima maar ik zou er iets aan willen toevoegen.
Ik heb dus een zoekfunctie gemaakt dat mensen in de database opzoekt (volgens voornaam), nu is de vraag kan ik er voor zorgen dat hij ook zoekt via achternaam.

Dit is mijn code:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
<HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<link href='css/index.css' rel='stylesheet' type='text/css'>
<head>
<title></title>
</head>
<body>

<div id="top-bar"> 
  <div id="topbar-inner"> 

<?php

    session_start();
    
    if(isset($_SESSION['ingelogd'])){
        include("connect_db.php");
        
        $sql = "SELECT * FROM leden WHERE id='".$_SESSION['id']."'";
        $query = mysql_query($sql);
        $rows = mysql_fetch_assoc($query);
        
        echo "<form action='zoek.php' method='get'>";
        echo "Welkom, " . $rows['voornaam'] . " " . $rows['achternaam'];
        echo " | <input type='text' name='k' /><input type='submit' value='Zoek'>";
        echo "</form>";
        echo "<hr>";
        
?>        
</div>
</div>
<br /><br />
        <table style='border-top:0px;border-left:0px;border-bottom:0px;border-right:1px solid black;float:left;' width='100' height='250'>
        <tr valign="top">
        <ul>
        <td valign="top" height="15"><li><a href='overzicht.php'>Home</a></li></td></tr><tr>
        <td valign="top" height="15"><li><a href='berichten.php'>Berichten</a></li></td>
        <td valign="top" height="15">
        
        
        <?php    

    $sql_berichten_totaal = "SELECT * FROM berichten WHERE email_voor='".$_SESSION['email']."' AND gelezen='0'";
    $query_berichten_totaal = mysql_query($sql_berichten_totaal);
    $num_berichten_totaal = mysql_num_rows($query_berichten_totaal);
    
    echo $num_berichten_totaal;
            
    
    
        
        ?>
        
        </td>
        </tr><tr>
        <td valign="top"><li><a href='logout.php'>Logout</a></li></td>
        </ul>        
        </tr>
        </table>
        
    
    <!-- Zoek resultaat -->



    <h2>Resultaten:</h2>
         <form action='./zoek.php' method='get'>
            <input type='text' name='k' size='50' value='<?php echo $_GET['k']; ?>' />
            <input type='submit' value='Search' />
         </form>    
    <hr />
    <?php
        $k = $_GET['k'];
        $i = 0;
        $terms = explode(" ", $k);
        $query = "SELECT * FROM leden WHERE ";
        foreach ($terms as $each){
            $i++;
            
            if($i == 1){    
                $query .= "voornaam LIKE '%$each%' ";
            }
            else{
                $query .= "OR voornaam LIKE '%$each%' ";
            }
        }
        
        // Connect
        mysql_connect('localhost','root','');
        mysql_select_db("leden");
        
        $query = mysql_query($query);
        $numrows = mysql_num_rows($query);
        if ($numrows > 0){
            
            while($row = mysql_fetch_assoc($query)){
                $voornaam = $row['voornaam'];
                $achternaam = $row['achternaam'];
            
                echo "<li><a href='profiel.php?id=".$row['id']."'>" . $voornaam . " " .$achternaam . "</a></li>";
            } 
            
        }
        else{
            echo "No results found for <b>".$k."</b>";    
        }
        
        // Disconnect
        
        mysql_close();



?>
    
    <!-- Einde Zoek resultaat -->    

</body>
</HTML>

<?php
}
    else{
        header('location: index.php');
    }

?>


Bij dit gedeelte:
1
2
3
4
5
6
        if($i == 1){    
                $query .= "voornaam LIKE '%$each%' ";
            }
            else{
                $query .= "OR voornaam LIKE '%$each%' ";
            }


Moet hij ook volgens achternaam zoeken.

Alvast bedankt!

#2 22-02-2012 15:51
1
2
3
4
5
6
7
8
<?php
            if($i == 1){    
                $query .= "voornaam LIKE '%$each%' OR achternaam LIKE '%$each%' ";
            }
            else{
                $query .= "OR voornaam LIKE '%$each%' OR achternaam LIKE '%$each%' ";
            }
?>

#3 22-02-2012 16:13
  • Martin P
  • Groep: Moderators
  • Posts: 3645
  • Actief sinds: 19-04-2007
Je hoeft geen tellertje bij te houden om te bepalen of je de "OR" toe moet voegen. Let ook heel goed op SQL-injectie, want dat is hier mogelijk. Escape altijd(!) variabelen in een query.
Dus:
1
2
3
4
5
6
7
8
9
10
<?php
$terms = explode(" ", $_GET['k'] );
$query = "SELECT * FROM leden WHERE 0 ";
foreach( $terms as $each )
{
    $query .= "OR
                 voornaam  LIKE '%" . mysql_real_escape_string( $each ) . "%'
               OR
                 achternaam LIKE  '%" . mysql_real_escape_string( $each ) . "%'";
}
Handleidingen zijn er niet voor niets, gebruik ze dus :)
HTML5 ~ CSS ~ PHP ~ MySQL ~ SQL-injectie bestaat meer dan 13 jaar

#4 22-02-2012 16:17
  • robbeke
  • Groep: Forumleden
  • Posts: 164
  • Actief sinds: 11-07-2011
Bedankt, het is gelukt.
@martin Oke ik zal de mysql_real_escape_string toevoegen, veiligheid eerst ^^

Bedankt iedereen

#5 22-02-2012 18:56
Het is jammer dat je niets gedaan hebt met de tip van Martin P - als ik mij niet vergis - uit je vorige topic.

Ik zie hier nog steeds een session_start() op de verkeerde plek staan wat kan leiden tot headers already send

#6 22-02-2012 21:30
  • robbeke
  • Groep: Forumleden
  • Posts: 164
  • Actief sinds: 11-07-2011
Ja dat weet ik stom van me kwas het vergeten.
even aanpassen.


Inloggen wachtwoord vergeten? Aanmelden