Een IF THEN ELSE in een While loop plaatsen
Ik heb een stukje script, waarin ik een pulldown menu maak op basis van de records (jaartallen) van een tabel (boekjaar) uit de database (DBase001):
Code (php)
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
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
<?php
$host = "localhost";
$LoginNaam = "LoginNaam";
$Password = "Password";
$db_name = "DBase001";
$tbl_name = "Boekjaar";
$con = mysql_connect($host, $LoginNaam, $Password);
if (!$con)
{
die(mysql_error("can't connect"));
}
mysql_select_db($db_name, $con) or die(mysql_error("can't find database"));
$boekjaar = (isset($_GET ['Boekjaar'])) ? (int) $_GET['Boekjaar'] : 2014;
$result_bj = mysql_query("SELECT * FROM Boekjaar ORDER BY BoekjaarId ASC");
mysql_close($con);
?>
<select name="Boekjaar" onclick="this.form.submit()">
<?php
while ($row = mysql_fetch_assoc($result_bj)) {
echo '
<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php" ' . $row['BoekjaarId'] .
(($row['BoekjaarId'] == $boekjaar) ? 'selected="selected"' : '') . '>' .
$row['Boekjaar'] . '</option>';
}
?>
</select>
$host = "localhost";
$LoginNaam = "LoginNaam";
$Password = "Password";
$db_name = "DBase001";
$tbl_name = "Boekjaar";
$con = mysql_connect($host, $LoginNaam, $Password);
if (!$con)
{
die(mysql_error("can't connect"));
}
mysql_select_db($db_name, $con) or die(mysql_error("can't find database"));
$boekjaar = (isset($_GET ['Boekjaar'])) ? (int) $_GET['Boekjaar'] : 2014;
$result_bj = mysql_query("SELECT * FROM Boekjaar ORDER BY BoekjaarId ASC");
mysql_close($con);
?>
<select name="Boekjaar" onclick="this.form.submit()">
<?php
while ($row = mysql_fetch_assoc($result_bj)) {
echo '
<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php" ' . $row['BoekjaarId'] .
(($row['BoekjaarId'] == $boekjaar) ? 'selected="selected"' : '') . '>' .
$row['Boekjaar'] . '</option>';
}
?>
</select>
Is er een mogelijkheid om in deze while loop een IF THEN ELSE statement op te nemen? Zodanig dat ik een keuze kan maken als bijvoorbeeld de waarde ($row = mysql_fetch_assoc($result_bj)) gelijk is aan een getal uit de tabel? Of moet ik de while-loop in een IF THEN statement opnemen, dus andersom?
Graag jullie input.
Vriendelijk bedankt.
Graag in het vervolg bij code, [code] [/code] tags gebruiken.[/modedit]
Gewijzigd op 11/07/2014 12:20:13 door Bas IJzelendoorn
als je een if statement binnen een while loop plaatst dan zal dat statement iedere keer dat de lus doorlopen wordt uitgevoerd worden. Dus wordt je while() 10 keer doorlopen dan krijg je 10 keer de if(...)
andersom ..
doe je een while in een if dan zal de while dus uitgevoerd worden of helemaal niet uitgevoerd worden afhankelijk van wat de vergelijking in de if() oplevert.
het kan allemaal zonder probleem door elkaar gebruikt worden.
Toevoeging op 10/07/2014 20:54:26:
wat gebeurt hier?
$result_bj = mysql_query("SELECT * FROM Boekjaar ORDER BY BoekjaarId ASC");
antwoord:
vraag een prak gegegevens op uit een database. In de resultset die je terugkrijgt kunnen 0 of meer records (rijen)zitten.
wil je nu iedere rij apart op iets testen met een if dan krijg je dus iets als dit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
while ($row = mysql_fetch_assoc($result_bj))
{
if(strlen($row['name']) > 0))
{
echo 'test';
}
}
?>
while ($row = mysql_fetch_assoc($result_bj))
{
if(strlen($row['name']) > 0))
{
echo 'test';
}
}
?>
In de database staat nog maar 1 rij. Dus de SELECT * levert in dit geval maar een 20-tal records, alleszins overzichtelijk, maar ik begrijp je punt.
Ik wil in de while loop een afweging maken of ik echo '1' of echo '2' laat zien op het scherm.
Ik ga je oplossing testen en laat je weten of het gelukt is.
Met vriendelijke groet, Carl.
Als het niet noodzakelijk is, dan moet je vooral buiten de while loop laten.
Zoals Frank Nietbelangrijk al zei, als je een if statement in een while loop plaats gaat hij elke keer de statement herhalen.
Ik ben nog niet toe gekomen om het te testen, maar ga dat vanavond proberen dus zal wel met aanvullende vragen komen of met het succes..... ;)
Op regel 26 heb je al een if/then/else staan, weliswaar in de verkorte schrijfwijze.
Ik haal uit een tabel een aantal records: boekjaar genaamd met als voorbeeld de jaren 2005 t/m 2016. Hierbij geef ik aan dat 2014 als default "selected" is.
Met onderderstaand script lukt het mij bij een ander jaartal (boekjaar X) de waarde "selected" mee te geven. Dan kan ik dus een nieuwe webpage openen met als waarde $boekjaar het gewenste boekjaar mee te geven. Resultaat is dat een andere webpage wordt geopend met gegevens gerelateerd aan het boekjaar X
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
<td width="663" height="20" align="left"><select name="menu1" onClick="MM_jumpMenu('parent',this,0)">
<option value="/Intranet/Intranet.php?Boekjaar=2005" [code]<?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2005) ? 'selected="selected"' : ''); ?> >2005</option>
<option value="/Intranet/Intranet.php?Boekjaar=2006" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2006) ? 'selected="selected"' : ''); ?> >2006</option>
<option value="/Intranet/Intranet.php?Boekjaar=2007" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2007) ? 'selected="selected"' : ''); ?> >2007</option>
<option value="/Intranet/Intranet.php?Boekjaar=2008" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2008) ? 'selected="selected"' : ''); ?> >2008</option>
<option value="/Intranet/Intranet.php?Boekjaar=2009" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2009) ? 'selected="selected"' : ''); ?> >2009</option>
<option value="/Intranet/Intranet.php?Boekjaar=2010" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2010) ? 'selected="selected"' : ''); ?> >2010</option>
<option value="/Intranet/Intranet.php?Boekjaar=2011" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2011) ? 'selected="selected"' : ''); ?> >2011</option>
<option value="/Intranet/Intranet.php?Boekjaar=2012" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2012) ? 'selected="selected"' : ''); ?> >2012</option>
<option value="/Intranet/Intranet.php?Boekjaar=2013" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2013) ? 'selected="selected"' : ''); ?> >2013</option>
<option value="/Intranet/Intranet.php?Boekjaar=2014" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2014) ? 'selected="selected"' : ''); ?> >2014</option>
<option value="/Intranet/Intranet.php?Boekjaar=2015" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2015) ? 'selected="selected"' : ''); ?> >2015</option>
<option value="/Intranet/Intranet.php?Boekjaar=2016" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2016) ? 'selected="selected"' : ''); ?> >2016</option>
</select></td>
?>
<td width="663" height="20" align="left"><select name="menu1" onClick="MM_jumpMenu('parent',this,0)">
<option value="/Intranet/Intranet.php?Boekjaar=2005" [code]<?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2005) ? 'selected="selected"' : ''); ?> >2005</option>
<option value="/Intranet/Intranet.php?Boekjaar=2006" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2006) ? 'selected="selected"' : ''); ?> >2006</option>
<option value="/Intranet/Intranet.php?Boekjaar=2007" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2007) ? 'selected="selected"' : ''); ?> >2007</option>
<option value="/Intranet/Intranet.php?Boekjaar=2008" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2008) ? 'selected="selected"' : ''); ?> >2008</option>
<option value="/Intranet/Intranet.php?Boekjaar=2009" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2009) ? 'selected="selected"' : ''); ?> >2009</option>
<option value="/Intranet/Intranet.php?Boekjaar=2010" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2010) ? 'selected="selected"' : ''); ?> >2010</option>
<option value="/Intranet/Intranet.php?Boekjaar=2011" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2011) ? 'selected="selected"' : ''); ?> >2011</option>
<option value="/Intranet/Intranet.php?Boekjaar=2012" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2012) ? 'selected="selected"' : ''); ?> >2012</option>
<option value="/Intranet/Intranet.php?Boekjaar=2013" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2013) ? 'selected="selected"' : ''); ?> >2013</option>
<option value="/Intranet/Intranet.php?Boekjaar=2014" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2014) ? 'selected="selected"' : ''); ?> >2014</option>
<option value="/Intranet/Intranet.php?Boekjaar=2015" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2015) ? 'selected="selected"' : ''); ?> >2015</option>
<option value="/Intranet/Intranet.php?Boekjaar=2016" <?php echo ((isset($_GET['Boekjaar']) AND $_GET['Boekjaar'] == 2016) ? 'selected="selected"' : ''); ?> >2016</option>
</select></td>
?>
Dit alles probeer ik nu niet meer per regel op te schrijven, maar als pulldown menu uit de records te halen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
while ($row = mysql_fetch_assoc($result_bj))
{
echo '
<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php" ' . $row['BoekjaarId'] .
(($row['BoekjaarId'] == $boekjaar) ? 'selected="selected"' : '') . '>' .
$row['Boekjaar'] . '</option>';
}
?>
while ($row = mysql_fetch_assoc($result_bj))
{
echo '
<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php" ' . $row['BoekjaarId'] .
(($row['BoekjaarId'] == $boekjaar) ? 'selected="selected"' : '') . '>' .
$row['Boekjaar'] . '</option>';
}
?>
Punt is bij bovenstaande dat ik geen default selected kan meegeven. Ik hoopte dit op te vangen door een IF ELSE toe te voegen en bij IF (strlen($row['BoekjaarId'] = 2014) > 0) de echo met 'selected="selected"' uit te voeren en bij alle andere dus ELSE het zonder 'selected="selected"' te doen, zodanig dat het boekjaar 2014 in dit geval default zou zijn.
Het is nog niet helemaal gelukt.
Misschien is er een snellere/andere oplossing voor mijn vraag?
Alvast bedankt.
Gewijzigd op 14/07/2014 20:43:47 door Carl Zwanenburg
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// connectie en dergelijke
$boekjaar = (isset($_GET['Boekjaar'])) ? (int) $_GET['Boekjaar'] : 2014;
// query
// <select .....>
while($row = mysql_fetch_assoc($result_bj))
{
echo '<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php?Boekjaar='.$row['BoekjaarId'].'"'.(($row['BoekjaarId'] == $boekjaar) ? ' selected="selected"' : '').'>'.$row['Boekjaar'].'</option>';
}
// </select>
?>
// connectie en dergelijke
$boekjaar = (isset($_GET['Boekjaar'])) ? (int) $_GET['Boekjaar'] : 2014;
// query
// <select .....>
while($row = mysql_fetch_assoc($result_bj))
{
echo '<option value="/Intranet/Intranet_SMD_Capital_Financieel_Balans.php?Boekjaar='.$row['BoekjaarId'].'"'.(($row['BoekjaarId'] == $boekjaar) ? ' selected="selected"' : '').'>'.$row['Boekjaar'].'</option>';
}
// </select>
?>
Gewijzigd op 14/07/2014 20:57:15 door - SanThe -
Ik ga met dit script weer verder en heb al gelijk wat meer vragen, maar die zal ik in een andere post zetten.
Iedereen bedankt voor het meedenken.
Groet, Carl.
Toevoeging op 14/07/2014 23:15:16:
LS, toch nog een vraagje wat met bovenstaand onderwerp te maken heeft.
Ik heb nu geen (int) waarden in de records staan maar (varchar) in de SQL database. Ik heb onderstaande script, maar dit levert niet hetzelfde resultaat.
<select name="Balans" onClick="MM_jumpMenu('parent',this,0)">
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$BalansId = (isset($_GET['BalansId'])) ? $_GET['BalansId'] : 0;
//$BalansName = (isset($_GET['BalansName'])) ? $_GET['BalansName'] : 0;
while ($row = mysql_fetch_assoc($result_balans))
{
echo '<option value="/Intranet/Intranet.php?Balans='.$row['BalansName'].'"'.(($row['BalansId'] == $BalansId) ? ' selected="selected"' : '').'>'.$row['BalansName'].'</option>';
}
?>
$BalansId = (isset($_GET['BalansId'])) ? $_GET['BalansId'] : 0;
//$BalansName = (isset($_GET['BalansName'])) ? $_GET['BalansName'] : 0;
while ($row = mysql_fetch_assoc($result_balans))
{
echo '<option value="/Intranet/Intranet.php?Balans='.$row['BalansName'].'"'.(($row['BalansId'] == $BalansId) ? ' selected="selected"' : '').'>'.$row['BalansName'].'</option>';
}
?>
</select>
de ' selected="seleted"' blijkt nu ineens niet te werken. Het pull-down menu gaat steeds naar zijn default. In dit voorbeeld naar de BalansName die hoort bij BalansId = 0
En als ik bekijk
>?php
echo ($BalansId);
?>
krijg ik slechts de waarde 0. (omdat dat als default staat ingesteld in de regel:
Ik begrijp hieruit dat de selected functie dus niet goed werkt in dit voorbeeld.
Wat ik hierbover eerder heb aangepast op SanThe d'r advies werkt vlekkeloos, dus het moet ergens in de (int) of (var) value zitten????
Zoals jullie zien het ik (int) in de regel $BalansId = (isset($_GET['BalansId'])) ? $_GET['BalansId'] : 0;
verwijdert, wat normaal voor $_GET['BalansId'] : 0;
staat, maar dat levert geen probleem op.
We stoeien verder en ik hoop weer op wat verlossende tips.
Alvast weer bedankt.