LS,

Voor een nieuwe versie van mijn scorelijst op mijn hangman spel wil ik met drie arrays tegelijk werken om
1. vanuit de $score_tables - array een tabelnaam op te halen waarmee ik met een SELECT in de database de hoogste scores zal ophalen.
De gebruiker zal deze naam niet in het scherm zien.
2. vanuit de $categories - array de categorienaam van een tabel op te halen om aan de gebruiker te tonen.
3. de $word_amount[] - array met behulp van de uitkomst van de query te vullen.

Uiteindelijk moet de tabel die op het scherm getoond moet worden er zo uitzien:

[m.b.v. $categories] || [m.b.v. $word_amount]
UIT DE TYCOON NEWSPAPER || 876
CONTAMINATIES || 57
ONBESTAANDE BEROEPEN || 122
LEUK WOORD VOOR GALGJE -MOEILIJK- || 104
etc.

In plaats daarvan wordt het volgende getoond, op basis van de huidige code die ik nu heb:
[m.b.v. $categories] || [m.b.v. $word_amount]
UIT DE TYCOON NEWSPAPER || 876
CONTAMINATIES || 876
ONBESTAANDE BEROEPEN || 57
LEUK WOORD VOOR GALGJE -MOEILIJK- || 57
etc.

Probleem waar het op stuk loopt:
Variable $iSize telt de inhoud van de array $word_amount 2x!
Zou array $word_amount 14 records bevatten, dan wordt $iSize op 28 gezet, etc.

Eigen poging om het op te lossen staat in de code onder '// Mijn poging'.
Maar levert als resultaat dat er inderdaad de helft zoveel regels wordt afgedrukt, maar nog altijd met opeenvolgend elke waarde uit $word_amount 2x.

Hieronder mijn code en daaronder de url naar de betreffende live-pagina. Mocht er nog meer info wenselijk zijn dan hoor ik het graag.

<?php
// ****************************************************************************************
// GET SCORE PER CATEGORY FOR THIS CRIMINAL *
// ****************************************************************************************
// Per categorie de score ophalen van deze crimineel
// ****************************************************************************************
foreach ($score_tables as $table)
{
$sql_times_hangman = "SELECT COUNT( `best` ) FROM `$table` WHERE `best` = '$criminal'";
$result = mysql_query($sql_times_hangman) or die(mysql_error());
if($localmode === true)
{
$adminqueries .=
"<br>SQL hoogste score van crimineel in categorie " . $table . ": " .
$sql_times_hangman . "<br>";
}

$word_amount[] = $amount;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $amount)
{
array_push($word_amount, $amount);
echo $amount . "<br>";
}
}
}

// ****************************************************************************************
// SHOW COLUMS WITH SCORE DETAILS *
// ****************************************************************************************
// Weergave van score
// ****************************************************************************************

$iSize = count($word_amount) >= count($categories) ? count($word_amount) : count($categories);

// Mijn poging :
// $iSize = ($iSize / 2);

for ($i = 0; $i < $iSize; $i++)
{
echo
'<tr><td>'.(isset($categories[$i]) ? $categories[$i] : '&nbsp;').'</td>
<td>'.(isset($word_amount[$i]) ? $word_amount[$i] : '&nbsp;').'</td></tr>';
}


// ****************************************************************************************
?>

URL: http://www.wsnoi.com/index.php?page=oldhangman

Vast bedankt voor het meedenken!

Groeten,

Gsorsnoi

Toevoeging de twee arrays $score_tables & $categories:

<?php
// ****************************************************************************************
// CREATE SCORE TABLES ARRAY *
// ****************************************************************************************

$score_tables = array(

1 => "hangman",
2 => "hang_contaminaties",
3 => "hang_onbest_beroep",
4 => "hang_leuk_hard",
5 => "hang_marten_toonder",
6 => "hang_medisch",
7 => "hang_nost_kindertv",
8 => "hangman_pokemon",
9 => "hang_geletrui",
10 => "hang_basket",
11 => "hang_emoties",
12 => "hang_wii",
13 => "hang_auto",
14 => "hang_overdebijbel"
);
// ****************************************************************************************
// CREATE AVAILABLE CATEGORY ARRAY *
// ****************************************************************************************
$categories = array(

1 => "UIT DE TYCOON NEWSPAPER",
2 => "CONTAMINATIES",
3 => "ONBESTAANDE BEROEPEN",
4 => "LEUK WOORD VOOR GALGJE -MOEILIJK-",
5 => "MARTEN TOONDER",
6 => "MEDISCHE WERELD",
7 => "NOSTALGISCHE KINDER TV",
8 => "POKEMON",
9 => "GELE TRUIDRAGERS",
10 => "NBA BASKETBALLSPELERS",
11 => "EMOTIONELE TOESTANDEN",
12 => "WII GAMES",
13 => "AUTOMERKEN",
14 => "OVER DE BIJBEL"
);
?>
<?php
for ($i = 0; $i <= ($iSize/2); $i++)
{
echo
'<tr><td>'.(isset($categories[$i]) ? $categories[$i] : '&nbsp;').'</td>
<td>'.(isset($word_amount[$i]) ? $word_amount[$i] : '&nbsp;').'</td></tr>';
}
?>

perhaps??
Koen,

Bedankt voor het meedenken.
Dit blijkt echter dezelfde uitwerking te hebben als de poging die ik zelf had ondernomen met het stukje code:

<?php
$iSize = ($iSize / 2);
?>

Zie regel 37 / 38 in mijn oorspronkelijke code.

Op de site heb ik dit nu aangepast met jouw suggestie.
Je ziet de aantallen nu steeds 2x verschijnen (876, 876, 57, 57, 122, 122, etc.)

Dus zo ben ik er nog niet, helaas.

Groeten,

Gsorsnoi
misschien omdat in zowel word_amount als in categories hetzelfde staat?

btw, waar maak je $categories aan?
want ik zie $categories pas vershijnen met een count :S
Sorry Koen.
Ik had vergeten de arrays in het topic te plaatsen. Was het van plan, maar vergat het toen. Bij deze toegevoegd onder de oorspronkelijke code in deze topic.
<?php
foreach ($score_tables as $table)
{
$sql_times_hangman = "SELECT COUNT( `best` ) FROM `$table` WHERE `best` = '$criminal'";
?>
daar de variabele buiten quotes halen...

<?php
foreach ($score_tables as $table)
{
$sql_times_hangman = 'SELECT COUNT( `best` ) FROM `$table` WHERE `best` ='.$criminal;
?>
en aangezien je daar je for loops nest, kan daar wel eens de fout zitten dat je dubbelle records krijgt..(2keer geselecteerd)
Beste Koen,

Dit heb ik nu geprobeerd. Volgens mij moet dat niets uitmaken en is dat meer een kwestie van programmeersmaak. Maar ik wil alle hulp graag uitproberen.
Eerst door jouw code in dat stukje van mij te plaatsen:

<?php
foreach ($score_tables as $table)
{
// $sql_times_hangman = "SELECT COUNT( `best` ) FROM `$table` WHERE `best` = '$criminal'";
$sql_times_hangman = 'SELECT COUNT( `best` ) FROM `$table` WHERE `best` ='.$criminal;
$result = mysql_query($sql_times_hangman) or die(mysql_error());
?>

Daarbij kreeg ik de fout:

- Table 'XXXXXX.$table' doesn't exist

Vervolgens heb ik `$table` vervangen in `' . $table . '` om die variabele ook buiten de quotes te tillen. Maar dan krijg ik ook een fout:

- Unknown column 'PiCo' in 'where clause'

Maar ik denk niet dat de fout in de query-opbouw zit. Want als dat het geval was had de array $word_amount nooit goed gevuld geworden. Met de foreach in de regels 21 t/m 25 in de originele code in deze topic gebruik ik een echo naar de browser die ons laat zit dat alle records er maar 1x in staan.

Ik denk nog altijd dat er iets fout gaan in de lussen die na het declareren van de $word_amount array voorkomen.

Bedankt voor het meedenken.


- Unknown column 'PiCo' in 'where clause'

dan kan ie dus je crimineel-naam niet vinden in je kolom best...
hoeveel criminelen staan nu in die lijst??
Beste Koen,

Die melding kreeg ik alleen op het moment dat ik jouw code had toegevoegd en de variabele op de tabelnaam ook buiten de quotes had getild. Maar volgens mij is de query wel in orde.

Ik heb de code nu weer terug gezet naar hoe ik het oorspronkelijk had. Als je nu op http://www.wsnoi.com/index.php?page=oldhangman kijkt en de score van gebruiker PiCO open klapt, dan zie je daar een lijstje van 14 getallen onder elkaar. Deze lijst wordt door de echo in de foreach op regel 24 verzorgd.
En omdat hij daar 14 toont, verwacht ik dat de query 14 resultaten heeft opgeleverd, en niet het dubbele.

Toch wil hij met $iSize 28 records verwerken. Het dubbele dus.

kan je je word_amount printen??
<?php
print_r($word_amount);
?>
Knap staaltje Koen!

<?php
$word_amount[] = $amount;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $amount)
{
array_push($word_amount, $amount);
echo $amount . "<br>";
}
}
}
print_r($word_amount);
?>

Geeft bij het uitlezen van de inhoud van de $word_amount-array inderdaad alle records dubbel.

Dus toch een constructie fout in de query volgens jou?

Reageren