zoeken in database

Status
Niet open voor verdere reacties.

mariannevanh

Terugkerende gebruiker
Lid geworden
14 dec 2004
Berichten
2.134
Een tabel in MySQL-database heeft o.a. de velden: titel, bundel en nummer.
Ik wil een simpel script maken waarin men kan zoeken op (delen uit de) titel. Als resultaat moet dan de bundel en het nummer worden weergegeven.
Maar er zit ergens een fout in het script, waardoor ik geen resultaten op het scherm zie. Ik kan echter geen fout ontdekken, maar dat is te wijten aan mijn beginnende kennis van PHP.
Dit is de code:
Code:
<html>
<head>
<title>Zoeken in database</title>
</head>
<body>
<?php
if (isset($_GET['trefwoord']))
{
    //Maak een connectie met de server en selecteer de database
    include('verbind.php');
    
    //Haal de gegevens uit de tabel waar een woord als $_GET['trefwoord'] in voorkomt.
    $res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%trefwoord%'");
    
    //Begin html 
    echo '
            <table>
                <tr>
                    <td><b>Zoekresultaten</b></td>
                </tr>';
                
    //Weergeef gegevens
    while ($row = mysql_fetch_object($res))
    {
        echo '
                <tr>
                    <td>$row->titel</td>
                </tr>';
    }
    
    //Sluit tabel
    echo '</table>';
                    
}

//Als er nog niet is gezocht
else
{
echo '
<form method="GET">
    <table>
        <tr>
            <td colspan="2"><b>Zoeken in database</b></td>
        </tr>
        <tr>
            <td>Trefwoord:</td>
            <td>
                <input type="text" name="trefwoord" />
            </td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Zoeken"></td>
        </tr>
    </table>
</form>';
}
?> 
</body>
</html>

Wie helpt?
 
Het formulier weet niet waar hij heen moet...

Je zult een action mee moeten geven, aangezien je de gegevens wilt verwerken in hetzelfde bestand kun je makkelijk gebruik maken van
PHP:
echo '<form action="'. $_SERVER['PHP_SELF'] .'" method="get">';
 
Ik. :P

Je fout is vrij eenvoudig, zie de volgende regel:

PHP:
 $res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%trefwoord%'");

Je zoekt waar de titel het woord 'trefwoord' bevat, je hebt de variabele nooit opgevraagd. Het enige dat je gedaan hebt, is kijken óf de variabele bestaat.
Een variabele met PHP heeft het dollarteken voor zich, zoals in de onderstaande query. Echter; er zit nog steeds niet in, want je hebt 'm geen waarde gegeven.

Uiteindelijk wordt het dus als volgt:

PHP:
$trefwoord = $_GET['trefwoord'];

$res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%$trefwoord%'");
 
Het formulier weet niet waar hij heen moet...

Je zult een action mee moeten geven, aangezien je de gegevens wilt verwerken in hetzelfde bestand kun je makkelijk gebruik maken van
PHP:
echo '<form action="'. $_SERVER['PHP_SELF'] .'" method="get">';

Deels juist, daar het niet de oplossing van het probleem is. Het leeglaten van het ACTION-veld mag niet netjes zijn, maar het heeft geen invloed op de afwikkeling ervan. Het formulier wordt gewoon gesubmit naar de pagina waar het formulier instaat.
 
Had je daar niet een edit voor kunnen gebruiken :p
 
Ok, het begint er op te lijken.
Na het invoeren van een willekeurig woord (gevolgd door Enter), opent een nieuw scherm:
Code:
Zoekresultaten
$row->titel
$row->titel
$row->titel
$row->titel
(en zo nog een hele rij met "$row->titel".
Tja, en daar heb ik natuurlijk niets aan).
 
PHP:
 <td>$row['titel']</td>

En zo?
 
ik :P

PHP:
 echo '<tr><td>'. $row->titel .'</td></tr>';

Daarnaast:
PHP:
$row->titel == $row['titel']
 
Het begint er op te lijken.
Na het ingeven van een zoekterm krijg ik een resultaat van 1294 records (het totale bestand heeft 1392 records). De resultaten komen NIET overeen met de vraag.
 
Verander dit
PHP:
while ($row = mysql_fetch_object($res))
{
  echo '<tr><td>'. $row->titel .'</td></tr>';
}
in
PHP:
while ($row = mysql_fetch_array($res))
{
  echo '<tr><td>'. $row->titel .'</td></tr>';
}
 
Helaas, dan is het resultaat een scherm met alleen het woord "Zoekresultaten" en verder niets.
 
Wat is de volledige code die je nu gebruikt dan?
 
De volledige code:
Code:
<html>

<head>
<title>Zoeken in database</title>
</head>

<body>
<?php
if (isset($_GET['trefwoord']))
{
    //Maak een connectie met de server en selecteer de database
    include('verbind.php');
    
    //Haal de gegevens uit de tabel waar een woord als $_GET['trefwoord'] in voorkomt.
    $res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%$trefwoord%'");
    
    //Begin html 
    echo '
            <table>
                <tr>
                    <td><b>Zoekresultaten</b></td>
                </tr>';
                
    //Weergeef gegevens
while ($row = mysql_fetch_array($res))
{
  echo '<tr><td>'. $row->titel .'</td></tr>';
}
    
    //Sluit tabel
    echo '</table>';
                    
}

//Als er nog niet is gezocht
else
{
echo '
<form method="GET">
    <table>
        <tr>
            <td colspan="2"><b>Zoeken in database</b></td>
        </tr>
        <tr>
            <td>Trefwoord:</td>
            <td>
                <input type="text" name="trefwoord" />
            </td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Zoeken"></td>
        </tr>
    </table>
</form>';
}
?> 
</body>

</html>
 
Kan kloppen dat hij het niet doet...

Je hebt de bericht 3 niet goed doorgelezen...

PHP:
<html>

<head>
<title>Zoeken in database</title>
</head>

<body>
<?php
if (isset($_GET['trefwoord'])) {
  //Maak een connectie met de server en selecteer de database
  include('verbind.php');
    
  $trefwoord = $_GET['trefwoord'];
  //Haal de gegevens uit de tabel waar een woord als $_GET['trefwoord'] in voorkomt.
  $res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%$trefwoord%'");
  
  //Begin html 
  echo '
          <table>
           <tr>
             <td><b>Zoekresultaten</b></td>
           </tr>';
                
  //Weergeef gegevens
  while ($row = mysql_fetch_array($res)) {
    echo '<tr><td>'. $row->titel .'</td></tr>';
  }
  //Sluit tabel
  echo '</table>';
}
//Als er nog niet is gezocht
else {
echo '
<form method="GET">
    <table>
        <tr>
            <td colspan="2"><b>Zoeken in database</b></td>
        </tr>
        <tr>
            <td>Trefwoord:</td>
            <td>
                <input type="text" name="trefwoord" />
            </td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Zoeken"></td>
        </tr>
    </table>
</form>';
}
?> 
</body>

</html>
Die zal beter werken denk ik.
 
Nee, het werkt nog niet.
Als ik een willekeurig woord uit een titel opgeef (of zelfs een begin van een titel), dan vind ie niets. Alleen maar een scherm met "Zoekresultaten".

Ook valt me op dat een andere naam bij include (uit veiligheidsoverwegingen heb ik in deze postings een andere naam weergegeven) voor de connectie met de database geen foutmelding weergeeft.
 
Voeg het volgende toe achter het punt waar de connectie tot stand wordt gebracht:

or die (mysql_error());

Wat zegt ie?
 
Dat staat er al:
Code:
<?php 

$host = "******";   //mysql locatie
$user = "*******";      //mysql gebruikersnaam
$pass = "********";      //mysql wachtwoord
$db = "************";   //mysql database
$localhost = "192.168.x.y";

	mysql_connect($host,$user,$pass) or die(mysql_error());  
	mysql_select_db($db);

?>
 
Probeer het volgende eens:

PHP:
	if ($dbc = @mysql_connect ('localhost', 'user', 'pass')) {
		if (!@mysql_select_db ('database')) {
			die (mysql_error());
		}
	} else {
		die (mysql_error());
	}
 
Dat maakt niet uit SVU, als je achter mysql_connect() en mysql_select_db() al or die(mysql_error()); zet komt dat op hetzelfde neer als jouw IF en ELSE.

Zet het eens achter je query dus
PHP:
$res = mysql_query("SELECT * FROM `bhe_files` WHERE titel LIKE '%$trefwoord%'") or die(mysql_error());
 
Klopt, ik gaf alleen het connectiescript dat ik altijd gebruik (en waarvan ik zeker weet dat het werkt).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan