Hulp met PHP ERROR

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin De Ras

Kevin De Ras

25/08/2012 16:41:53
Quote Anchor link
Dag iedereen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


En de database ziet er zo uit :

Afbeelding

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

PHP hulp

26/11/2024 19:42:50
 
Obelix Idefix

Obelix Idefix

25/08/2012 16:53:00
Quote Anchor link
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?
 
John Berg

John Berg

25/08/2012 16:54:04
Quote Anchor link
Als je het eens zo aanpast, wat zie je dan?

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
<?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);
?>
Gewijzigd op 25/08/2012 16:55:18 door John Berg
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:07:51
Quote Anchor link
John Berg dan komt dit er te staan :
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
 
Eddy E

Eddy E

25/08/2012 17:08:57
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE ???????? = '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
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:09:21
Quote Anchor link
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?


Als ik dit zet :
$klas='4WET';
dan werkt het wel goed.
Dus het moet daar iets mee te maken hebben
 
Erwin H

Erwin H

25/08/2012 17:09:40
Quote Anchor link
$klas was dus leeg, er staat geen waarde in.
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:11:18
Quote Anchor link
In mijn database staat elke klas.
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
 
John Berg

John Berg

25/08/2012 17:15:00
Quote Anchor link
Aangezien $klas=$_POST['klas'] gepost wordt uit een formulier, zonder dat er validatie plaats vind gaat het dus fout.

Verander $klas=$_POST['klas']; in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$klas
= mysql_escape_string($_POST['klas']);
if(!$klas) {
  echo 'geen klas ingevuld';
  exit(1)
}

?>
 
Obelix Idefix

Obelix Idefix

25/08/2012 17:24:23
Quote Anchor link
Kevin De Ras op 25/08/2012 17:09:21:
Als ik dit zet :
$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:
fout in SELECT * FROM nieuws where = '1' order by
blijkt toch echt dat $klas niet (goed) wordt doorgegeven.
 
Erwin H

Erwin H

25/08/2012 17:24:25
Quote Anchor link
Kevin De Ras op 25/08/2012 17:11:18:
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.
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:27:27
Quote Anchor link
Dag John,

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.
 
Erwin H

Erwin H

25/08/2012 17:28:05
Quote Anchor link
Overigens even eerst heel iets anders: dit is een hele slechte manier om je database op te bouwen. Klasnamen lijken mij namelijk redelijk variabel. Volgend jaar kunnen die anders zijn. Aangezien je nu te kolommen naar de klassen hebt genoemd kan je dat niet eenvoudig aanpassen. Wil je dat doen, dan zal je je databasestructuur moeten aanpassen. Dat is NOOIT een goed idee. Een nieuwe klas, een klas verwijderen een klasnaam veranderen zou je allemaal eenvoudig op de waarde van een kolom moeten kunnen doen.

Zeer dringend advies: kijk hier nog eens goed naar en probeer het te veranderen. Zo gaat het je gigantische problemen opleveren later!
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:30:17
Quote Anchor link
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!
 
John Berg

John Berg

25/08/2012 17:33:57
Quote Anchor link
@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)
 
Obelix Idefix

Obelix Idefix

25/08/2012 17:39:30
Quote Anchor link
Daarnaast zie ik net nog staan: datum - varchar(14).
Lijkt me niet juist.
Gewijzigd op 25/08/2012 17:44:16 door Obelix Idefix
 
Kevin De Ras

Kevin De Ras

25/08/2012 17:41:00
Quote Anchor link
die varchar werkt altijd perfect.
Het is makkelijker met een varchar te werken in een swf bestand
 
Obelix Idefix

Obelix Idefix

25/08/2012 17:49:39
Quote Anchor link
Die varchar werkt niet perfect. Een datum is geen varchar. Dat het makkelijker werkt in swf is fijn voor je, maar zoals je het nu gebruikt in je database is fout. Punt.

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.
 
Erwin H

Erwin H

25/08/2012 18:13:11
Quote Anchor link
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!

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id, naam FROM klas

Wil je dan alle zesde klassen hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id, naam FROM klas WHERE jaargang = 6;


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT bericht
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT bericht
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.
 
Kevin De Ras

Kevin De Ras

05/09/2012 14:53:10
Quote Anchor link
Bedankt,
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!
 



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.