Krijg mysql_fetch_array niet werkende
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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))
{
echo "<tr>
<td class='vbpic' rowspan='2'></td>
<td class='datum' valign='top'> ".$row['$publicatie']."</td>
</tr>
<tr>
<td class='vbtekst' valign='top'> ".$row['$nieuwstitel']." <br> ".$row['$intro']." </td>
</tr>";
}
?>
$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))
{
echo "<tr>
<td class='vbpic' rowspan='2'></td>
<td class='datum' valign='top'> ".$row['$publicatie']."</td>
</tr>
<tr>
<td class='vbtekst' valign='top'> ".$row['$nieuwstitel']." <br> ".$row['$intro']." </td>
</tr>";
}
?>
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.
Gewijzigd op 01/01/1970 01:00:00 door Annemarie Peters
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.
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 ;)
Gewijzigd op 01/01/1970 01:00:00 door Winston Smith
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?
Probeer eens een heel eenvoudig stukje code te creeeren waarbij je dus doet:
1. verbinding maken, database selecteren.
2. query uitvoeren
3. dan : $row = mysql_fetch_array($resultaat)
en dan var_dump($row);
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).
Ik heb het zojuist uitgeprobeerd, en krijg het volgende:
array(19) { [0]=> string(1) "1" ["nieuws_id"]=> string(1) "1" [1]=> string(6) "nieuws" ["cat_id"]=> string(6) "nieuws" [2]=> string(4) "Test" ["nieuwstitel"]=> string(4) "Test" [3]=> string(19) "2007-06-20 22:52:16" ["publicatie"]=> string(19) "2007-06-20 22:52:16" [4]=> string(15) "Dit is een test" ["intro"]=> string(15) "Dit is een test" [5]=> string(9) "Annemarie" ["auteur"]=> string(9) "Annemarie" [6]=> string(22) "Ik hoop dat dit werkt!" ["nieuwsbericht"]=> string(22) "Ik hoop dat dit werkt!" [7]=> string(0) "" ["vbpic"]=> string(0) "" [8]=> NULL [9]=> string(0) "" ["urlnaam"]=> string(0) "" }
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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;
}
?>
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.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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
}
}
?>
$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
}
}
?>
Even mijn kommentaar doorlezen :D
Je hebt groot gelijk, idd
Notice: 1146: Table 'forum.nieuws' doesn't exist in c:\apache\htdocs\annemarie\actueel.php on line 42
Ik snap niet waarom er forum.nieuws staat ??
Regel 42 is dan deze:
trigger_error (mysql_errno () . ': ' . mysql_error ());
Ik heb wel niet in script staan waarmee errrors worden aangegeven.
Ik heb in elk geval al een andere melding als eerst.
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?
Blanche schreef op 23.06.2007 13:34:
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?
Dit zijn de gegevens:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$hostnaam = "localhost";
$gebruiker = "";
$wachtwoord = "";
$connection = mysql_connect($hostnaam,$gebruiker,$wachtwoord)
or die ("Kan geen verbinding maken met de database.");
$databasenaam = "website";
$db = mysql_select_db($databasenaam,$connection)
or die ("Kan geen database selecteren");
?>
$hostnaam = "localhost";
$gebruiker = "";
$wachtwoord = "";
$connection = mysql_connect($hostnaam,$gebruiker,$wachtwoord)
or die ("Kan geen verbinding maken met de database.");
$databasenaam = "website";
$db = mysql_select_db($databasenaam,$connection)
or die ("Kan geen database selecteren");
?>
Ik heb inderdaad wel een databasenaam met forum. Daarom snap ik niet dat die nu forum aangeeft? Maar goed dat verklaart wel het probleem. Dus dat die op de één of andere manier verkeerde verbinding maakt.
Ik had ook een script aangemaakt deze iets moest toevoegen, maar dat heeft die ook niet gedaan (ik werk nu wel op een lokale server, maar daar zal het niet aanliggen).
Heb je nergens anders in je script misschien nog een mysql_select_db() staan? Of bijvoorbeeld een script dat je include waarin dat gebeurd?
Wel zijn er nog geen meldingen op de pagina. Dus de pagina is nu leeg.
Bedankt voor deze tip in elk geval al.
Gewijzigd op 01/01/1970 01:00:00 door Annemarie Peters
Misschien een beetje overbodige vraag, maar heb je wel gegeven in je database staan dan?
Bedankt!! Nu verder gaan leren.