elseif toont niet alles
Doe ik dit als code:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// set database server access variables:
$host = "localhost";
$user = "";
$pass = "";
$db = "voetbal";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd from users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie from clubs WHERE user_id = '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
elseif ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
};?>
// set database server access variables:
$host = "localhost";
$user = "";
$pass = "";
$db = "voetbal";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd from users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie from clubs WHERE user_id = '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
elseif ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
};?>
dan weergeeft hij alleen "3%".
Doe ik dit:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// set database server access variables:
$host = "localhost";
$user = "";
$pass = "";
$db = "voetbal";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd from users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie from clubs WHERE user_id = '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
if ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
};?>
// set database server access variables:
$host = "localhost";
$user = "";
$pass = "";
$db = "voetbal";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd from users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie from clubs WHERE user_id = '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
if ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
};?>
Dan weergeeft hij 3% en 6% onder elkaar.
Waarom werkt bij mij in de eerste code de elseif niet?
- Ariën -:
Topictitel aangepast
Gewijzigd op 14/12/2015 16:27:49 door - Ariën -
Bij een succesvolle SELECT retourneert mysqli_query() een object, maar je vergelijkt dat mysqli_result-object in if ($ClubCheck2 > "1") met een string. Je moet waarschijnlijk twee dingen aanpassen: tellen met SELECT COUNT(*) en die telling vervolgens uit het mysqli_result-object halen voor de if/elseif.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT COUNT(leeftijd) FROM users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT COUNT(positie) FROM clubs WHERE user_id= '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
else if ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
}
else {
echo "hoi";
};?>
Toch blijft nu enkel de 3% staan.
Ook in bijvoorbeeld deze vorm:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ClubCheck = mysqli_query($con, "SELECT club from users WHERE id = '$id'");
$ClubCheck2 = mysqli_query($con, "SELECT COUNT(*) AS leeftijd FROM users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT COUNT(*) AS positie FROM clubs WHERE user_id= '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
elseif ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
}
else {
echo "hoi";
};?>
$ClubCheck2 = mysqli_query($con, "SELECT COUNT(*) AS leeftijd FROM users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT COUNT(*) AS positie FROM clubs WHERE user_id= '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT clubthuisgoals, clubuitgoals from wedstrijden WHERE user_id = '$id'");
if ($ClubCheck2 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:3%';>
3%</div></div>";
}
elseif ($ClubCheck2 > "1" && $ClubCheck3 > "1") {
echo "<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:6%';>
6%</div></div>";
}
else {
echo "hoi";
};?>
niet het gewenste effect
Gewijzigd op 14/12/2015 13:49:19 door bart de kinkelaar
Code (php)
1
2
3
2
3
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
is wat hij laat zien op de pagina door vardump. De bovenste is ClubCheck2 (die hij gewoon laat zien. De tweede is de elseif ClubCheck3. Die hij niet laat zien.
Als $ClubCheck2 > 1 komt hij direct in het eerste IF-blok terecht, en daardoor dus niet meer in het ELSEIF-blok.
$ClubCheck2 is een object. Geen boolean, integer of string. Daardoor is de if ($ClubCheck2 > "1") met een object links en een string rechts van de vergelijkingsoperator op zijn zachtst gezegd dubbelzinnig. Er staat namelijk letterlijk: "Als een object van het type mysqli_result groter is dan een string met het cijfer 1 …".
Vandaar dat ik opperde: haal eerst eens het resultaat van je query (een integer bij SELECT COUNT) uit de resultaatset (een databaseobject).
@Ward: lol ... ik ging er inderdaad vanuit dat het resultaat een integer was ... anders heeft de vergelijking weinig zin. De rest van mijn verhaaltje blijft wel overeind dat wanneer ie eenmaal in de IF is, ie niet meer in de ELSEIF komt.
@Ward, ik ben even totaal de weg kwijt in wat je bedoeld..
Toevoeging op 14/12/2015 19:23:50:
Ik heb het een beetje aangepast. Het word nu een algemeen overzicht van behaalde en niet behaalde doelstellingen. Maar toch werkt het niet.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Home - VoetbalLeven</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body><?php
// set database server access variables:
$host = "localhost";
$user = "root";
$pass = "";
$db = "";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie FROM clubs WHERE user_id= '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT wedstrijden FROM clubs WHERE user_id = '$id'");
$ClubCheck5 = mysqli_query($con, "SELECT punten FROM clubs WHERE user_id= '$id'");
if ($ClubCheck2 > "1") {
$Check2 == '100';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck2 < "1") {
$Check2 == '0';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck3 > "1") {
$Check3 == '100';
echo "<h2>Doelstelling competitie gehaald</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck3 < "1") {
$Check2 == '0';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck4 > "2") {
$Check4 == '100';
echo "<h2>Wedstrijd gespeeld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck4 < "1") {
$Check4 == '0';
echo "<h2>Wedstrijd gespeeld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck5 > "3") {
$Check5 == '100';
echo "<h2>Wedstrijd gewonnen</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck5 < "2") {
$Check5 == '0';
echo "<h2>Wedstrijd gewonnen</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
else {
echo "hoi";
};?></body>
</html>
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Home - VoetbalLeven</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body><?php
// set database server access variables:
$host = "localhost";
$user = "root";
$pass = "";
$db = "";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'voetbal') or die ("Unable to select database!");
// create query
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'");
$ClubCheck3 = mysqli_query($con, "SELECT positie FROM clubs WHERE user_id= '$id'");
$ClubCheck4 = mysqli_query($con, "SELECT wedstrijden FROM clubs WHERE user_id = '$id'");
$ClubCheck5 = mysqli_query($con, "SELECT punten FROM clubs WHERE user_id= '$id'");
if ($ClubCheck2 > "1") {
$Check2 == '100';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck2 < "1") {
$Check2 == '0';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck3 > "1") {
$Check3 == '100';
echo "<h2>Doelstelling competitie gehaald</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck3 < "1") {
$Check2 == '0';
echo "<h2>Leeftijd ingevuld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck4 > "2") {
$Check4 == '100';
echo "<h2>Wedstrijd gespeeld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck4 < "1") {
$Check4 == '0';
echo "<h2>Wedstrijd gespeeld</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
if ($ClubCheck5 > "3") {
$Check5 == '100';
echo "<h2>Wedstrijd gewonnen</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:100%';>
100%</div></div>";
}
elseif ($ClubCheck5 < "2") {
$Check5 == '0';
echo "<h2>Wedstrijd gewonnen</h2>
<div class='progress'>
<div class='progress-bar' role='progressbar' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100' style='width:0%';>
0%</div></div>";
}
else {
echo "hoi";
};?></body>
</html>
Hij zou bij leeftijd en doelstelling gewoon 100% moeten aangeven. Maar hij doet bij alle 4 (nadat ik van alle elseifs die je hierboven nog ziet, else heb gemaakt) 100%. Wat is de reden?
Gewijzigd op 14/12/2015 19:27:06 door bart de kinkelaar
Je moet eerst zorgen dat je query een getal oplevert. Vervolgens moet je de juiste structuur gebruiken voor je if-statements. Als je if met elseif gebruikt, gaat ie als de if waar is naar de if, en komt ie dus niet meer in de elseif.
Code (php)
1
2
3
2
3
<?php
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'");
?>
$ClubCheck2 = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'");
?>
Je moet het resultaat (de leeftijd) nog uit de resultaatset halen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if ($result = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'")) {
$row = mysqli_fetch_assoc($result);
$ClubCheck2 = $row['leeftijd'];
}
?>
if ($result = mysqli_query($con, "SELECT leeftijd FROM users WHERE id = '$id'")) {
$row = mysqli_fetch_assoc($result);
$ClubCheck2 = $row['leeftijd'];
}
?>
Hiermee hebben we het in drie stukken geknipt:
1. mysqli_query() retourneert een resultaatset óf false als de query mislukt, vandaar dat we deze uitkomst in een if kunnen gebruiken.
2. Met $row = mysqli_fetch_assoc($result) halen we vervolgens één rij uit de resultaatset.
3. Via $row['leeftijd'] halen we tot slot één kolom uit de ene rij.
Deze aanzet is ook bepalend voor de rest van je logische structuur. Stel nu dat die eerste if wél false is doordat de query inderdaad mislukt, wat moet er dan gebeuren? Of stel dat de query wel lukt, maar er geen rijen worden gevonden doordat de $id niet bestaat, wat dan?
Het ziet er naar uit dat het inmiddels werkt na de uitleg van Ward. Thx!