Versio

2 array´s in een foreach

Overzicht Reageren

Daniel H

Daniel H

04/01/2012 20:48:47
Quote Anchor link
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
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
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
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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
Gewijzigd op 04/01/2012 20:50:36 door Daniel H
 
PHP hulp

PHP hulp

23/05/2012 14:58:55
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Noppes Homeland

Noppes Homeland

04/01/2012 21:31:18
Quote Anchor link
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)
 
Daniel H

Daniel H

04/01/2012 21:44:17
Quote Anchor link
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.
 
Noppes Homeland

Noppes Homeland

04/01/2012 21:57:03
Quote Anchor link
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.
 
Daniel H

Daniel H

04/01/2012 22:39:31
Quote Anchor link
kijk, daar heb ik wat aan. het is gelukt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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.
 
- SanThe -

- SanThe -

04/01/2012 22:48:46
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest
?>
 
Daniel H

Daniel H

04/01/2012 22:55:56
Quote Anchor link
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?
 
- SanThe -

- SanThe -

04/01/2012 23:14:22
Quote Anchor link
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?
 



Overzicht Reageren

Get Adobe Flash player