hulp met PHP a.u.b.

Gestart doorVdmeijer12 reacties90 weergaven

13 berichten · pagina 1 van 1

Vdmeijer

Lid · Topicstarter

Berichten
8
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo,

ik ben een kleine zoekfunctie aan het bouwen om mijn dvds beter te kunnen ordenen en vinden.
maar ik heb een vervelend probleem met mijn php/sql

op het moment blijf ik deze foutmelding krijgen:
Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in php/search.php on line 67

ik maak boven aan de pagina connectie met mijn database door middel van een include functie. (deze werkt correct)
verder weet ik niet of deze warning resultaten beïnvloed, maar hij geeft aan dat hij niets vind in de 3 data bases...(zelfs al zou dat wel moeten)

Ik denk zelf dat het aan de UNION in mijn $query ligt. Maar dat weet ik niet zeker.

Codeblok (voorbeeld.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

$input = $_GET[search];
$keyword = explode(" ", $input);
$query = "(SELECT * FROM lijstBlueRay WHERE )
UNION
(SELECT * FROM lijstDvdKast WHERE )
UNION
(SELECT * FROM lijstDvdKistTwee WHERE )"
;

foreach ($keyword as $each){
$i=0;

if ($i == 0)
$query .= "name LIKE %$each% ";
else
$query .= "OR name LIKE %$each% ";
}

[
b]$numrows = mysql_fetch_array($query);[/b]
$query = mysql_query($query);
if($numrows > 0){
while($row = mysql_fetch_assoc($query)){
$number = $row[number];
$name = $row[name];
$genre = $row[genre];
$place = $row[place];

echo "";
echo "" . $number . "";
echo "" . $name . "";
echo "" . $genre . "";
echo "" . $place . "";
echo "";
}
}
else {
echo "0 resultaten gevonden voor " . $input . "";
}

?>

iemand enig idee betreffende dit probleem? Ty
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Sql injection mogelijk!

En:

Haal regel 67 weg en vervang het door echo mysql_error(); Welke error krijg je dan?

En maak trouwens gebruik van mysqli/pdo
0
Berichten
3.001
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Als je het nou even in de daarvoor bestemde code-tags zet, wordt het al een stuk overzichtelijker.

toevoeging op 4 maart 2014, 09:34:13:
Daar die fetch_array en de $query daaronder eens om?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
UNION kan niet met een * geloof ik, je voert je subquerys verkeerd uit.
Google eens op mysql subquery examples smile
0
Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
mysql_fetch_array verwacht het resultaat van een mysql_query. Je geeft nu de query aan mysql_fetch_array niet het resultaat van mysql_query.

Vervang:
$numrows = mysql_fetch_array($query);
$query = mysql_query($query);

Met
$query = mysql_query($query);
$numrows = mysql_fetch_array($query);
0
Vdmeijer

Lid · Topicstarter

Berichten
8
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Sql injection mogelijk!
En:

Haal regel 67 weg en vervang het door echo mysql_error(); Welke error krijg je dan?

En maak trouwens gebruik van mysqli/pdo

Zojuist geprobeerd, de error verdwijnt echter kan het nog steeds geen resultaten vinden.
Xjessex schreef:
UNION kan niet met een * geloof ik, je voert je subquerys verkeerd uit.
Google eens op mysql subquery examples smile
Had ik ook geprobeerd, maar helaas, als ik de kolom namen (name, genre, number, place) invoer in plaats van de * houd ik dezelfde error
Timkb schreef:
mysql_fetch_array verwacht het resultaat van een mysql_query. Je geeft nu de query aan mysql_fetch_array niet het resultaat van mysql_query.

Vervang:

Codeblok (voorbeeld.php):
1
2

$numrows = mysql_fetch_array($query);
$query = mysql_query($query);

Met

Codeblok (voorbeeld.php):

1
2

$query = mysql_query($query);
$numrows = mysql_fetch_array($query);

Had ik inderdaad ook geprobeerd, helaas werkt dit ook niet.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
$numrows = mysql_fetch_array($query);
    $query = mysql_query($query) or die(mysql_error());


Als je dat even snel doet? Krijg je dan wel een error (geen nette error afhandeling maar het script stopt dan en dan zou je wel een error moeten kunnen zien.
0
Vdmeijer

Lid · Topicstarter

Berichten
8
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
$numrows = mysql_fetch_array($query);
    $query = mysql_query($query) or die(mysql_error());
Als je dat even snel doet? Krijg je dan wel een error (geen nette error afhandeling maar het script stopt dan en dan zou je wel een error moeten kunnen zien.

Ja correct, dan krijg ik deze error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ) UNION (SELECT * FROM lijstDvdKast WHERE ) UNIO at line 1
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Je query

(SELECT * FROM lijstBlueRay WHERE ) 
               UNION
               (SELECT * FROM lijstDvdKast WHERE ) 
               UNION
               (SELECT * FROM lijstDvdKistTwee WHERE )


is niet goed opgebouwd..

Je geeft 3 keer aan een WHERE statement te willen gebruiken, maar je geeft geen geldige waardes..
Je geeft een query object in bij een WHERE statement met een union die je verkeerd gebruikt..

Probeer dit eens:

SELECT * FROM lijstBlueRay lbr JOIN lijstDvdKast ldk JOIN lijstDvdKistTwee ldkt


Volgens mij moet dat wel werken.. (snel uit mn hoofd getypt)

toevoeging op 4 maart 2014, 13:01:26:
Anders moet je zelf even zoeken op mysql joins / subquerys
0
Vdmeijer

Lid · Topicstarter

Berichten
8
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
Je query

(SELECT * FROM lijstBlueRay WHERE ) 
               UNION
               (SELECT * FROM lijstDvdKast WHERE ) 
               UNION
               (SELECT * FROM lijstDvdKistTwee WHERE )
is niet goed opgebouwd..

Je geeft 3 keer aan een WHERE statement te willen gebruiken, maar je geeft geen geldige waardes..
Je geeft een query object in bij een WHERE statement met een union die je verkeerd gebruikt..

Probeer dit eens:

SELECT * FROM lijstBlueRay lbr JOIN lijstDvdKast ldk JOIN lijstDvdKistTwee ldkt


Volgens mij moet dat wel werken.. (snel uit mn hoofd getypt)

toevoeging op 4 maart 2014, 13:01:26:
Anders moet je zelf even zoeken op mysql joins / subquerys

Zojuist geprobeert, echter werkt dat ook niet helaas.
Bovendien ga ik door met mijn statement in mijn foreach lus:

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8

foreach ($keyword as $each){
$i=0;

if ($i == 0)
$query .= "name LIKE %$each% ";
else
$query .= "OR name LIKE %$each% ";
}
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Ah, nja dat gaat helemaal niet werken..
Die foreach moet je eerst doen, en dan ipv in $query moet je het in een nieuwe var zetten, en dan achter WHERE moet je die var plaatsen.. En als je WHERE 1=1 doet, dan kan je daarna OR name LIKE .... doen.. Dus dan is regel 4, 5, 6 niet nodig.. smile Dan kan je er altijd OR bij zetten, en 1 is altijd gelijk aan 1, dus dat doet verder vrij weinig.
0
Vdmeijer

Lid · Topicstarter

Berichten
8
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Oke het werkt al. Een maat van me heeft het al gefixed.
Bedankt iedereenbye
(slotje)
0
Berichten
3.334
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Vdmeijer schreef:
Oke het werkt al. Een maat van me heeft het al gefixed.
Bedankt iedereenbye
(slotje)
Hoe heb je dat gefixt?
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren