Fout in zoeken in database
Ik ben bezig met het maken van een zoekfunctie in mijn website. De functie moet zoeken in de database in het veld 'thearticle'. Dit veld bestaat uit een volledige tekst, waar moet worden gekeken of de zoekterm daar in voorkomt. Ik heb momenteel de volgende 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
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
<?php
// Require the classes
require_once('../includes/DbConnector.php');
// Create an object (instance) of the DbConnector and Validator
$connector = new DbConnector();
// ---------------------------------------------Zoek------------------------------------------
if (isset($_POST['submit'])){
$searchkey = $_POST['keyword'];
// Voert de Query uit en haalt de gegevens van het artikel en de bijbehorende reacties uit de database, hiervan wordt uitgegaan van het ID uit de link
$searchresult = $connector->query('SELECT * FROM cmsarticles WHERE thearticle LIKE '%$searchkey%'');
while ($showresult = $connector->fetchArray($searchresult)){
echo $showresult['thearticle'];
echo '<br><br> U heeft gezocht op';
echo 'echo $searchkey';
}}
echo '<form action="search.php" name="reactions" method="post">';
echo '<br><input type="text" cols="75" name="keyword" /><br>';
echo '<input type="hidden" name="search" value="search" />';
echo '<input type="submit" name="submit" value="Zoek!" /></form>';
?>
// Require the classes
require_once('../includes/DbConnector.php');
// Create an object (instance) of the DbConnector and Validator
$connector = new DbConnector();
// ---------------------------------------------Zoek------------------------------------------
if (isset($_POST['submit'])){
$searchkey = $_POST['keyword'];
// Voert de Query uit en haalt de gegevens van het artikel en de bijbehorende reacties uit de database, hiervan wordt uitgegaan van het ID uit de link
$searchresult = $connector->query('SELECT * FROM cmsarticles WHERE thearticle LIKE '%$searchkey%'');
while ($showresult = $connector->fetchArray($searchresult)){
echo $showresult['thearticle'];
echo '<br><br> U heeft gezocht op';
echo 'echo $searchkey';
}}
echo '<form action="search.php" name="reactions" method="post">';
echo '<br><input type="text" cols="75" name="keyword" /><br>';
echo '<input type="hidden" name="search" value="search" />';
echo '<input type="submit" name="submit" value="Zoek!" /></form>';
?>
En het stukje dat hij gebruikt om een array te maken:
De foutmelding die ik krijg bij het zoeken naar een woord waarvan ik zeker weet dat het voor komt in een artikel:
Quote:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /public/sites/cms.alexzijlstra.nl/includes/DbConnector.php on line 50
De fout zit hem dus in het result dat er wordt aangeleverd om een Array te maken, maar waar zit deze fout, en wat is de oplossing hiervoor? Ik heb inmiddels mijn mijn informatica leraar overlegd, en we komen er alle twee niet uit, ik hoop dat jullie me kunnen helpen, de topics die ik heb gevonden met de zoekfunctie van de site beschrijven mijn probleem namelijk ook niet.
Doe eens var_dump($searchresult) direct onder $searchresult = $connector->quer[..], wat krijg je dan te zien?
(pas trouwens op sql injection bij je query)
Je query is fout. Foutafhandeling ontbreekt. Gebruik dubbele quotes voor de string en enkele voor de data. Hou $vars buiten de quotes. Script is lek => sql-injection.
Quote:
1resource(8) of type (mysql result)
Dat is wat ik krijg na het toevoegen van var_dump($searchresult);
de DbConnector.php bestaat uit de volgende scripting:
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
57
58
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
57
58
<?php
require_once ('SystemComponent.php');
class DbConnector extends SystemComponent {
var $theQuery;
var $link;
//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector(){
// Load settings from parent class
$settings = SystemComponent::getSettings();
// Get the main settings from the array we just loaded
$host = $settings['dbhost'];
$db = $settings['dbname'];
$user = $settings['dbusername'];
$pass = $settings['dbpassword'];
// Connect to the database
$this->link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
register_shutdown_function(array(&$this, 'close'));
}
//*** Function: query, Purpose: Execute a database query ***
function query($query) {
$this->theQuery = $query;
return mysql_query($query, $this->link);
}
//*** Function: getQuery, Purpose: Returns the last database query, for debugging ***
function getQuery() {
return $this->theQuery;
}
//*** Function: getNumRows, Purpose: Return row count, MySQL version ***
function getNumRows($result){
return mysql_num_rows($result);
}
//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {
return mysql_fetch_array($result);
}
function fetchField($result) {
return mysql_fetch_field($result);
}
//*** Function: close, Purpose: Close the connection ***
function close() {
mysql_close($this->link);
}
}
?>
require_once ('SystemComponent.php');
class DbConnector extends SystemComponent {
var $theQuery;
var $link;
//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector(){
// Load settings from parent class
$settings = SystemComponent::getSettings();
// Get the main settings from the array we just loaded
$host = $settings['dbhost'];
$db = $settings['dbname'];
$user = $settings['dbusername'];
$pass = $settings['dbpassword'];
// Connect to the database
$this->link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
register_shutdown_function(array(&$this, 'close'));
}
//*** Function: query, Purpose: Execute a database query ***
function query($query) {
$this->theQuery = $query;
return mysql_query($query, $this->link);
}
//*** Function: getQuery, Purpose: Returns the last database query, for debugging ***
function getQuery() {
return $this->theQuery;
}
//*** Function: getNumRows, Purpose: Return row count, MySQL version ***
function getNumRows($result){
return mysql_num_rows($result);
}
//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {
return mysql_fetch_array($result);
}
function fetchField($result) {
return mysql_fetch_field($result);
}
//*** Function: close, Purpose: Close the connection ***
function close() {
mysql_close($this->link);
}
}
?>
Moet zijn
"SELECT * FROM cmsarticles WHERE thearticle LIKE '%" . $searchkey . "%'"
En dan nog beveiligen.
Ontzettend bedankt SanThe en Jelmer! Ik ben de afgelopen week bezig geweest om het werkend te krijgen en dat is gewoon gelukt nu! Ontzettend bedankt! :)