PHP search binnen mysql weergeven in html

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nathan f

nathan f

03/06/2010 12:28:31
Quote Anchor link
hoi,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>

php 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
<?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;
 }

 ?>


als ik een search doe, dan gaat ie naar een pagina /
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$'PHP_SELF'?>

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 hulp

PHP hulp

24/11/2024 12:04:00
 
Chris -

Chris -

03/06/2010 12:32:58
Quote Anchor link
De action="" is verkeerd, je zou eigenlijk geen gebruik mogen maken van PHP_SELF. Vul het volledige pad in van het bestand of de URL, dan zal het werken :-)
 
Nathan f

nathan f

03/06/2010 12:39:17
Quote Anchor link
even voor mijn beeld vorming, het word dan:

<form name="search" method="post" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=/srv/www/htdocs/index.php?>
">
Gewijzigd op 03/06/2010 12:39:36 door nathan f
 
- SanThe -

- SanThe -

03/06/2010 12:50:22
Quote Anchor link
Alleen action="" werkt prima.
$'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.
 
Chris -

Chris -

03/06/2010 13:34:13
Quote Anchor link
Nathan, je hoeft dan geen shorttags te gebruiken. Je kan gewoon doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form name="search" method="post" action="index.php">


Action="" werkt niet in alle IE-versies SanThe ;-)
 
Nathan f

nathan f

03/06/2010 14:00:32
Quote Anchor link
ik heb 't thx!~hij post nu naar index.php

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
 
- SanThe -

- SanThe -

03/06/2010 14:13:39
Quote Anchor link
index.html moet worden index.php
 
Nathan f

nathan f

03/06/2010 14:23:20
Quote Anchor link
typo, staat er ook zo ;)
index.php
Gewijzigd op 03/06/2010 14:23:42 door nathan f
 
Nathan f

nathan f

03/06/2010 15:43:26
Quote Anchor link
ah fixed.
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' Afbeeldingicoontje.[/modedit]
Gewijzigd op 03/06/2010 16:03:36 door Chris -
 
- SanThe -

- SanThe -

03/06/2010 15:45:35
Quote Anchor link
Wat is er fout aan die regel?

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.
 
Nathan f

nathan f

03/06/2010 16:05:11
Quote Anchor link
heb het aangepast naar:

if ($post == "yes")

krijg echter dezelfde foutmelding
 
Chris -

Chris -

03/06/2010 16:06:01
Quote Anchor link
Nathan, $post zal niet bestaan. Gebruik: $_POST['searching']
 
Nathan f

nathan f

03/06/2010 16:50:23
Quote Anchor link
chris / san thx!

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.
 
- SanThe -

- SanThe -

03/06/2010 16:52:56
Quote Anchor link
Maak van
if ($_POST['searching'])
Dit
if (isset($_POST['searching']))

Zelfde geldt uiteraard ook voor $find.
 
Chris -

Chris -

03/06/2010 16:57:17
Quote Anchor link
Wat een nettere oplossing (IMO) is om te kijken of het wel POST-request is.

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..
 
- SanThe -

- SanThe -

03/06/2010 16:58:51
Quote Anchor link
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.
 
Nathan f

nathan f

03/06/2010 17:03:53
Quote Anchor link
chris, het is inderdaad een tutorial.
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 ;)
 
- SanThe -

- SanThe -

03/06/2010 17:08:29
Quote Anchor link
Chris bedoelt: if($_SERVER['REQUEST_METHOD'] == 'POST')



Nee, je moet de $_POST-vars gebruiken.
Dus: if (isset($_POST['find']))
 
Nathan f

nathan f

03/06/2010 17:59:33
Quote Anchor link
ik denk dat ik maar helemaal op nieuw moet beginnen, had het volgende gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if (isset($_POST['searching']))
 {

 echo "<h2>Results</h2><p>";
 if (isset($_POST['find']))

geen error melding, maar ook geen output..
 
Thomas s

thomas s

04/06/2010 08:32:12
Quote Anchor link
voor output moet je $_POST['find'] printen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $_POST['find'];
?>
 



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.