Zoekbalk in html pagina laten zoeken in php database

Status
Niet open voor verdere reacties.

Paul4

Gebruiker
Lid geworden
17 jan 2012
Berichten
13
Hallo Allemaal,
Ik moet voor mijn stage een zoekbalk maken die gaat zoeken in een php database. Ik heb eigenlijk nog nul ervaring met php of html of wat dan ook. Ik had twee scripts gevonden maar het werkt nog niet helemaal weet iemand wat ik verkeerd doe?

Dit zijn de twee scripts die ik heb.
" Zoek script"

<?
echo '<html>
<head><title>Zoeken</title></head>
<body>

<p><b>Zoek in de database:</b></p>

<p>
<form method="post" action="resultaat.php">
Zoekterm:<br>
<input type="text" name="zoekterm" size="30"><br>
<input type="submit" name="submit" value="Zoeken">
</p>

</BODY>
</HTML>';
?>

Ik heb deze als zoek.php opgeslagen en ook als zoek.html want dan kan ik hem openen en dan zie ik ook daadwerkelijk een zoek balk.

" Resultaat script"

<?
//-- natuurlijk moet er eerst een connectie met de database worden gemaakt:
if (!@mysql_select_db("Database", @mysql_connect("Localhost", "User", "Password")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}

//-- $_POST['zoekterm'] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
$sql = "SELECT id,tekst FROM zoek_test WHERE tekst LIKE '%" . mysql_real_escape_string($_POST['zoekterm']) . "%'";

//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
$res = mysql_query($sql);

//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet
if (mysql_num_rows($res) >= 1)
{
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
while ($row = mysql_fetch_array($res))
{
echo '<p>Resultaat id: <b>' . $row['id'] . '</b><br>';
echo 'Resultaat tekst: <b>' . htmlspecialchars($row['tekst']) . '</b></p>';
}

echo '<a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a>';
}
//-- als er geen resultaat is gevonden, dus als het zoekwoord niet gevonden is:
else
{
echo '<p>Er is niets gevonden op jou zoekterm: <b>' . $_POST['zoekterm'] . '</b></p>';

echo '<p><a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a></p>';
}
?>

Dit sla ik op als resultaat.php de zoek.html linkt dus door naar dit script. Maar als ik iets in type in zoek.html en druk op zoek dan krijg ik een nieuwe pagina met dit script letterlijk weergegeven. Ik heb al verschillende inlog geprobeerd te veranderen in resultaat.php maar ook dit werkt niet iemand enig idee?
 
Laatst bewerkt:
Je server draait geen PHP plugin? Overigens is de titel ook verkeerd. Er is niet zoiets als een PHP database. PHP is een server-side script-taal die, in dit geval, gebruik maakt van een MySQL database.

Enfin, ik zou eerst beginnen met de "hello world" tutorial van PHP. De eerste stap wordt PHP goed draaiend krijgen, voordat je verder kan met je experimenten
 
Bedankt voor je reactie. Titels is inderdaad wel een stomme fout niet bij nagedacht waarschijnlijk toen ik het typte ;). Ik zal dat hello world is een keer gaan lezen misschien dat ik daar wat wijzer van wordt bedankt.
gr
 
Het is gedeeltelijke gelukt. alleen nu krijg ik de volgende melding. Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\zoeken\resultaat.php on line 18

Dit is de desbetreffende regel.
if (mysql_num_rows($res) >= 1)

Wat is er hier fout aan? kan iemand mij helpen.
Alvast bedankt.

Mvg Jean-paul
 
grote kans dat de vorige regel:
PHP:
$res = mysql_query($sql);

"false" terug geeft. oftewel de query die je opgeeft is (mogelijk) niet geldig. Probeer eens:

SELECT * FROM <tabelnaam>

waar tabelnaam je gekozen tabel is. Echo ook even je query, mogelijk is meteen te zien waar het fout gaat.
 
Laatst bewerkt:
Bedankt voor het antwoord. Wat kan ik aan die regel veranderen om geen fout melding meer te krijgen of wat moet ik aan mijn script veranderen? Hier even heel mijn script.

<?
//-- natuurlijk moet er eerst een connectie met de database worden gemaakt:
if (!@mysql_select_db("databasenaam", @mysql_connect("localhost", "gebruiker", "wachtwoord")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}

//-- $_POST['zoekterm'] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
$sql = "SELECT id,tekst FROM zoek_test WHERE tekst LIKE '%" . mysql_real_escape_string($_POST['zoekterm']) . "%'";

//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
$res = mysql_query($sql);

//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet
if (mysql_num_rows($res) >= 1)
{
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
while ($row = mysql_fetch_array($res))
{
echo '<p>Resultaat id: <b>' . $row['id'] . '</b><br>';
echo 'Resultaat tekst: <b>' . htmlspecialchars($row['tekst']) . '</b></p>';
}

echo '<a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a>';
}
//-- als er geen resultaat is gevonden, dus als het zoekwoord niet gevonden is:
else
{
echo '<p>Er is niets gevonden op jou zoekterm: <b>' . $_POST['zoekterm'] . '</b></p>';

echo '<p><a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a></p>';
}
?>

Mvg Jean-Paul
 
Zie ook mijn EDIT in mijn vorige post.

Graag je code posten tussen PHP tags, dat maakt het allemaal een stuk vriendelijker ;)
 
Bedankt voor je reactie maar als ik dat doe dan krijg ik ook weer foutmeldingen waarschijnlijk doe ik gewoon weer eens iets verkeerd. Want ik weet namelijk niet goed hoe ik dat allemaal moet doen heb je misschien een voorbeeld?
 
probeer eens onder de
$sql = "SELECT id,...

PHP:
echo $sql;
$sql = "SELECT id,tekst FROM zoek_test";

Ik neem aan dat zoek_test een bestaande tabel is. Bovendien neem ik even aan dat deze regel:

PHP:
!@mysql_select_db("databasenaam", @mysql_connect("localhost", "gebruiker", "wachtwoord"))

in het echt een echte database bevat en gebruiker en wachtwoord de echte gebruiker en wachtwoord zijn
 
Hallo,

De database die heet test. En alle gegevens zijn natuurlijk ingevuld zoals het hoort hier krijg ik namelijk ook geen foutmelding op. En u zij dat ik iets moest proberen maar zoals het daarstaat staat het ook letterlijk in mijn script dus ik begrijp eigenlijk niet wat ik moest proberen aan te passen.

Alvast weer bedankt.

gr
 
Sorry na twee keer lezen begreep ik het pas. Nu krijg ik de volgende foutmelding :

SELECT id,tekst FROM zoek_test WHERE tekst LIKE '%bounty%'

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\zoeken\resultaat.php on line 22

Dat met lijn 22 die foutmelding is natuurlijk gewoon een aantal regels verschoven door de regels die we ingevoerd hebben.

Ik hoop dat ik het een beetje goed uitgelegd heb.

Gr J-p
 
Ok. duidelijk. Heb je phpmyadmin geinstalleerd? Als de fout nog steeds bestaat betekend dat:

zoek_test is een niet-bestaande tabel
EN/OF
id is een niet bestaande kolom
EN/OF
tekst is een niet bestaande kolom.

Weet je zeker dat de kolom niet "text" heet of iets dergelijks? het lijkt niet de zitten in de PHP an sich
 
Ja ik heb php myadmin geinstalleerd want als ik naar 127.0.0.1/phpmyadmin ga dan open de pagina normaal.

In de bijlage een screenshot misschien dat die meer duidelijkheid schept, misschien is de database zelfs wel fout.

gr jpbijlage.jpgbijlage.jpg
 
Dat zou ik wel denken ja :)

Volgens phpmyadmin heet de database "test", maar de tabel heet ook "test". zoek_test bestaat dus niet

vervolgens heb je drie kolommen van type INT genaamd "Twiks", "Mars" en "bounty". Ik neem aan dat die kolommen ongevuld zijn.

Geeft niet, maar dan is in ieder geval duidelijk waarom het niet werkt :P
 
Dus alles wat zoek_test bevat moet ik vervangen voor test?
En wat bedoel je met vullen moet ik er iets extra's aan informatie bij doen of ???
Alvast bedankt.

Gr J-p
 
Ik zal proberen er doorheen te lopen.

Selecteer in myadmin je "test" database. Onder "structure" vind je de optie "create a new table on database test" met daaronder name en fields. vul in bij name: test2 en fields: 2 en maak de tabel.

Bij het linker veld vul in:

FIELD: ID
INDEX: PRIMARY
AUTO_INCREMENT: ja

Bij het rechter veld:

FIELD: tekst
type: LONGTEXT

click op "SAVE" beneden.

je ziet nu een structure scherm van test->test2 met field ID en tekst.
kies nu bovenin "INSERT"

ga naar het tekst veld en vul in "bounty" en druk op "GO". herhaal dit voor mars en twix.
 
Bedankt voor de reactie het is enigszins gelukt. Volgens mij heb ik de database goed aangemaakt voor de zekerheid nog even een aantal screenshots. Maar hij vind de producten nog niet waarschijnlijk moet ik nog wat aanpassen aan het script omdat het een andere database is geworden of heb ik dat verkeerd? Alvast weer bedankt.

mvg j-p
 

Bijlagen

  • bijlage2.jpg
    bijlage2.jpg
    81,7 KB · Weergaven: 90
Dat ziet er al beter uit.

Haal de extra regels van mij eruit (of in ieder geval de laatste)

pas de $sql regel zo aan:

PHP:
$sql = "SELECT ID,tekst FROM test2 WHERE tekst LIKE '%" . mysql_real_escape_string($_POST['zoekterm']) . "%'";

en dan werkt het voor mij in phpmyadmin
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan