Zoekmachine Database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kris beensma

kris beensma

04/08/2011 13:51:45
Quote Anchor link
Ik probeer een zoekmachine te maken en ben een beginner met php. Ik gebruik de volgende om te zoeken

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Naam = addslashes($_POST['naam']);

$sql = 'SELECT Name, Resultaat
FROM waarden
WHERE Name = $Naam';
$res = mysql_query($sql,$link);

het probleem is dat ik het script geen waarde vind, die wel degelijk in de database staat. Ook als ik $Naam vervang door een waarde, bijvoorbeeld 'peter', dan krijg ik vind het script wel gewoon de goede waarde. Zie ik iets over het hoofd?
 
PHP hulp

PHP hulp

22/11/2024 20:12:28
 
- SanThe -

- SanThe -

04/08/2011 14:06:37
Quote Anchor link
Je mist foutafhandeling, beveiliging tegen sql-injection en de enkele quotes om je tekst(data).
 
Joren de Wit

Joren de Wit

04/08/2011 14:21:37
Quote Anchor link
Gebruik nooit addslashes(), deze verkloot je data alleen maar. De functie die je zou moeten gebruiken is mysql_real_escape_string(). Verder vergeet je zoals SanThe al zegt de enkele quotes om de string in je query. Maar daar had je snel achter kunnen komen als je degelijke foutafhandeling toegepast had...
 
Chris -

Chris -

04/08/2011 14:31:53
Quote Anchor link
Plaats je code overigens tussen de code tags :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{

$Naam = mysql_real_escape_string($_POST['naam']);

$sql = 'SELECT Name, Resultaat
FROM waarden
WHERE Name = "'
.$Naam.'"';
$res = mysql_query($sql,$link);
?>


Als je iets wilt zoeken, en die waarde is een string, horen er quotes om die naam heen. "peter" dus, ipv peter.

Foutafhandeling doe je in dit geval, door te kijken of $res een resource is (is_resource), zo niet, toon je een foutmelding (mysql_error).

Neem overigens eens een kijkje in het PHP Beginnershandleiding, hierin word dit allemaal behandeld :)
Gewijzigd op 04/08/2011 14:32:41 door Chris -
 
Kris beensma

kris beensma

04/08/2011 15:39:19
Quote Anchor link
Ik heb nu de foutafhandeling toegevoegd. Nu krijg ik de foutmedling "Unknown column '$naam' in 'where clause'". Hoe zorg ik dat $naam als variabele word gezien en niet als kolom van mijn database?
 
Joren de Wit

Joren de Wit

04/08/2011 15:41:27
Quote Anchor link
Je moet de enkele en dubbele quotes in je query even verwisselen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= "SELECT Name, Resultaat
FROM waarden
WHERE Name = '"
.$Naam."'";
?>
 
- SanThe -

- SanThe -

04/08/2011 15:51:54
Quote Anchor link
Waarom gebruik je verwarrende veld- en kolomnamen?
Name => Hoofdletter en engels
Resultaat => Hoofdletter en nederlands
waarden => Kleine letter en nederlands
Beter is om een en dezelfde manier te gebruiken voor alles.
Gewijzigd op 04/08/2011 15:52:45 door - SanThe -
 
Kris beensma

kris beensma

04/08/2011 16:11:22
Quote Anchor link
Dank voor jullie hulp. Ik ben nu iets opgeschoten, en heb nu dit:

<code>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
  
   $link
= mysql_connect('...','...','...');
        mysql_select_db(' ... ',$link) or die (mysql_error());
    
  if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
    {

   $Nummer        =    $_POST['Nummer'];
    $sql = "SELECT     Nummer, Resultaat
        FROM     Waarden
        WHERE   Nummer == '"
.$iNummer."'";
    $res = mysql_query($sql,$link);
    if (!is_resource($db_link)) {
      die(mysql_error());
      }

    if ($res && mysql_num_rows($res) >= 1)
    {

        echo '<table border="10">
            <tr>
                <td>naam</td>
                <td>adres</td>
            </tr>'
;
            
        while ($row = mysql_fetch_array($res))
        {

            echo '<tr>
                <td>'
.$row['Nummer'].'</td>
                <td>'
.$row['Resultaat'].'</td>
            </tr>'
;
        }


        echo '</table>';
      
 }
else {
        echo 'Geen data gevonden voor nummer ';
        echo $Nummer;
    }
    }

 else
  {
 
 <
form action=" <?=$_SERVER['PHP_SELF']?> " method="POST">
 Nummer: <input type="text" name="Nummer" maxlength="7" size="10"><br />
 <
input type="submit" name="verzenden" value="verzenden">
 <
/form>
  
   }



?>


Nu krijg ik de foutmelding: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== '1'' at line 3 (Het lijkt mij dat in line 11 de fout zit). Wat kan ik met deze foutmelding?
Gewijzigd op 04/08/2011 16:15:44 door kris beensma
 
Vincent Huisman

Vincent Huisman

04/08/2011 16:15:12
Quote Anchor link
bij sql heb je maar 1 = nodig
 
Joren de Wit

Joren de Wit

04/08/2011 16:15:15
Quote Anchor link
In een query gebruik je geen == maar gewoon = om waarden te vergelijken...
 
- SanThe -

- SanThe -

04/08/2011 16:25:36
Quote Anchor link
$Nummer = $_POST['Nummer']; // onbeveiligd
WHERE Nummer = '".$iNummer."'"; // onbekend door de 'i' er bij
 
Kris beensma

kris beensma

04/08/2011 16:25:53
Quote Anchor link
hmm, dat had ik ook al geprobeerd, maar dan krijg ik alleen een wit scherm... Sherp opgemerkt SanThe, typfoutje... Maar het probleem is er nogsteeds
Gewijzigd op 04/08/2011 16:31:05 door kris beensma
 
Joren de Wit

Joren de Wit

04/08/2011 16:40:56
Quote Anchor link
$db_link op regel 13 bestaat ook niet, daar zou je $res moeten gebruiken. Dat is immers de resource...

Krijg je alleen een wit scherm? Zorg dan dat je error_reporting instelling goed staat!
 
- SanThe -

- SanThe -

04/08/2011 16:45:38
Quote Anchor link
Op regel 42 begin jij gewoon met html terwijl je nog in php-mode zit.
 
Kris beensma

kris beensma

05/08/2011 09:57:37
Quote Anchor link
Dankje wel voor de hulp! Het werkt nu eindelijk. Nu heb ik als volgende stap om nog een database zoekvenster te plaatsen bij de resultaten van de eerste zoekactie. Hoe kan ik dit het beste opzetten? Ik heb namelijk de eerdere invoer nodig in het volgende script. Kan ik in hetzelfde script nog een post doen of kan ik beter een nieuw script maken en de variabelen die ik weer nodig heb doorsturen met een superglobal?
Gewijzigd op 05/08/2011 10:26:36 door kris beensma
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.