php if else

Vragen/antwoorden betreffende het maken van je eigen website.

filius
Lid geworden op: 20 mar 2009, 17:13

03 okt 2010, 17:53

Ik heb een formulier met volgende velden:
$tafel $water $frisdrank $bier,
die ik in php script heb gezet.De bedoeling is, als ik een van de velden bv water niet invul dan zou ik hetvolgende moeten krijgen(wat dus mis gaat).
bv.:Rekening tafel 2
................. (Hier mag niets ingevuld komen, in dit geval water)
1x frisdrank
2xbier
Totaal=
De telling werkt.Hieronder de code die ik heb gemaakt.
<?php
if(isset($_POST['verzenden'])){

if(isset($_POST['tafel'])&& $_POST['tafel']!= '' && isset ($_POST['water'])){


$tafel=$_POST['tafel'];
$water=$_POST['water'];
$frisdrank=$_POST['frisdrank'];
$bier=$_POST['bier'];

$prijs = array('water'=> 1.40,'frisdrank'=> 2,'bier'=>6.5);

$tot_water=$water*$prijs['water'];
$tot_frisdrank=$frisdrank*$prijs['frisdrank'];
$tot_bier=$bier*$prijs['bier'];

$totaal=$tot_water+$tot_frisdrank+$tot_bier;

echo"------------------------------<br>
Rekening tafel $tafel<br>
<br>";
echo"------------------------------<br>";
echo"$water x water(" . $prijs['water'] . ")= $tot_water <br>";
echo"$frisdrank x frisdrank(" . $prijs['frisdrank'] . ")=$tot_frisdrank <br>";
echo"$bier x bier(" . $prijs['bier'] . ")=$tot_bier <br>";
echo"------------------------------<br>";

echo"Totaal= $totaal";

}


De html code:

<form id="form1" name="form1" method="post" action="terras_verwerking.php">
<table width="500" cellspacing="5" cellpadding="5">
<tr>
<td colspan="2"><div align="center">Formulier</div></td>
</tr>
<tr>
<td width="202"><div align="center">Tafel</div></td>
<td width="261"><div align="center">
<label>
<select name="tafel" id="tafel">
<option value="1">1</option>
<option value="2" selected="selected">2</option>
</select>
</label>
</div></td>
</tr>
<tr>
<td><label>
<input type="text" name="water" id="water" />
</label></td>
<td><div align="center">water</div></td>
</tr>
<tr>
<td><label>
<input type="text" name="frisdrank" id="frisdrank" />
</label></td>
<td><div align="center">frisdrank</div></td>
</tr>
<tr>
<td><label>
<input type="text" name="bier" id="bier" />
</label></td>
<td><div align="center">bier</div></td>
</tr>
<tr>
<td><div align="center">
<label>
<input type="submit" name="verzenden" id="verzenden" value="Verzenden" />
</label>
</div></td>
<td><div align="center">
<label>
<input type="reset" name="wissen" id="wissen" value="wissen" />
</label>
</div></td>
</tr>
</table>
</form>

Dus u moet hetvolgende verkrijgen:
De lege velden(niet ingevulde) mogen niet getoond worden.Kan dit met de if-else functie.Als men het veld water niet invult zou ik hetvolgende moeten verkrijgen.

Rekening tafel 2 of 1
----------------------
1x frisdrank(1.4 €) = 1.4
5x bier (1.3€) = 6.5
----------------------
Totaal= 7.9€
Graag de code

coderunner
Lid geworden op: 27 mar 2006, 04:35
Locatie: Aubauke - Aentwaerepe

03 okt 2010, 20:57

Beste filius

Zoek in het php gedeelte naar

Code: Selecteer alles

echo"------------------------------<br> 
Rekening tafel $tafel<br> 
<br>"; 
echo"------------------------------<br>"; 
echo"$water x water(" . $prijs['water'] . ")= $tot_water <br>"; 
echo"$frisdrank x frisdrank(" . $prijs['frisdrank'] . ")=$tot_frisdrank <br>"; 
echo"$bier x bier(" . $prijs['bier'] . ")=$tot_bier <br>"; 
echo"------------------------------<br>"; 
en vervang dit door

Code: Selecteer alles

echo"------------------------------<br> 
Rekening tafel $tafel<br> 
<br>"; 
echo"------------------------------<br>"; 
if ($water == "") 
echo ""; 
else
echo"$water x water(" . $prijs['water'] . ")= $tot_water <br>"; 

if ($frisdrank == "")
echo "";
else
echo"$frisdrank x frisdrank(" . $prijs['frisdrank'] . ")=$tot_frisdrank <br>"; 

if ($bier == "")
echo "";
else
echo"$bier x bier(" . $prijs['bier'] . ")=$tot_bier <br>"; 
echo"------------------------------<br>"; 
Graag een reaktie (zie onderschrift).

mvg,
Coderunner
Bedank de perso(o)n(en) die je volledig op vrijwillige basis een antwoord geeft(geven) en/of beantwoord ten minste een reaktie op jouw vraag. Zo weten andere gebruikers EN de moderator dat je "probleem" al dan niet is opgelost. Alvast bedankt.

ultddave
Lid geworden op: 11 mei 2009, 13:59
Locatie: Limburg > Genk

04 okt 2010, 09:07

Beste,

Niets uitprinten bij een if-else is ook niet echt nuttig. ;) Dan kan je beter gewoon met een if test werken, zonder de else.;

Code: Selecteer alles

echo "------------------------------<br> 
Rekening tafel $tafel<br> 
<br>"; 
echo '------------------------------<br>'; 
if ($water != '') 
echo "$water x water(" . $prijs['water'] . ")= $tot_water <br>"; 

if ($frisdrank != '') 
echo"$frisdrank x frisdrank(" . $prijs['frisdrank'] . ")=$tot_frisdrank <br>"; 

if ($bier != "") 
echo"$bier x bier(" . $prijs['bier'] . ")=$tot_bier <br>"; 

echo '------------------------------<br>'; 
Het is trouwens sneller om single quotes ipv double quotes te gebruiken bij strings die geen variabele bevatten.
Bijvoorbeeld;
echo "------------------------------<br>"; [/code]

Is trager dan:

echo '------------------------------<br>'; [/code]

Dat komt doordat hij bij double quotes opzoek gaat naar mogelijk te vervangen variabelen. ;)

PS: Je moet ook opletten dat je kijkt of de variabelen $_POST['frisdrank'] en $_POST['bier'] geset zijn (via isset() ). Want momenteel gebeurd dat enkel bij tafel en water. ;)

Dit zou bijvoorbeeld handig zijn:

$frisdrank = (isset($_POST['frisdrank'])) ? $_POST['frisdrank'] : '';

Dat zorgt ervoor dat $frisdrank de waarde van $_POST['frisdrank'] krijgt als deze bestaat. Indien niet krijgt $frisdrank de waarde ''. (Lege string dus)
(Voor de geinteresseerde; Dat is dus eigenlijk de korte vorm van een if-else test. Die in sommige gevallen meer leesbaar oogt.)

PS: Je moet ook nog kijken of de waardes van
$_POST['frisdrank']
$_POST['tafel']
$_POST['bier']
$_POST['water']

Wel degelijke een numerieke waarde hebben. Want de gebruiker kan even goed de tekst "hallo" ingeven. ;) En dan gaat het script foute resultaten geven. ;)
(Indien nodig wil ik de code wel geven)

Want zoals men altijd zegt. Gebruikersinput mag je nooit vertrouwen. ;)

Mvg,
Dave
.NET en Java Programmeur

filius
Lid geworden op: 20 mar 2009, 17:13

04 okt 2010, 11:15

Ik heb uitgeprobeerd de code van Coderunner en die van ultddave, maar steeds krijg ik dezelfde uitkomst.Als ik geen water bv invul, mag dit ook niet verschijnen op bv rekening tafel 2, gelijk hieronder.Ik zal er de code bijdoen (verbeterd)
In dit geval mag er (x water(1.4)=0) niet tussen staan.



------------------------------
Rekening tafel 2

------------------------------
x water(1.4)= 0
2 x frisdrank(2)=4
2 x bier(6.5)=13
------------------------------
Totaal= 17

<?php
if(isset($_POST['verzenden']) && $_SERVER["REQUEST_METHOD"] == "POST"){
if(isset($_POST['tafel'])&& $_POST['tafel']!= '' && isset($_POST['water'])){
$frisdrank = (isset($_POST['frisdrank'])) ? $_POST['frisdrank'] : '';
$water = (isset($_POST['water'])) ? $_POST['water'] : '';
$bier = (isset($_POST['bier'])) ? $_POST['bier'] : '';


$tafel = $_POST['tafel'];
$water = $_POST['water'];
$frisdrank = $_POST['frisdrank'];
$bier = $_POST['bier'];

$prijs = array('water'=> 1.40,'frisdrank'=> 2,'bier'=>6.5);

$tot_water = $water * $prijs['water'];
$tot_frisdrank = $frisdrank * $prijs['frisdrank'];
$tot_bier = $bier * $prijs['bier'];

$totaal = $tot_water + $tot_frisdrank + $tot_bier;

echo"------------------------------<br>
Rekening tafel $tafel<br>
<br>";
echo"------------------------------<br>";
if($water!='')

echo"$water x water(" . $prijs['water'] . ") = $tot_water <br>";

if($frisdrank!='')

echo"$frisdrank x frisdrank(" . $prijs['frisdrank'] . ") = $tot_frisdrank <br>";

if($bier!='')

echo"$bier x bier(" . $prijs['bier'] . ") = $tot_bier <br>";
}
echo"------------------------------<br>";

echo"Totaal = $totaal";

}
}
?>

Sorry als ik het niet goed begrijp.

ultddave
Lid geworden op: 11 mei 2009, 13:59
Locatie: Limburg > Genk

04 okt 2010, 13:23

Ah inderdaad. Dat komt doordat je eerst mijn methode toepast, en een paar regels later toch nogaltijd die $water = $_POST['water']; had staan. ;)
Idem bij de andere dranken.

Ik heb de hele code herschreven;

Code: Selecteer alles

<?php 
	if(isset($_POST['verzenden']) && $_SERVER["REQUEST_METHOD"] == "POST")
	{
		if(isset($_POST['tafel']))
		{
			# Initialisatie variabelen
			$tafel 	   = $_POST['tafel']; 
			$frisdrank = (isset($_POST['frisdrank']) && is_numeric($_POST['frisdrank'])) ? (int)$_POST['frisdrank'] : 0; 
			$water     = (isset($_POST['water']) && is_numeric($_POST['water'])) ? (int)$_POST['water'] : 0; 
			$bier      = (isset($_POST['bier']) && is_numeric($_POST['bier'])) ? (int)$_POST['bier'] : 0;
			

			$prijs = array('water' => 1.40, 'frisdrank' => 2, 'bier' => 6.5);

			# Bereken totale prijs voor elke drank
			$tot_water 	   = ($water) ? ($water * $prijs['water']) : 0; 
			$tot_frisdrank = ($frisdrank) ? ($frisdrank * $prijs['frisdrank']) : 0;
			$tot_bier      = ($bier) ? ($bier * $prijs['bier']) : 0;

			# Bereken totale prijs van alles tesamen
			$totaal = $tot_water + $tot_frisdrank + $tot_bier; 

			# Print rekening
			# Header
			echo '------------------------------<br/>';
			echo 'Rekening tafel: '.$tafel.'<br/><br/>';
			echo '------------------------------<br/>';
			# Body
			
			if($water) 
				echo ''.$water.' x water('.$prijs['water'].') = '.$tot_water.'<br/>';
					
			if($frisdrank) 
				echo ''.$frisdrank.' x frisdrank('.$prijs['frisdrank'].') = '.$tot_frisdrank.'<br/>'; 
				
			if($bier) 
				echo ''.$bier.' x bier('.$prijs['bier'].') = '.$tot_bier.'<br/>';
			# Footer
			echo '------------------------------<br/>'; 
			echo 'Totaal = '.$totaal; 
		}
		else
		{
			echo 'Fout: Er werd geen tafel aangegeven';
		}
	}
	else
	{
		echo 'Fout: Er valt niets te berekenen!';
	}
?>
Ik heb ook direct de code erin gezet die kijkt of de ingegeven waardes wel degelijk getallen zijn. Indien men bijvoorbeeld "a" ingeeft bij "bier". Dan krijgt $bier de waarde "0" en komt dus niet voor in de rekening. Mits aanpassingen kan je ook zorgen dat het script een foutmelding toont ipv de standaard waarde "0" te gebruiken.

In principe zou je nog verder kunnen gaan en ook zorgen dat de variabelen met de totale prijs van elke drank enkel berekent worden als ze effectief gedronken worden. In dit geval berekent hij die zoiezo maar toont hij ze gewoon niet. Maar dat maakt echt bijna niets uit op vlak van snelheid in dit geval. ;)

Deze laat ik persoonlijk altijd weg;
if(isset($_POST['verzenden']) && $_SERVER["REQUEST_METHOD"] == "POST")
Omdat hij eigenlijk niet veel meerwaarde heeft en enkel dient om te kijken of de gebruiker op de knop heeft geduwd. Maar dat is niet echt een zekerheid dat aangeeft dat de gebruikers effectief via die pagina zijn gekomen. (Klinkt niet echt logisch, maar hoe dat in zijn werk gaat, uitleggen, zal volgens mij redelijk ingewikkeld overkomen. Dat heeft te maken met het HTTP/1.0 protocol dat je kan gebruiken om servers aan te spreken.)
Nu in dit geval maakt dat niet veel uit als je weet dat de $_POST['verzenden'] bestaat, maar ik heb de code er toch maar ingelaten.;)

Mvg,
Dave
.NET en Java Programmeur

filius
Lid geworden op: 20 mar 2009, 17:13

04 okt 2010, 16:58

Ik werk met DW cs3

Spijtig maar de regel water staat er nog steeds tussen(zie voorbeeld onder).Mag er niet tussen staan omdat ik niets heb ingevuld in dit vak. ook niet (x water(1.4)=0 )In deze regel mag niets staan

------------------------------
Rekening tafel 2

------------------------------
x water(1.4)= 0
1 x frisdrank(2)=2
1 x bier(6.5)=6.5
------------------------------
Totaal= 8.5

Code van unddave is gekopieerd en in de pagina geplakt.Ook eerder deze van coderunner,deze was hetzelfde resultaat.

coderunner
Lid geworden op: 27 mar 2006, 04:35
Locatie: Aubauke - Aentwaerepe

04 okt 2010, 17:18

Beste filius,

Dan heb je bij het kopiëren een fout gemaakt want alle hierboven geposte codes werken wel degelijk!

Zie mijn code in werking hier met ook de gebruikte code.

Zie ultddave's code in werking hier met ook de gebruikte code.

mvg,
Coderunner
Bedank de perso(o)n(en) die je volledig op vrijwillige basis een antwoord geeft(geven) en/of beantwoord ten minste een reaktie op jouw vraag. Zo weten andere gebruikers EN de moderator dat je "probleem" al dan niet is opgelost. Alvast bedankt.

filius
Lid geworden op: 20 mar 2009, 17:13

08 okt 2010, 13:54

Hartelijk dank aan ultddave en coderunner.Het is opgelost OK.

coderunner
Lid geworden op: 27 mar 2006, 04:35
Locatie: Aubauke - Aentwaerepe

08 okt 2010, 14:48

Beste filius,

Bedankt om dit te laten weten.

mvg,
Coderunner


@moderator: probleem opgelost!
Bedank de perso(o)n(en) die je volledig op vrijwillige basis een antwoord geeft(geven) en/of beantwoord ten minste een reaktie op jouw vraag. Zo weten andere gebruikers EN de moderator dat je "probleem" al dan niet is opgelost. Alvast bedankt.