Een IF THEN ELSE in een While loop plaatsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Carl Zwanenburg

Carl Zwanenburg

10/07/2014 20:31:38
Quote Anchor link
LS,

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)
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
<?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>


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
 
PHP hulp

PHP hulp

18/04/2024 09:37:17
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/07/2014 20:48:05
Quote Anchor link
uhm logisch nadenken..

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
while ($row = mysql_fetch_assoc($result_bj))
{

    if(strlen($row['name']) > 0))
    {

        echo 'test';
    }
}

?>
 
Carl Zwanenburg

Carl Zwanenburg

11/07/2014 00:22:14
Quote Anchor link
Dag Frank, bedankt voor je feedback.

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.
 

14/07/2014 17:52:49
Quote Anchor link
Als dat noodzakelijk is, dan kan dat.
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.
 
Carl Zwanenburg

Carl Zwanenburg

14/07/2014 19:13:29
Quote Anchor link
Karim, dat klopt. Maar als ik de betreffende web-pagina open en deze while loop activeer, wordt hij maar 1 keer doorlopen en zal bij de juiste waarde (als IF dus waar is) een andere output gegenereert worden. En bij alle andere statements in de while loop die andere waarde. Met de while-loop doorloop ik dus eerst alle gevonden records. Die ik dan gelijktijdig onderzoek met het IF statement. In mijn optiek moet ik toch eerst alle records bekeken hebben voordat ik weet welke waarde juist is aan het IF statement.

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..... ;)
 
- SanThe -

- SanThe -

14/07/2014 19:31:53
Quote Anchor link
Op regel 26 heb je al een if/then/else staan, weliswaar in de verkorte schrijfwijze.
 
Carl Zwanenburg

Carl Zwanenburg

14/07/2014 20:38:00
Quote Anchor link
@ SanThe, ik weet wat het script doet, dus denk ik wat je bedoeld als het gerelateerd is aan het al of niet toekennen van de 'selected="selected"', maar ik heb nog niet het gewenste resultaat.

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)
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
<?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>
?>


Dit alles probeer ik nu niet meer per regel op te schrijven, maar als pulldown menu uit de records te halen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
    }

?>


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
 
- SanThe -

- SanThe -

14/07/2014 20:55:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
?>
Gewijzigd op 14/07/2014 20:57:15 door - SanThe -
 
Carl Zwanenburg

Carl Zwanenburg

14/07/2014 21:23:38
Quote Anchor link
En Voila. Het werkt.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}


?>

</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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$BalansId
= (isset($_GET['BalansId'])) ? $_GET['BalansId'] : 0;
?>


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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.