Hoi,

ik was bezig met het maken van een overzicht van verschillende waardes voor een spel.
De waardes moesten verticaal opgesteld worden, er moet dus steeds voor elke waarde een tabel cel aangemaakt worden.
Dit doe ik door middel van de functie information().
Helaas werkt dit niet, ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen.

Heeft iemand hier ervaring mee of een oplossing voor?
NOTE: de HTML is verkort!


<?php

function resources()
{
	$con = mysql_connect('localhost', 'root', 'password') or die(mysql_error());
	mysql_select_db('matman_test', $con) or die(mysql_error());
	$query = mysql_query("SELECT * FROM resources");
	if(mysql_num_rows($query) != 0)
	{
		session_start();
		$_SESSION['count'] = 0;
		function information($query)
		{	$data = null;
			$dataa = array('Currency', 'Iron', 'Iron2', 'Grain', 'Grain2', 'WQ1(LC)', 'WQ1(G)', 'WQ2(LC)', 'WQ2(G)', 'WQ3(LC)', 'WQ3(G)', 'WQ4(LC)', 'WQ4(G)', 'WQ5(LC)', 'WQ5(G)', 'GQ1(LC)', 'GQ1(G)', 'GQ2(LC)', 'GQ2(G)', 'GQ3(LC)', 'GQ3(G)', 'GQ4(LC)', 'GQ4(G)', 'GQ5(LC)', 'GQ5(G)', 'FQ1(LC)', 'FQ1(G)', 'FQ2(LC)', 'FQ2(G)', 'FQ3(LC)', 'FQ3(G)', 'FQ4(LC)', 'FQ4(G)', 'FQ5(LC)', 'FQ5(G)');
			$word = $dataa[$_SESSION['count']];
			while($data = mysql_fetch_assoc($query))
			{
				if($data[$word] == "" || $data[$word] == 0)
				{
					echo '<td class="empty">&nbsp;</td>';
				}
				else
				{
					echo '<td class="full">'.$data[$word].'</td>';
				}
				$_SESSION['count']++;
			}
			return;
		}
		echo '
		<table cellspacing="0" border="0" class="content">
		<tr>
			<td colspan="3">Land:</td>';
			while($data2 = mysql_fetch_assoc($query))
			{
				echo '<td class="full">'.$data2['Country'].'</td>';
			}
			echo '
		</tr>
		<tr>
			<td align="center">Currency</td>
			<td colspan="2">LC in G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td rowspan="2">Iron:</td>
			<td>&nbsp;</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>&nbsp;</td>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td align="center" rowspan="10">Weapons</td>
			<td rowspan="2">Q1</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td rowspan="2">Q2</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td rowspan="2">Q3</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td rowspan="2">Q4</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td rowspan="2">Q5</td>
			<td>LC</td>';
			information($query);
			echo '
		</tr>
		<tr>
			<td>G</td>';
			information($query);
			echo '
		</tr>
		</table>
		';
		//$_SESSION['count'] = 0;
	}
	else
	{
		die('Er staat niks in de database!');
	}
}

?>
<html>
<head>
<title>e-sim resources module</title>
<link rel="stylesheet" href="css/stylesheet.css" media="screen" />
</head>
<body>
<?php

resources();

?>
<br />
<a href="insert.php">Invoegen</a>
</body>
</html>


Zet je script a.u.b. even tussen code-tags.
Volgens mij is je script zeer onlogisch opgebouwd.

[size=xsmall]Toevoeging op 11/11/2011 18:15:18:[/size]

Matthijs Veldhuizen op 11/11/2011 18:02:47

... ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen


Dat is niet waar.
Jij roept mysql_fetch_assoc() (door jouw onlogische constructie) misschien wel honderden keren aan. Dat houdt in dat ie allang geen records meer heeft.

[size=xsmall]Toevoeging op 11/11/2011 18:19:19:[/size]

Ik hoop ook dat dit ('WQ1(LC)', 'WQ1(G)', 'WQ2(LC)') geen veldnamen zijn in de database.
- SanThe - op 11/11/2011 18:10:41

Volgens mij is je script zeer onlogisch opgebouwd.

[size=xsmall]Toevoeging op 11/11/2011 18:15:18:[/size]

[quote="Matthijs Veldhuizen op 11/11/2011 18:02:47"]
... ik denk dat dit komt omdat mysql_fetch_assoc() maar één keer kan worden aangeroepen


Dat is niet waar.
Jij roept mysql_fetch_assoc() (door jouw onlogische constructie) misschien wel honderden keren aan. Dat houdt in dat ie allang geen records meer heeft.

[size=xsmall]Toevoeging op 11/11/2011 18:19:19:[/size]

Ik hoop ook dat dit ('WQ1(LC)', 'WQ1(G)', 'WQ2(LC)') geen veldnamen zijn in de database.
[/quote]

SanThe,
noem a.u.b. ook verbeteringen i.p.v. alleen kritiek
the $dataa array zijn wel veldnamen in de database.
WQ1(LC)', 'WQ1(G)', 'WQ2(LC)

Klinkt als een slecht opgestelde (genormaliseerde) database...
- Aar - op 11/11/2011 19:10:46

WQ1(LC)', 'WQ1(G)', 'WQ2(LC)

Klinkt als een slecht opgestelde (genormaliseerde) database...


wat zou er speciaal aan moeten zijn dan? :P
btw: heeft iemand ook een eventuele oplossing voor mn probleem? :P
Ik wil graag verbeteringen geven, maar het zit, mijns inziens, zo vreemd in elkaar dat het moeilijk te volgen is. Bij die databasenamen zou ik de haakjes weghalen, eventueel vervangen door een underscore. Haakjes horen daar gewoon niet.

$word komt uit het array met de veldnamen. Dus in onderstaand stukje kijk je alleen naar één veld. Dit terwijl je met de while alle records ophaalt. Na de allereerste keer dat je dit doet zijn alle records reeds opgehaald. Dus de tweede keer dat je in deze loop komt zullen er geen records meer zijn. Je zal dat moeten resetten om nognaals alle records op te halen. Maar je begrijpt dat dit een zware belasting gaat worden voor de server. Verzin een andere methode. Misschien moet je eerst alle records in een array zetten en daar verder mee werken.
<?php
while($data = mysql_fetch_assoc($query))
{
if($data[$word] == "" || $data[$word] == 0)
{
echo '<td class="empty">&nbsp;</td>';
}
else
{
echo '<td class="full">'.$data[$word].'</td>';
}
$_SESSION['count']++;
}
?>

[size=xsmall]Toevoeging op 11/11/2011 19:23:22:[/size]

Zo te zien trekt deze regel al alle records weg waardoor je daarna niets meer over zal hebben.
while($data2 = mysql_fetch_assoc($query))
Ik had vooral problemen met het verticaal opstellen van de waardes,
horizontaal was geen probleem, maar dat is onduidelijker.

Omdat ik in html geen enkele manier ken om zomaar een hele kolom toe te voegen raakte ik een beetje in de knoop.

Zou iemand mij eventueel kunnen helpen met een manier om een hele kolom toe te voegen, zonder 35 keer de functie information() te moeten herhalen?
Of kan ik dit toch beter horizontaal doen?
Als ik zo tel wil jij 14 keer alle records ophalen. Duidelijk geval van overkill.
Hier wel ja,
maar in mijn eerste post vertelde ik ook: "NOTE: de HTML is verkort!"
In totaal is het dus 36 keer, inderdaad overkill.

Ik zal de horizontale manier wel toepassen, dan hoef ik het maar 1 keer op te vragen.
Zou het volgens jullie wel mogelijk kunnen zijn om dit überhaupt verticaal te doen?
Ik ben aan het kijken of ik er uit kom om het zo te doen wat jij wilt. Dus wel even geduld. Leuke uitdaging, dat wel.

[size=xsmall]Toevoeging op 11/11/2011 19:58:15:[/size]

Gooi niet gelijk je eigen script weg want ik heb niks kunnen testen.

Je moet zelf bij elke information(...); even de juiste parameter neerzetten.
En dat kan zo:
information($field_array[0]);
of de veldnaam:
information('Currency');

Ik hoop dat het werkt.

<?php
function information($field)
{
global $records_array;
foreach($records_array as $record)
{
if($record[$field] == "" || $record[$field] == 0)
{
echo '<td class="empty">&nbsp;</td>';
}
else
{
echo '<td class="full">'.$record[$field].'</td>';
}
}
}

function resources()
{
global $records_array;
$field_array = array('Currency', 'Iron', 'Iron2', 'Grain', 'Grain2', 'WQ1(LC)', 'WQ1(G)', 'WQ2(LC)', 'WQ2(G)', 'WQ3(LC)', 'WQ3(G)', 'WQ4(LC)', 'WQ4(G)', 'WQ5(LC)', 'WQ5(G)', 'GQ1(LC)', 'GQ1(G)', 'GQ2(LC)', 'GQ2(G)', 'GQ3(LC)', 'GQ3(G)', 'GQ4(LC)', 'GQ4(G)', 'GQ5(LC)', 'GQ5(G)', 'FQ1(LC)', 'FQ1(G)', 'FQ2(LC)', 'FQ2(G)', 'FQ3(LC)', 'FQ3(G)', 'FQ4(LC)', 'FQ4(G)', 'FQ5(LC)', 'FQ5(G)');
$con = mysql_connect('localhost', 'root', 'password') or die(mysql_error());
mysql_select_db('matman_test', $con) or die(mysql_error());
$query = mysql_query("SELECT * FROM resources");
if(mysql_num_rows($query) != 0)
{
$records_array = array();
while($data = mysql_fetch_assoc($query))
{
$records_array[] = $data;
}
echo '
<table cellspacing="0" border="0" class="content">
<tr>
<td colspan="3">Land:</td>';
foreach($records_array as $record)
{
echo '<td class="full">'.$record['Country'].'</td>';
}
echo '
</tr>
<tr>
<td align="center">Currency</td>
<td colspan="2">LC in G</td>';
information($field_array[0]);
echo '
</tr>
<tr>
<td rowspan="2">Iron:</td>
<td>&nbsp;</td>
<td>LC</td>';
information($field_array[1]);
// enzovoort

?>

Reageren