Zoekfunctie en resultaten posten naar textbox
Ik probeer een zoekfunctie zo te maken waar een als een medewerker een naam van een project invult. Er wordt dan gekeken of er een rij bestaat met die naam in de tabel "customer". Vervolgens wil ik bepaalde records laten weergeven in een textbox die in diezelfde regel staan als de naam waar op gezocht wordt.
dit heb ik al:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Verkrijg de search variable uit de URL
$var = @$_GET['search_value'];
// check for an empty string and display a message.Kijk of er een lege string is ingevuld en geef dan een melding weer.
if ($var == "")
{
echo "<p>Please enter a search...</p>";
exit;
}
// Selecteer weer te geven velden uit dezelfde regel als waarnaar gezocht is.
$query = "SELECT (project_name, maintenance_contract, software, hardware, project_ finished) FROM customer WHERE (project_name like \'%var%\')";
$result= mysql_fetch_array($query);
?>
// Verkrijg de search variable uit de URL
$var = @$_GET['search_value'];
// check for an empty string and display a message.Kijk of er een lege string is ingevuld en geef dan een melding weer.
if ($var == "")
{
echo "<p>Please enter a search...</p>";
exit;
}
// Selecteer weer te geven velden uit dezelfde regel als waarnaar gezocht is.
$query = "SELECT (project_name, maintenance_contract, software, hardware, project_ finished) FROM customer WHERE (project_name like \'%var%\')";
$result= mysql_fetch_array($query);
?>
Is de functie die ik gebruik "mysql_fetch_array" wel juist?
En hoe kan ik succesvol de geselecteerde records laten zien in een textbox?
Topic verplaatst naar het juiste board.[/modedit]
Gewijzigd op 14/04/2011 17:37:20 door Joren de Wit
$var = @$_GET['search_value'];
Waarom het apenstaartje?
Voorbeeldje:
Code (php)
Goede manier:
Code (php)
Wat jij nu doet bij regel 15/16 is fout. Je zet de query in een string (dit is goed). Maar vervolgens moet je de query nog uitvoeren met mysql_query. Vervolgens kan je er een van de fetch methodes overheen gooien, waarvan ik zelf mysql_fetch_assoc zou gebruiken i.p.v. fetch_array. Dit is namelijk sneller.
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
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
<?php
// Verkrijg de search variable uit de URL
$var = $_GET['search_value'];
// check for an empty string and display a message.Kijk of er een lege string is ingevuld en geef dan een melding weer.
if ($var == "")
{
echo "<p>Please enter a search...</p>";
exit;
}
// Selecteer weer te geven velden uit dezelfde regel als waarnaar gezocht is.
$query = "SELECT (project_name, maintenance_contract, software, hardware, project_ finished) FROM customer WHERE (project_name like \'%var%\')";
$mysql = mysql_query($query);
$result= mysql_fetch_assoc($mysql);
//waarbij je het resultaat natuurlijk tevoorschijn wilt toveren
//bijvoorbeeld
echo $result['0'];
?>
// Verkrijg de search variable uit de URL
$var = $_GET['search_value'];
// check for an empty string and display a message.Kijk of er een lege string is ingevuld en geef dan een melding weer.
if ($var == "")
{
echo "<p>Please enter a search...</p>";
exit;
}
// Selecteer weer te geven velden uit dezelfde regel als waarnaar gezocht is.
$query = "SELECT (project_name, maintenance_contract, software, hardware, project_ finished) FROM customer WHERE (project_name like \'%var%\')";
$mysql = mysql_query($query);
$result= mysql_fetch_assoc($mysql);
//waarbij je het resultaat natuurlijk tevoorschijn wilt toveren
//bijvoorbeeld
echo $result['0'];
?>
Gewijzigd op 14/04/2011 15:45:40 door Jack Sierkstra
Ook escape je de quotes bij je LIKE, maar dit is niet nodig, want je zit binnen dubbele quotes.
empty. En je kan veel beter een while loop gebruiken bij fetch_assoc, om alle gegevens op te halen. Verder moeten intergers buiten quotes, aangezien het geen strings zijn, dus $result[0] i.p.v. $result['0']
@jack, regel 8 kan beter gebruik worden gemaakt van == "" geeft hetzelfde resultaat als empty. En van het tonen van je gegevens heb ik er express comments bij gedaan:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
//waarbij je het resultaat natuurlijk tevoorschijn wilt toveren
//bijvoorbeeld
echo $result['0'];
?>
//waarbij je het resultaat natuurlijk tevoorschijn wilt toveren
//bijvoorbeeld
echo $result['0'];
?>
Laatste punt heb je helemaal gelijk in.
hier het script:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
51
52
53
54
55
56
<?php
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Search Results</title>
</head>
<body>
<center>
<h2>Search results</h2>
<body background="../background.jpg">
<hr>
</center>
[code]<?php
// verbind met de database-server en kies database
include("../connect.php");
// de doorgegeven POST-variabele ophalen
$zoekwoord = $_POST["zoekwoord"];
echo "<center>";
echo "Gezocht naar <b>".$zoekwoord." </b>.";
// zoek in de kolom 'omschrijving' (heeft FULLTEXT-index)
$result = mysql_query("SELECT * FROM customer WHERE
project_name REGEXP '$zoekwoord' ORDER BY company_name ASC") or die(mysql_error());
$aantal_rijen = mysql_num_rows($result);
if ($aantal_rijen > 0)
{
echo " # gevonden: <b>".$aantal_rijen."</b>";
echo "<hr></center>";
for ($i = 0; $i < $aantal_rijen; $i++)
{
$projectname = mysql_result($result, $i, 'project_name');
$maintenance = mysql_result($result, $i, 'maintenance_contract');
$software = mysql_result($result, $i, 'software');
$hardware = mysql_result($result, $i, 'hardware');
$projectf = mysql_result($result, $i, 'project_finished');
// en afbeelden...
echo "<b>Project name:</b> ".$projectname." <br> ";
echo " <b>Maintenance contract:</b> ".$maintenance." <br> ";
echo " <b>Software:</b> ".$software."<br>";
echo " <b>Hardware:</b> ".$hardware."<br>";
echo " <b>Project finished:</b> ".$projectf."<br>";
} // $i-de rij is afgehandeld
} // next rij (if aantal_rijen groter dan 0)
else
{
?>
echo " - niets gevonden</center>";
}
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Search Results</title>
</head>
<body>
<center>
<h2>Search results</h2>
<body background="../background.jpg">
<hr>
</center>
[code]<?php
// verbind met de database-server en kies database
include("../connect.php");
// de doorgegeven POST-variabele ophalen
$zoekwoord = $_POST["zoekwoord"];
echo "<center>";
echo "Gezocht naar <b>".$zoekwoord." </b>.";
// zoek in de kolom 'omschrijving' (heeft FULLTEXT-index)
$result = mysql_query("SELECT * FROM customer WHERE
project_name REGEXP '$zoekwoord' ORDER BY company_name ASC") or die(mysql_error());
$aantal_rijen = mysql_num_rows($result);
if ($aantal_rijen > 0)
{
echo " # gevonden: <b>".$aantal_rijen."</b>";
echo "<hr></center>";
for ($i = 0; $i < $aantal_rijen; $i++)
{
$projectname = mysql_result($result, $i, 'project_name');
$maintenance = mysql_result($result, $i, 'maintenance_contract');
$software = mysql_result($result, $i, 'software');
$hardware = mysql_result($result, $i, 'hardware');
$projectf = mysql_result($result, $i, 'project_finished');
// en afbeelden...
echo "<b>Project name:</b> ".$projectname." <br> ";
echo " <b>Maintenance contract:</b> ".$maintenance." <br> ";
echo " <b>Software:</b> ".$software."<br>";
echo " <b>Hardware:</b> ".$hardware."<br>";
echo " <b>Project finished:</b> ".$projectf."<br>";
} // $i-de rij is afgehandeld
} // next rij (if aantal_rijen groter dan 0)
else
{
?>
echo " - niets gevonden</center>";
}
Qua performance kan je beter mysql_fetch_assoc gebruiken dan mysql_result in je for-loop.