Eerst even een inleinding: Nou ik ben sinds een jaar geïnteresseerd in PHP. Het bleef eigenlijk alleen bij lezen van boeken, voor de rest niets. Sinds april ben ik echter aan de slag gegaan met PHP en ben ik nu in een stadium dat ik al wat weet, ik kan nog geen scripts zelf ontwerpen etc. omdat ik daarvoor nog niet genoeg kennis heb.
Mijn bedoeling is om echter een site te gaan ontwerpen in PHP. Vooral een nieuwssysteem spreekt mij aan. Via scripts in boeken heb ik geprobeerd kennis hierover op te doen, heb diverse dingen geprobeerd maar het wil mij absoluut niet lukken. Probleem is dat ik telkens foutmeldingen krijg en deze niet weet op te lossen. Ik zoek hiervoor de fora af en Google om informatie over de fout te vinden, het heeft mij tot nu toe echter niks geholpen.
Ik kom nu in de problemen met de mysql_fetch_array. Deze gaf aan: mysql_fetch_array(): supplied argument is not a valid MySQL result.
Nu heb ik or die erbij gezet ik krijg ik helemaal niks te zien, pagina blijft dus leeg. Hieronder de code.
<?php
$query = "SELECT * FROM nieuws SORT BY publicatie DESC";
$resultaat = mysql_query($query)
or die ( "Kan de query niet vinden");
//Berichten tonen
while ($row = mysql_fetch_array($resultaat))
{
Ik weet niet wat hierin fout is ik ben ten einde raad. De gegevens deze ik opgegeven heb staan in de database. Hopelijk levert het iets op. Als er meer gegevens nodig zijn dan zal ik deze plaatsen. Er staan gegevens is desbetreffende MySQL tabel.
misschien dat de titel aan te passen is, wist niks beters.
Dus je hebt verbinding gemaakt tot de database server en de juiste database geselecteerd en er is een tabel genaamd nieuws met daarin een veld genaamt publicatie?
Als je query problemen hebt, raad ik je aan om deze via phpmyadmin eens te testen en te zien of het daar ook verkeerd gaat.
$row['$publicatie'] en $row['$nieuwstitel'] lijken me niet goed, omdat je daar variabelen in hebt staan. Door de enkele quotes worden ze echter niet als variabelen geïnterpreteerd maar als strings. Ze worden dus overgenomen zoals ze er exact staan (dus $publicatie en $nieuwstitel).
Aangezien er geen velden in je database zullen zijn met de namen $publicatie en $nieuwstitel, moet je dus óf de $ weghalen (ervan uitgaande dat de namen van de tabelvelden 'publicatie' en 'nieuwstitel' zijn, of je moet de enkele quotes weglaten.
[edit]Daarnaast is het probleem waarschijnlijk SORT BY. In MySQL heet dat ORDER BY ;)[/edit]
@Danny,
de verbinding met de databse heb ik inderdaad gemaakt, er is een tabel nieuws en een veld publicatie. Ik heb nog geprobeerd om het op iets anders te sorteren maar dit werkt ook niet.
In de phpmyadmin werkt gewoon alles. Ik had wel een fout gemaakt van: SORT BY ipv ORDER BY ik dacht dus dat daar het probleem lag. Maar in phpmyadmin werkt de query dus gewoon.
@Kasper, ik heb de $ ervoor weggehaald, maar het probleem blijft. De code deze ik hier geplaatst heb is de gehele PHP code. Kan het niet zijn dat ik er iets aan moet toevoegen?
Meestal als je problemen hebt, moet je proberen het doel te bereiken met zo min mogelijke code om te zien of het dan nog fout gaat.
Wellicht kijk ik er helemaal langs heen hoor, ik gebruik fetch_array nooit, maar dat is een kwestie van voorkeur. Ik zal morgen daar wel even mee bezig gaan (PM me eventueel even om mij hier aan te herinneren).
mysql_query(...) geeft boolean false terug als de query verkeerd is (dus dat je iets doet wat niet kan). Boolean false is geen MySQL result, wat je anders dus wel zou krijgen. Een goede oplossing is:
<?php
if( ($resultaat = mysql_query($query)) === false )
{
# Query is verkeerd (spellingsfout ofzo)
# Eventueel mysql_errno(), mysql_error() aanroepen.
# Een log bericht aanmaken
# Trigger error aanroepen
# Script afsluiten (ook weer niet de beste oplossing voor een online site)
exit;
}
?>
Je zou ook een MySQL klasse kunnen maken met een methode query.
De bedoeling is dan dat die klasse alleen de mysql_* functies aanroept.
Maar ik denk dat je hier nog wat te weinig kennis voor hebt. Maar dit zou wel een mooie oefening zijn.
Dat is helemaal geen goede oplossing. Waarom een heel script stoppen als een query mislukt? Geef liever een zinvolle foutmelding, of log hem zodat de user hem niet te zien krijgt maar jij wel.
Voorbeeld:
<?php
$sql = "
SELECT blabla
FROM blabla
WHERE blabla
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_errno () . ': ' . mysql_error ());
}
else {
while ($row = mysql_fetch_assoc ($res)) {
// doe iets met $row
}
}
?>
Blijkbaar heet je database 'forum', en de tabel die je wilt gebruiken 'nieuws'. Alleen zegt mysql nu dat deze tabel niet bestaat. Klopt de naam wel? Heb je wel de goede database geslecteerd?