Goedenavond,

Waarschijnlijk maak ik een denk fout, maar ik zou niet weten hoe ik dit op kan lossen. Ik leg het probleem even uit. Er zijn 2 query's aanwezig. (zie hier benden). Er word gekeken in welke clan's de user zit. De id's van de clan's worden in $object['clan_id'] gegooid. $object is een array. Daarna is het de bedoeling dat van beide clans de gegevens in een array in $clannaam worden gegooid. Echter staan nu alleen de gegevens van de laatste clan in $clannaam.
Nu is de vraag hoe krijgen we we de gegevens van beide clan's in de var $clannaam? Hopelijk ben ik zo duidelijk genoeg. De aantal clans zijn variabel!

Btw er word gebruik gemaakt van pdo(mysql).

Sql Query's

CREATE TABLE IF NOT EXISTS `codbase_clan` (
  `clan_id` int(250) NOT NULL AUTO_INCREMENT,
  `clan_tag` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `clan_naam` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `clan_games` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `clan_punten` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `clan_web` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `clan_opmerking` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`clan_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `codbase_clan_leden` (
  `clan_id` varchar(100) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `user_name` varchar(250) NOT NULL,
  `clan_rang` varchar(250) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Php

<?php
	if (!$_GET['clan']) {
		$_GET['clan'] = "0";
	}

	function get_clan($username) {
	global $db, $database_leden, $database_clan;
	
		$getid = "SELECT * FROM ".$database_leden." WHERE user_name = '".$username."'";
		$clanid = $db->query($getid);
			
		foreach($clanid as $object) {
			// $object['clan_id'] bevat de id's van 2 clans. (1 & 2) #print_r($object['clan_id']);
			$getname = "SELECT * FROM ".$database_clan." WHERE clan_id = '".$object['clan_id']."'";
			$clannaam = $db->query($getname);	
			//$clannaam bevat de gegevens van de laatste waarde uit $object['clan_id'] (clan 2) en dus niet de waardes van clan 1 en 2
		}
	
	return $clannaam;
	}

	
		foreach(get_clan($userdata['user_name']) as $object) {
			if ($object['clan_id'] == $_GET['clan']) {
			echo "<a href='?clan=".$object['clan_id']."'>".$object['clan_naam']."<br />";
			echo "<div style='margin-left:10px;'>";
			echo "<a href='ledenlijst.php?clan=".$object['clan_id']."'>Ledenlijst</a><br />";
			echo "<a href='clan_rangs.php?clan=".$object['clan_id']."'>Clan rangs</a>";
	
			echo "</div>";
			} else {
			echo "<a href='?clan=".$object['clan_id']."'>".$object['clan_naam']."<br />";
			}
	
		}
?>


Edit1: Topic was niet volledig
Het is en blijft toch bagger dat "clan" gebeueren.

Waarom wordt die informatie niet in 1 keer op een normale manier opgehaald.

En je vergeet ook nog simpelweg de php parse error te vermelden.

Overige opmerkingen:
- geen global's defineren
- geen variabele tabelnamen in een sql plaatsen
- je vernaggelt een $_GET waarde
- de juiste script logica ontbreekt
- echo html in 1 echo blok en niet per regel
- verdiep je eens in hoe je met array's moet omgaan
- verdiep je dan ook maar in SQL en Database(s)
Bedankt voor je reactie.

Waarom wordt die informatie niet in 1 keer op een normale manier opgehaald.
Omdat gebruikers ook een bepaalde rang hebben, daarom is er een tabel met user, rang en clan id en een aparte tabel voor alle clan gegevens. Wat zou dan volgens jou een "normale" manier zijn om dit wel te bereiken?

veder zijn er geen error's daarom viel der niks te melden.
Bedankt voor de genoemde opmerkingen ga er aan werken, alleen vraag ik me af waarom ik de bovenste 2 punten (van de opmerkingen) niet zou mogen doen.
1 select statement welke de data ophaalt uit beide tabellen, die jij nodig hebt.
-> zoek: SQL JOIN, dat is dus het laatste punt van mijn opmerkingen

opmerkingen gerelateerd aan genoemde opmerkignen:
1. daar kom je vanzelf nog wel achter, hoop ik
2. omdat dat simpelweg niet hoort waarden van superglobals manipuleren en het ook geen zin heeft als de script logica klopt.
kijk, daar heb ik wat aan. het is gelukt.


SELECT codbase_clan_leden.clan_id, codbase_clan.clan_id, codbase_clan.clan_naam
FROM codbase_clan_leden 
INNER JOIN codbase_clan
ON codbase_clan_leden.clan_id=codbase_clan.clan_id
WHERE user_name = '".$username."'


Beetje jammer dat je geen normale toelichting kan geven op de global's -> "daar kom je vanzelf nog wel achter, hoop ik"
hier bereik ik nog niet zo veel mee. We zijn hier tenslotte om elkaar te helpen.
Noppes vergeet nog te melden dat je nooit userinput direct (zonder enige controle) in een query moet zetten De query is daardoor lek -> zie sql-injection.

return $clannaam;
Dit zal nooit een array() teruggeven. Vandaar dat er een foutmelding wordt verwacht.

Zet helemaal bovenin:
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest
?>
Ja, ik moest nog $db->quote() toepassen. Dit was ik niet vergeten.
Deze had ik er niet boven gezet omdat ik één resultaat terug kreeg, maar bedankt voor de tip.
@Santhe kan jij mij wel uitleggen wat er fout is aan het gebruik van global in een functie?
Ik denk dat Noppes deze global bedoelt: $_GET['clan'] = "0";
Dat is inderdaad niet aan te raden omdat standaard in een GET de invoer van de gebruiker zit. En op deze manier ga jij de gebruikersinput veranderen. Dat kan niet de bedoeling zijn. En waarom staat die 0 (nul) tussen quotes?

Reageren