Fout in zoeken in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Alex Zijlstra

Alex Zijlstra

07/11/2010 15:11:12
Quote Anchor link
Goedemiddag!

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)
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
<?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>';


?>


En het stukje dat hij gebruikt om een array te maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function fetchArray($result) {
    return mysql_fetch_array($result);
}



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.
 
PHP hulp

PHP hulp

24/11/2024 17:50:34
 
Jelmer -

Jelmer -

07/11/2010 15:17:08
Quote Anchor link
Hoe ziet de class DbConnector eruit, en dan met name die method query?

Doe eens var_dump($searchresult) direct onder $searchresult = $connector->quer[..], wat krijg je dan te zien?

(pas trouwens op sql injection bij je query)
 
- SanThe -

- SanThe -

07/11/2010 15:17:21
Quote Anchor link
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.
 
Alex Zijlstra

Alex Zijlstra

07/11/2010 15:23:25
Quote Anchor link
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)
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
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);
}


}

?>
 
- SanThe -

- SanThe -

07/11/2010 15:27:28
Quote Anchor link
'SELECT * FROM cmsarticles WHERE thearticle LIKE '%$searchkey%''

Moet zijn
"SELECT * FROM cmsarticles WHERE thearticle LIKE '%" . $searchkey . "%'"

En dan nog beveiligen.
 
Alex Zijlstra

Alex Zijlstra

07/11/2010 15:32:42
Quote Anchor link
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! :)
 



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.