PHP search binnen mysql weergeven in html
ik ben nog een beginner, dus "be gentle" ;)
Ik probeer op een interne pagina een zoek functie te creeren. de output van deze zoekfunctie moet het script uit een mysql database halen.
Dit is de html code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<h2>Search</h2>
<form name="search" method="post" action="index.php">
Seach for: <input type="text" name="find" /> in
<Select NAME="field">
<Option VALUE="A">A</option>
<Option VALUE="B">C/option>
<Option VALUE="C">C</option>
</Select>
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</form>
<form name="search" method="post" action="index.php">
Seach for: <input type="text" name="find" /> in
<Select NAME="field">
<Option VALUE="A">A</option>
<Option VALUE="B">C/option>
<Option VALUE="C">C</option>
</Select>
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</form>
php code:
Code (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
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
<?php
if ($_POST['searching'])
{
echo "<h2>Results</h2><p>";
if ($find == "")
{
echo "<p>You forgot to enter a search term";
exit;
}
mysql_connect("localhost", "login", "ww") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$find = strtoupper($find);
$find = strip_tags($find);
$find = trim ($find);
$data = mysql_query("SELECT * FROM tablename WHERE upper($field) LIKE'%$find%'");
while($result = mysql_fetch_array( $data ))
{
echo $result['A'];
echo " ";
echo $result['B'];
echo "<br>";
echo $result['C'];
echo "<br>";
echo "<br>";
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query<br><br>";
}
echo "<b>Searched For:</b> " .$find;
}
?>
if ($_POST['searching'])
{
echo "<h2>Results</h2><p>";
if ($find == "")
{
echo "<p>You forgot to enter a search term";
exit;
}
mysql_connect("localhost", "login", "ww") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$find = strtoupper($find);
$find = strip_tags($find);
$find = trim ($find);
$data = mysql_query("SELECT * FROM tablename WHERE upper($field) LIKE'%$find%'");
while($result = mysql_fetch_array( $data ))
{
echo $result['A'];
echo " ";
echo $result['B'];
echo "<br>";
echo $result['C'];
echo "<br>";
echo "<br>";
}
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query<br><br>";
}
echo "<b>Searched For:</b> " .$find;
}
?>
als ik een search doe, dan gaat ie naar een pagina /
echter deze pagina bestaat niet, ik wil dat het script op dezelfde pagina de weergave doet.
Wat doe ik fout..
IIg bedankt voor de hulp!
nathan
Code in [.code]-tags geplaatst, maakt de code een stuk duidelijker ;-)[/modedit]
Gewijzigd op 03/06/2010 16:41:07 door Nathan f
PHP_SELF. Vul het volledige pad in van het bestand of de URL, dan zal het werken :-)
De action="" is verkeerd, je zou eigenlijk geen gebruik mogen maken van $'PHP_SELF' moet zijn $_SERVER['PHP_SELF'] maar wordt afgeraden te gebruiken.
Gebruik $_POST['...'] om je formuliergegevens op te halen.
Denk aan sql-injection. Script is lek. Zie mysql_real_escape_string().
Bouw nette foutafhandeling in voor de query's.
Action="" werkt niet in alle IE-versies SanThe ;-)
echter krijg ik nu de melding.
"; if ($find == "") { echo "
You forgot to enter a search term"; exit; } mysql_connect("host/ip", "login", "ww") or die(mysql_error()); mysql_select_db("test") or die(mysql_error()); $find = strtoupper($find); $find = strip_tags($find); $find = trim ($find); $data = mysql_query("SELECT * FROM <tablename> WHERE upper($field) LIKE'%$find%'"); while($result = mysql_fetch_array( $data )) { echo $result['A']; echo " "; echo $result['Service ID']; echo "
"; echo $result['Klantnaam']; echo "
"; echo "
"; } $anymatches=mysql_num_rows($data); if ($anymatches == 0) { echo "Sorry, but we can not find an entry to match your query
"; } echo "Searched For: " .$find; } ?>
Gewijzigd op 03/06/2010 15:00:04 door nathan f
index.html moet worden index.php
index.php
Gewijzigd op 03/06/2010 14:23:42 door nathan f
moet wel beginnen met
<?php
maar deze regel is toch niet goed:
if ($searching == "yes")
wat klopt er niet met de rest van de code?
Graag niet bumpen; twee berichten van jezelf na elkaar binnen 24 uur. Heb je een toevoeging aan je vorige bericht, gebruik dan het 'wijzigen' icoontje.[/modedit]
Gewijzigd op 03/06/2010 16:03:36 door Chris -
SanThe Nvt op 03/06/2010 12:50:22:
Gebruik $_POST['...'] om je formuliergegevens op te halen.
Denk aan sql-injection. Script is lek. Zie mysql_real_escape_string().
Bouw nette foutafhandeling in voor de query's.
Denk aan sql-injection. Script is lek. Zie mysql_real_escape_string().
Bouw nette foutafhandeling in voor de query's.
if ($post == "yes")
krijg echter dezelfde foutmelding
Nathan, $post zal niet bestaan. Gebruik: $_POST['searching']
heb het nu aangepast in de code.
ik heb in de begin post de code aangepast zoals ik hem nu heb.
als ik nu de website open op url/index.php krijg ik meteen de foutmelding:
Notice: Undefined index: searching in /srv/www/htdocs/index.php on line 15
(line 15 slaat op deze regel: if ($_POST['searching'])
als ik dit negeer en ik vul een zoek opdracht in, dan krijg ik de foutmelding:
Notice: Undefined variable: find in /srv/www/htdocs/index.php on line 18
(line 18 slaat op deze regel: if ($find == "")
You forgot to enter a search term
ik weet 100 % zeker dat de input die ik geef in de mysql db staat.
if ($_POST['searching'])
Dit
if (isset($_POST['searching']))
Zelfde geldt uiteraard ook voor $find.
Nathan, het ziet er trouwens naar uit dat je óf een oud script werkend probeert te krijgen, of een oude tutorial aan het volgen bent..
Chris Horeweg op 03/06/2010 16:57:17:
Wat een nettere oplossing (IMO) is om te kijken of het wel POST-request is.
Geheel mee eens, even niet aan gedacht.
maar wat bedoel je "of het wel een post-request is"?
ik heb de aanwijziging van san gevolgd met:
if (isset($_POST['searching']))
ik krijg de eerste foutmelding niet meer. ben nu bezig om het in de $find toe te passen, lukte in eerste instantie niet
als ik san goed begrijk moet het zo:
if (isset($find == "")) ?
(ben aan het werk dus kan niet de hele tijd testen ;)
Nee, je moet de $_POST-vars gebruiken.
Dus: if (isset($_POST['find']))