Gegevens ophalen (SQL/PHP)

Status
Niet open voor verdere reacties.

Arthur K

Gebruiker
Lid geworden
19 jan 2008
Berichten
41
Eerder heb ik al een soortgelijke vraag hierover gesteld, echter loop ik nu tegen het volgende probleem aan. Zoals te zien op Top Games is het me wel gelukt om alle games op te roepen inclusief een screenshot. Nu is het echter de bedoeling om bijvoorbeeld alleen de games uit de categorie 'Action' te tonen.

Om alle games bijvoorbeeld op te roepen gebruik ik de volgende code:

PHP:
$select = mysql_query("SELECT * FROM games  ORDER BY id DESC LIMIT 0 , 750");

Hoe krijg ik het echter voor elkaar om alleen de games uit de categorie 'Action' weer te geven? De SQL indeling ziet er als volgt uit:

1. Database = Games
2. Tabel = categorieen
3. Vervolgens is er een veld met de naam 'id' en de naam 'naam'.
4. Onder die laatste de naam, staan de diverse categorieen zoals Action met rij 1 Adventure met rij 1 etc. Hoe roep ik nou deze gegevens op? (Of kan ik beter een andere tabel gebruiken?)

Op http://www.topgames.us/voorbeeld1234.jpg heb ik een plaatje van de database structuur bijgevoegd.

Iemand enig idee hoe ik dit moet doen?
 
Laatst bewerkt:
Kun je ook laten zien welke kolommen de tabel "games" bevat? Dit kun je zien met het het commando "desc games;". Het zou helemaal mooi zijn wanneer je ook een beschrijving van de tabel categorieen kunt laten zien ("desc categorieen;"). Een describe van een tabel geeft wat meer informatie als hetgeen in je schermprint is te zien.
 
Code:
ik ga uit van de tabellen:


tabel:games
------------
game_id      <- primaire sleutel
game_name
categorie_id <- verwijzing naar categorie tabel



tabel:categorieen
-----------------
categorie_id     <- primaire sleutel
Naam
 



om een game uit een bepaalde categorie te kunnen tonen, moet je de tabellen games en categorieen met elkaar verbinden.
dit doe je door de primaire-sleutel veld van de tabel categorieen aan de verwijzende sleutel-veld uit games aan elkaar gelijk te stellen:   


select games.* 
  from games,categorieen
 where games.categorie_id = categorieen.categorieen_id
   and categorieen.Naam = 'Action'
 
Ik heb gister het een en ander geprobeerd, onder andere het bovenstaande. Het ging echter helemaal mis :shocked: Ik heb nu dus een backup terug gezet omdat ik ook nog zo stom ben geweest om aan de verkeerde dingen te zitten :o

Om het iets duidelijker te maken heb ik de database op een ander domein geplaatst waarop jullie kunnen inloggen om de database is te bekijken:

http://www.jetztspielen.biz/phpMyAdmin/

Inlog: jetzt_games
Wachtwoord: 12345

Hopelijk weten jullie wat ik moet doen....
 
Ik heb met succes de volgende query uit kunnen voeren:

SELECT *
FROM `games`
WHERE categorie = 'Action'
 
Hmm dan gaat er nog steeds iets mis :o Zie Klik hier (Hij pakt nu alleen de categorie en niet de games uit deze categorie, als ik het juist zie)...
 
De sql is wel goed (zie screenshot), misschien gaat er iets mis met de verwerking van het resultaat?

02.jpg
 
Zit de fout dan misschien in de onderstaande code? (Lijkt mij op zich sterk aangezien hij wel goed functioneert bij andere commando's). Hieronder toch maar even de code:

PHP:
<?
$select = mysql_query("SELECT * FROM 'games' WHERE categorie='Action'");

								  {
							            $i++;

echo "<td valign=\"top\" style=\"background-image: url(images/White.jpg); width: 188px; height: 97px;\">";
							
echo "  <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "    <tr>";
echo "      <td width=\"97\" valign=\"top\" align=\"center\" style=\"padding-top: 8px;\">";

								
if(!file_exists('screenshots1/'.$row['id'].'.jpg'))
								
{
							
echo "<img src=\"screenshots1/noscreen.jpg\" width=\"80\" height=\"80\" alt=\"No screen\" />";
								
}
								
else
								
{
							
echo "<img src=\"screenshots1/".$row['id'].".jpg\" width=\"80\" height=\"80\" alt=\"Screenshot ".$row['naam']."\" />";
								
}

echo "      </td>";
echo "      <td width=\"91\" valign=\"top\" style=\"padding-top: 3px;\">";
echo "        <span class=\"titel\"><a href=\"game.php?id=".$row['id']."\">".$row['naam']."</a></span><br />";
						
echo "        <br />";
							
echo "        Played:<br />";
						
echo "        ".$row['hits']."x<br />";
								
echo "        <br />";
								
echo "      </td>";
							
echo "    </tr>";
							
echo "  </table>";
echo "</td>";
if($i%3 == 0) 
{ 
echo "</tr>"; 
echo "</table>"; 
echo "</td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td>"; 
echo "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">"; 
echo "<tr>"; 
}
								
}
								
?>
 
De tabelnaam moet niet tussen quotes, de regel moet er zo uitzien:
PHP:
$select = mysql_query("SELECT * FROM games WHERE categorie='Action'");
Als je quotes wilt gebruiken, gebruik dan deze:
PHP:
$select = mysql_query("SELECT * FROM `games` WHERE categorie='Action'");
Misschien moeilijk te zien maar het zijn echt andere quotes. :)
 
Ik mis ergens onder:
PHP:
$select = mysql_query("SELECT * FROM games WHERE categorie='Action'");
ik verwacht eerder iets van
PHP:
$select = mysql_query("SELECT * FROM games WHERE categorie='Action'"); 
while($row = mysql_fetch_array($result))
{
<SNIP>
}
 
Hmm dan krijg ik de volgende error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /vhosts/topgames.us/httpdocs/index5a.php on line 22

Zie ook voor de fout http://www.topgames.us/index5a.php

Op lijn 22 staat de volgende regel:

PHP:
while($row = mysql_fetch_array($result))

of

PHP:
$tellen = mysql_num_rows($select);

Beide opties werken helaas alleen niet :( Totale code ziet er als volgt uit:

PHP:
<?
$select = mysql_query("SELECT * FROM games WHERE categorie='Action'");  
while($row = mysql_fetch_array($result)) 
									
	
									
if($tellen == 0)
{
echo "<i>No games...</i>";
}
else
{
$i		= 0;
									
while($row = mysql_fetch_assoc($select))
{
$i++;

echo "<td valign=\"top\" style=\"background-image: url(images/White.jpg); width: 188px; height: 97px;\">";
echo "  <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "    <tr>";
echo "      <td width=\"97\" valign=\"top\" align=\"center\" style=\"padding-top: 8px;\">";

if(!file_exists('screenshots1/'.$row['id'].'.jpg'))
{
echo "<img src=\"screenshots1/noscreen.jpg\" width=\"80\" height=\"80\" alt=\"No screen\" />";
}
else
{
echo "<img src=\"screenshots1/".$row['id'].".jpg\" width=\"80\" height=\"80\" alt=\"Screenshot ".$row['naam']."\" />";
}

echo "      </td>";
echo "      <td width=\"91\" valign=\"top\" style=\"padding-top: 3px;\">";
echo "        <span class=\"titel\"><a href=\"game.php?id=".$row['id']."\">".$row['naam']."</a></span><br />";
echo "        <br />";
echo "        Played:<br />";
echo "        ".$row['hits']."x<br />";
echo "        <br />";
echo "      </td>";
echo "    </tr>";
echo "  </table>";
echo "</td>";
if($i%3 == 0) 
{ 
echo "</tr>"; 
echo "</table>"; 
echo "</td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td>"; 
echo "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">"; 
echo "<tr>"; 
}
}
}
?>
 
Laatst bewerkt:
misscien lomp maar probeer iets van onderstaande eens:
PHP:
define("HOST",'193.238.26.156');
define("MYSQL_USERNAME",'jetzt_games');
define("MYSQL_PASSWORD",'12345');
define("MYSQL_DATABASE",'jetzt_games');
unction dbconnect()
{
	if (!($gdb = @mysql_connect(HOST, MYSQL_USERNAME, MYSQL_PASSWORD)))
	{
	}
	$gdb = mysql_select_db(MYSQL_DATABASE);
	return $gdb;
}
dbconnect();
$query="SELECT * FROM games WHERE categorie='Action'";
$select = mysql_query($query);   
$tellen=1;
if($tellen == 0) 
{ 
	echo "<i>No games...</i>"; 
} 
else 
{
	<SNIP>
}
want
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /vhosts/topgames.us/httpdocs/index5a.php on line 22
krijg je volgens mij ook als je geen database-connectie heb gemaakt
 
Laatst bewerkt:
Ik zal het eens proberen, maar denk niet dat het daar aan ligt. Ik include namelijk de header.php welke vervolgens weer een config file aanroept welke connectie maakt met de SQL database. (Bij de andere commando's zoals alle games tonen werkt het wel, maar ik ga het is proberen, wie weet).
 
Nee dat is helaas niet de oplossing. Nu krijg ik de volgende fout 'No games' terwijl er ruim 500+ games in de database staan. (Zie Klik hier Het belangrijkste deel van de code ziet er nu als volgt uit:

PHP:
<?

								
$query="SELECT * FROM games WHERE categorie='Action'"; 
							
$select = mysql_query($query);
								
if($tellen == 0)
								
{
								
echo "<i>No games...</i>";
								
}
							
else
								
{
$i		= 0;
									
							
while($row = mysql_fetch_assoc($select))
								
{
							
$i++;

echo "<td valign=\"top\" style=\"background-image: url(images/White.jpg); width: 188px; height: 97px;\">";
								
echo "  <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "    <tr>";
echo "      <td width=\"97\" valign=\"top\" align=\"center\" style=\"padding-top: 8px;\">";

								
if(!file_exists('screenshots1/'.$row['id'].'.jpg'))
								
{
								
echo "<img src=\"screenshots1/noscreen.jpg\" width=\"80\" height=\"80\" alt=\"No screen\" />";
								
}
								
else
								
{
								
echo "<img src=\"screenshots1/".$row['id'].".jpg\" width=\"80\" height=\"80\" alt=\"Screenshot ".$row['naam']."\" />";
								
}

echo "      </td>";
echo "      <td width=\"91\" valign=\"top\" style=\"padding-top: 3px;\">";
echo "        <span class=\"titel\"><a href=\"game.php?id=".$row['id']."\">".$row['naam']."</a></span><br />";
								
echo "        <br />";
								
echo "        Played:<br />";
								
echo "        ".$row['hits']."x<br />";
								
echo "        <br />";
								
echo "      </td>";
							
echo "    </tr>";
							
echo "  </table>";
echo "</td>";
if($i%3 == 0) 
{ 
echo "</tr>"; 
echo "</table>"; 
echo "</td>"; 
echo "</tr>"; 
echo "<tr>"; 
echo "<td>"; 
echo "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">"; 
echo "<tr>"; 
}
}
}
?>
 
Vandaar dat ik
PHP:
$tellen=1;
had toegevoegd :)
Ik ben alleen bang dat ik niet verder kom, omdat ik geen externe toegang heb op jouw database. Een voorzorg van providers, normaal goed, maar in dit verhaal kan ik zo niets meer betekenen. Want op de een of andere manier gaat gewoon iets heel simpels fout.
 
Dat is de oplossing :love: Zo een klein foutje zeg :shocked: :eek:

Heel erg bedankt, super :love::thumb: Zie klikker de klik
 
Laatst bewerkt:
PHP:
<?php
                        
$query="SELECT * FROM games WHERE categorie='Action'";  
$select = mysql_query($query) or die(mysql_error());
$tellen = mysql_num_rows($select);                              
if($tellen == 0) {
  echo "<i>No games...</i>";
} else {
  $i = 0;
  while($row = mysql_fetch_array($select)) {
    $i++; 
    echo "<td valign=\"top\" style=\"background-image: url(images/White.jpg); width: 188px; height: 97px;\">";
    echo "  <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; 
echo "    <tr>"; 
echo "      <td width=\"97\" valign=\"top\" align=\"center\" style=\"padding-top: 8px;\">"; 
    if(!file_exists('screenshots1/'.$row['id'].'.jpg')) {
      echo "<img src=\"screenshots1/noscreen.jpg\" width=\"80\" height=\"80\" alt=\"No screen\" />"; 
    } else {
      echo "<img src=\"screenshots1/".$row['id'].".jpg\" width=\"80\" height=\"80\" alt=\"Screenshot ".$row['naam']."\" />";
    }
echo "      </td>"; 
echo "      <td width=\"91\" valign=\"top\" style=\"padding-top: 3px;\">"; 
echo "        <span class=\"titel\"><a href=\"game.php?id=".$row['id']."\">".$row['naam']."</a></span><br />"; 
                                 
echo "        <br />"; 
                                 
echo "        Played:<br />"; 
                                 
echo "        ".$row['hits']."x<br />"; 
                                 
echo "        <br />"; 
                                 
echo "      </td>"; 
                             
echo "    </tr>"; 
                             
echo "  </table>"; 
echo "</td>"; 
if($i%3 == 0) {  
echo "</tr>";  
echo "</table>";  
echo "</td>";  
echo "</tr>";  
echo "<tr>";  
echo "<td>";  
echo "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\" align=\"center\">";  
echo "<tr>";  
} 
} 
} 
?>
Probeer die eens.

Ik moet wel zeggen dat je veel onnodige echo's aanroept. Je kunt gewoon door blijven gaan bij 1 echo, die hoef je niet na elke tag weer te sluiten.
 
^ probleem is net verholpen, zie post boven je. Toch bedankt voor de moeite :thumb::love:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan