Hulp met PHP ERROR
ik ben net nieuw in het programmeren en ik heb al een ERROR die ik maar niet opgelost krijg het gaat over het volgende :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in news.php on line 7
dat script bevat volgende code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$klas=$_POST['klas'];
include('mysqlsecure/include.php');
$result = mysql_query("SELECT * FROM nieuws where $klas = '1' order by datum desc LIMIT 0,5");
while ($row = mysql_fetch_assoc($result)) {
echo "&".$row['auteur']."|".$row['datum']."|".$row['titel']."|".$row['bericht'];
}
mysql_close($link);
?>
$klas=$_POST['klas'];
include('mysqlsecure/include.php');
$result = mysql_query("SELECT * FROM nieuws where $klas = '1' order by datum desc LIMIT 0,5");
while ($row = mysql_fetch_assoc($result)) {
echo "&".$row['auteur']."|".$row['datum']."|".$row['titel']."|".$row['bericht'];
}
mysql_close($link);
?>
En de database ziet er zo uit :
Zo moet het al het nieuws halen waar de klas 1 is.
Als het nul is mag het niet zichtbaar zijn voor de klas.
Alvast bedankt!
$klas=$_POST['klas']; waarom kopieren? Je voert er geen controle op uit of het bestaat en of dat wat er mogelijk inzit voldoet aan wat je verwacht.
Je databasemodel lijkt mij niet optimaal.
Variabelen buiten quotes (en beveilig ze in je query).
Mis foutafhandeling van je query.
Debug eens: echo je query naar het scherm. klopt dat met wat je verwacht?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$klas=$_POST['klas'];
include('mysqlsecure/include.php');
$sql = "SELECT * FROM nieuws where $klas = '1' order by datum desc LIMIT 0,5";
$result = mysql_query( $sql );
if(!$result){
echo 'fout in ' . $sql;
echo mysql_error();
exit(1);
}
while ($row = mysql_fetch_assoc($result)) {
echo "&".$row['auteur']."|".$row['datum']."|".$row['titel']."|".$row['bericht'];
}
mysql_close($link);
?>
$klas=$_POST['klas'];
include('mysqlsecure/include.php');
$sql = "SELECT * FROM nieuws where $klas = '1' order by datum desc LIMIT 0,5";
$result = mysql_query( $sql );
if(!$result){
echo 'fout in ' . $sql;
echo mysql_error();
exit(1);
}
while ($row = mysql_fetch_assoc($result)) {
echo "&".$row['auteur']."|".$row['datum']."|".$row['titel']."|".$row['bericht'];
}
mysql_close($link);
?>
Gewijzigd op 25/08/2012 16:55:18 door John Berg
fout in SELECT * FROM nieuws where = '1' order by datum desc LIMIT 0,5You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1' order by datum desc LIMIT 0,5' at line 1
Wat moet 1 zijn? $klas is blijkbaar leeg. Dat moet je dus eerst oplossen.
Die 1 hoeft geen enkele haakjes, omdat het een integer (getal) is.
Gewijzigd op 25/08/2012 17:09:21 door Eddy E
Obelix en Idefix op 25/08/2012 16:53:00:
Is er een database verbinding?
$klas=$_POST['klas']; waarom kopieren? Je voert er geen controle op uit of het bestaat en of dat wat er mogelijk inzit voldoet aan wat je verwacht.
Je databasemodel lijkt mij niet optimaal.
Variabelen buiten quotes (en beveilig ze in je query).
Mis foutafhandeling van je query.
Debug eens: echo je query naar het scherm. klopt dat met wat je verwacht?
$klas=$_POST['klas']; waarom kopieren? Je voert er geen controle op uit of het bestaat en of dat wat er mogelijk inzit voldoet aan wat je verwacht.
Je databasemodel lijkt mij niet optimaal.
Variabelen buiten quotes (en beveilig ze in je query).
Mis foutafhandeling van je query.
Debug eens: echo je query naar het scherm. klopt dat met wat je verwacht?
Als ik dit zet :
$klas='4WET';
dan werkt het wel goed.
Dus het moet daar iets mee te maken hebben
$klas was dus leeg, er staat geen waarde in.
Als een klas het bericht mag zien staat er : 1
Als een klas het bericht niet mag zien staat er : 0
Dus ik POST de klas vanuit mijn SWF en stuur hem door naar de php file.
Dan ga ik kijken waar klas = 1
dan gaat hij zoeken in de database of de klas bijvoorbeeld 4WET 1 is .
Zoja echo alles wat nodig is zo nee. Niks posten
Toevoeging op 25/08/2012 17:12:36:
Erwin H op 25/08/2012 17:09:40:
$klas was dus leeg, er staat geen waarde in.
Klopt niet want mijn swf stuurt wel degelijk de klas.
En toch krijg ik geen reactie
Verander $klas=$_POST['klas']; in
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$klas= mysql_escape_string($_POST['klas']);
if(!$klas) {
echo 'geen klas ingevuld';
exit(1)
}
?>
$klas= mysql_escape_string($_POST['klas']);
if(!$klas) {
echo 'geen klas ingevuld';
exit(1)
}
?>
Kevin De Ras op 25/08/2012 17:09:21:
Als ik dit zet :
$klas='4WET';
dan werkt het wel goed.
$klas='4WET';
dan werkt het wel goed.
Maar wat er in je query staat is $klas=1 en niet $klas=4WET.
4WET zie ik wel in je database staan, maar 1 nergens.
Daarnaast, uit
Kevin De Ras op 25/08/2012 17:07:51:
blijkt toch echt dat $klas niet (goed) wordt doorgegeven.fout in SELECT * FROM nieuws where = '1' order by
Kevin De Ras op 25/08/2012 17:11:18:
Klopt niet want mijn swf stuurt wel degelijk de klas.
En toch krijg ik geen reactie
Erwin H op 25/08/2012 17:09:40:
$klas was dus leeg, er staat geen waarde in.
Klopt niet want mijn swf stuurt wel degelijk de klas.
En toch krijg ik geen reactie
Dat is allemaal leuk en aardig, maar MySQL is vrij duidelijk:
Quote:
SELECT * FROM nieuws where = '1'
Tussen de 'where' en '=' moet de inhoud van $klas staan en..... daar staat niets. $klas was dus leeg.
in de swf kan ik geen code plaatsen alles moet dus in news.php gebeuren.
En aangezien de klas gepost wordt vind ik het eigenlijk maar raar dat hij niks geeft.
Zeer dringend advies: kijk hier nog eens goed naar en probeer het te veranderen. Zo gaat het je gigantische problemen opleveren later!
En bijvoorbeeld 1 kolom KLAS te maken.
En daar dan de klas in posten.
Maar als ik dan aan al mijn klassen iets wil tonen of bijvoorbeeld enkel mijn zesdes is dat een hele boel werk. Indien je daar toch een oplossing voor zou hebben ben ik bereid deze boel direct aan te passen!
@Kevin: ook al kun je de $_POST waarde niet beinvloeden, dan nog zal het stukje code dat ik gaf het probleem 'oplossen' (omzeilen is een betere benaming)
Lijkt me niet juist.
Gewijzigd op 25/08/2012 17:44:16 door Obelix Idefix
Het is makkelijker met een varchar te werken in een swf bestand
Je vraagt ons om een oplossing. We geven je tips. We geven aan wat er (mogelijk) niet goed gaat en hoe je het kunt controleren/oplossen.
Jouw enige reactie is verdedigend/ontwijkend. swf werkt makkelijker/prima. Niet dus; $klas komt niet door en een datum als varchar is ronduit fout.
Als je met de tips/oplossingen niets wilt doen, dan houdt het wat mij betreft op.
De oorzaak van je probleem staat hierboven: $klas komt niet goed door.
Kevin De Ras op 25/08/2012 17:30:17:
Dqg Erwin ik heb daar ook al naar gekeken om het anders aan te pakken.
En bijvoorbeeld 1 kolom KLAS te maken.
En daar dan de klas in posten.
Maar als ik dan aan al mijn klassen iets wil tonen of bijvoorbeeld enkel mijn zesdes is dat een hele boel werk. Indien je daar toch een oplossing voor zou hebben ben ik bereid deze boel direct aan te passen!
En bijvoorbeeld 1 kolom KLAS te maken.
En daar dan de klas in posten.
Maar als ik dan aan al mijn klassen iets wil tonen of bijvoorbeeld enkel mijn zesdes is dat een hele boel werk. Indien je daar toch een oplossing voor zou hebben ben ik bereid deze boel direct aan te passen!
De oplossing: SQL.
Klink als een dooddoener. SQL is echter een zeer krachtige taal waarmee je heel veel kan in een database, mits (!) je structuur goed is.
Ik ken je project niet en dus is het zo ook moeilijk om te vertellen wat je zou moeten doen. Maar grofweg denk ik dat je een extra tabel 'klas' nodig hebt. Daarin heb je dan velden als 'id' (uniek int veld), 'naam', 'jaargang' etc. Wil je alle klassen hebben:
Wil je dan alle zesde klassen hebben:
Verder ziet dit eruit als berichten aan bepaalde klassen. Ook dat kan je dan vereenvoudigen. Zet een extra kolom in je tabel 'klas_id'. Waarin je aangeeft voor welke klas het bericht is. Wil je dan alle berichten voor klas X hebben:
Code (php)
1
2
3
4
2
3
4
SELECT bericht
FROM nieuws
INNER JOIN klas ON nieuws.klas_id = klas.id
WHERE klas.naam = 'X'
FROM nieuws
INNER JOIN klas ON nieuws.klas_id = klas.id
WHERE klas.naam = 'X'
Wil je het voor alle zesde klassen hebben:
Code (php)
1
2
3
4
2
3
4
SELECT bericht
FROM nieuws
INNER JOIN klas ON nieuws.klas_id = klas.id
WHERE klas.jaargang = 6
FROM nieuws
INNER JOIN klas ON nieuws.klas_id = klas.id
WHERE klas.jaargang = 6
Dit ziet er waarschijnlijk allemaal nog wat complex uit en ik zal je niet vertellen dat SQL simpel is. De basis (SELECT * FROM nieuws) is simpel, maar wil je er echt gebruik van maken dan kost het wat tijd. Die tijd win je echter terug. Als je basis namelijk goed is dan kan je er later alles mee doen wat je wilt.
ik heb de mysql database aangepast zoals jij zei.
Maar om de gegevens op te halen werk ik nog steeds met mysql,
maar met behulp van jouw voorbeelden ging dat snel.
Heel erg bedankt!