Groot deel van pagina onzichtbaar
pas een nieuwe versie online geplaatst en ik stuit op een raar probleem.
Wanneer ik de pagina's bekijk toont hij slechts het stuk tot aan de div met id container.
Ook in mijn broncode lijkt daar alles te stoppen.
Wanneer ik het bestand echter open in mijn editor zie ik alle code staan.
Heeft iemand enig idee?
Deze pagina's zijn eerst gemaakt op mijn wampserver en daar lijkt alles correct te werken.
Alvast bedankt!
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
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
<doctype="html">
<!--key AIzaSyDqW0f8UQmlrPinFnhTvNeIOK4GFam65FM -->
<!--lat 50.967599 lng 3.529872 -->
<?php
include('connectie.php');
include('funkennisbank.php');
include('funtabbladen.php');
$ipageid=4;
?>
<head>
<title>Route - Schaakclub Karpov Deinze</title>
<link rel="stylesheet" media="(max-width: 640px)" href="./css/smalheader.css">
<link rel="stylesheet" media="(min-width: 640px)" href="./css/basisheader.css">
<link rel="stylesheet" media="(max-width: 640px)" href="./css/smal.css">
<link rel="stylesheet" media="(min-width: 640px)" href="./css/basis.css">
<link rel="stylesheet" type="text/css" href="./css/tabbladen.css">
</head>
<body>
<?php
include('header.php');
?>
<div id="container">
<?php
echo tabbladen($conn,$ipageid);
?>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2512.626251858516!2d3.5276835161138718!3d50.96761405784568!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47c36b57d9022beb%3A0x86ca9263f37b287f!2sBerkenlaan+52%2C+9800+Deinze!5e0!3m2!1snl!2sbe!4v1458138511430"
width="800" height="600" frameborder="0" style="border:0" allowfullscreen>
</iframe>
<br><br>
<!--sluiten container-->
</div>
<?php
include('footer.php');
?>
</body>
</html>
<!--key AIzaSyDqW0f8UQmlrPinFnhTvNeIOK4GFam65FM -->
<!--lat 50.967599 lng 3.529872 -->
<?php
include('connectie.php');
include('funkennisbank.php');
include('funtabbladen.php');
$ipageid=4;
?>
<head>
<title>Route - Schaakclub Karpov Deinze</title>
<link rel="stylesheet" media="(max-width: 640px)" href="./css/smalheader.css">
<link rel="stylesheet" media="(min-width: 640px)" href="./css/basisheader.css">
<link rel="stylesheet" media="(max-width: 640px)" href="./css/smal.css">
<link rel="stylesheet" media="(min-width: 640px)" href="./css/basis.css">
<link rel="stylesheet" type="text/css" href="./css/tabbladen.css">
</head>
<body>
<?php
include('header.php');
?>
<div id="container">
<?php
echo tabbladen($conn,$ipageid);
?>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2512.626251858516!2d3.5276835161138718!3d50.96761405784568!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47c36b57d9022beb%3A0x86ca9263f37b287f!2sBerkenlaan+52%2C+9800+Deinze!5e0!3m2!1snl!2sbe!4v1458138511430"
width="800" height="600" frameborder="0" style="border:0" allowfullscreen>
</iframe>
<br><br>
<!--sluiten container-->
</div>
<?php
include('footer.php');
?>
</body>
</html>
Gewijzigd op 03/06/2016 09:17:38 door De Clercq Andy
Test het eens door het even tijdelijk zo te doen:
Dus die functie wordt dan even niet aangeroepen. Als de dan de gehele pagina wel getoond wordt, zit er dus een fout in die functie.
Wel niet in tabbladen zoals gevraage, maar dat zal inderdaad een probleem zijn met mijn functie.
Daar trek ik wel mijn plan mee (efin denk ik toch)
Was efkens van mijn melk maar ben terug in actie.
Merci voor de dijk van een tip!
Post anders de code van de functie tabbladen(); eens.... misschien ziet iemand hier opeens wat het zou kunnen zijn.
Grote (?) kans dat in die include een fatal error optreedt dan.
Heeft iemand hiervoor enige verklaring?
Bouw wat foutafhandeling in zodat je weet waarom je SQL false retourneert. Het zou best kunnen dat het aan je inloggegevens ligt, of gewoon een serverversie verschil, maw je probeert iets dat niet ondersteund wordt. Of je hebt natuurlijk je tabellen niet netjes up to date met de lokale situatie. Maar het blijft gissen zolang je de output van queries niet controleert en ongeacht alles de applicatie blijft doorstomen.
In mijn else gedeelte staat een echo opdracht maar deze voert hij ook niet uit.
Wat doe ik nu nog fout?
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
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
<?php
function tabid()
{
if (isset($_GET['tabid']))
{
if (is_numeric($_GET['tabid']))
{
$itabid=$_GET['tabid'];
}
else
{
echo "geen getal";
exit();
}
}
else
{
$itabid=1;
}
return $itabid;
}
function tabbladen($conn,$ipageid)
{
if ($sqltabbladen='SELECT * FROM tblpagina
WHERE tblPaginaParentId ="'.$ipageid.'"
AND tblPaginaNiveau="2"
ORDER BY tblPaginaPositie ASC')
{
//tonen van de tabbladen
$resulttabbladen= $conn -> query($sqltabbladen);
echo "<div id=\"tabbladen\">
<ul>";
while ($rowtabbladen = $resulttabbladen ->fetch_assoc())
{
$itabid= tabid();
if ($rowtabbladen['tblPaginaPositie']==$itabid)
{
echo "<li id=\"selected\"><a href=\"$rowtabbladen[tblPaginaLink]?tabid=$rowtabbladen[tblPaginaPositie]\" id=\"aselected\">$rowtabbladen[tblPaginaOpschrift]</a></li>";
}
else
{
echo "<li><a href=\"$rowtabbladen[tblPaginaLink]?tabid=$rowtabbladen[tblPaginaPositie]\">$rowtabbladen[tblPaginaOpschrift]</a></li>";
}
}
echo "</ul>
</div>";
}
else
{
//er zijn geen tabbladen dus enkel een opschrift
$sqlopschrift=" SELECT tblPaginaOpschrift FROM tblPagina
WHERE tblPaginaId=".$ipageid;
$resultopschrift= $conn -> query($sqlopschrift);
while ($rowopschrift = $resultopschrift ->fetch_assoc())
{
echo "<p>$rowopschrift[tblPaginaOpschrift]</p>";
}
}
}
?>
function tabid()
{
if (isset($_GET['tabid']))
{
if (is_numeric($_GET['tabid']))
{
$itabid=$_GET['tabid'];
}
else
{
echo "geen getal";
exit();
}
}
else
{
$itabid=1;
}
return $itabid;
}
function tabbladen($conn,$ipageid)
{
if ($sqltabbladen='SELECT * FROM tblpagina
WHERE tblPaginaParentId ="'.$ipageid.'"
AND tblPaginaNiveau="2"
ORDER BY tblPaginaPositie ASC')
{
//tonen van de tabbladen
$resulttabbladen= $conn -> query($sqltabbladen);
echo "<div id=\"tabbladen\">
<ul>";
while ($rowtabbladen = $resulttabbladen ->fetch_assoc())
{
$itabid= tabid();
if ($rowtabbladen['tblPaginaPositie']==$itabid)
{
echo "<li id=\"selected\"><a href=\"$rowtabbladen[tblPaginaLink]?tabid=$rowtabbladen[tblPaginaPositie]\" id=\"aselected\">$rowtabbladen[tblPaginaOpschrift]</a></li>";
}
else
{
echo "<li><a href=\"$rowtabbladen[tblPaginaLink]?tabid=$rowtabbladen[tblPaginaPositie]\">$rowtabbladen[tblPaginaOpschrift]</a></li>";
}
}
echo "</ul>
</div>";
}
else
{
//er zijn geen tabbladen dus enkel een opschrift
$sqlopschrift=" SELECT tblPaginaOpschrift FROM tblPagina
WHERE tblPaginaId=".$ipageid;
$resultopschrift= $conn -> query($sqlopschrift);
while ($rowopschrift = $resultopschrift ->fetch_assoc())
{
echo "<p>$rowopschrift[tblPaginaOpschrift]</p>";
}
}
}
?>
Hoe dan ook bedankt voor de geboden hulpà!
De if kan zeker niet gebruikt worden om aan te nemen dat er geen tabbladen zijn (regel 50).
Je bent waarschijnlijk meer geïnteresseerd in regel 32 of 35 (en 55, 56).
We hadden het kruimelpad al zover gevolgd dat we weten dat er ergens iets misgaat in de functie tabbladen(). Hier zul je dan verder op in moeten zoomen. Controleer in die functie bijvoorbeeld eens wat $conn voor waarde heeft, bijvoorbeeld met:
Wat komt hier uit?
Mogelijk is er iets mis met je connectie. Zoals @Ben al aangaf: indien je wat foutafhandeling inbouwt in je functionaliteit waarmee je je database aanspreekt (in connectie.php bijvoorbeeld) worden database-gerelateerde fouten ook direct geconstateerd en komt het niet meer voor dat bij het maken van een connectie iets mis gaat en dat dit vervolgens op een hele andere plek voor problemen zorgt. Dat werkt nogal verwarrend met het terugzoeken van een oorzaak.
Ook zou ik je aanraden geen verdere wijzigingen door te voeren in je code terwijl je nog op zoek bent naar een oorzaak want daarmee verandert mogelijk de werking van je code en daarmee mogelijk ook het gedrag van de bug. Het beste is om in eerste instantie de werking onveranderd te laten en te observeren (var_dump, errorlogs, error_reporting etc.) wat er nu eigenlijk gebeurt, en dan pas actie te nemen.
de variabele $conn geeft
Code (php)
1
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(9) ["host_info"]=> string(32) "karpovdeinze.be.mysql via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "5.5.47-MariaDB-1~wheezy" ["server_version"]=> int(50547) ["stat"]=> string(156) "Uptime: 2825066 Threads: 8 Questions: 975172622 Slow queries: 11441 Opens: 15104531 Flush tables: 2 Open tables: 8192 Queries per second avg: 345.185" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(17274769) ["warning_count"]=> int(0) }
Wat kun of moet je hier nu uit afleiden?
Gaan we verder kijken.
Dump $resulttabbladen eens:
Indien dit false retourneert is er iets mis met je query. Bijvoorbeeld de vorm (syntax) is verkeerd of kolomnamen zijn verkeerd gespeld.
Gewijzigd op 04/06/2016 16:40:48 door Thomas van den Heuvel
Code (php)
1
Array ( [_GET] => Array ( ) [_POST] => Array ( ) [_COOKIE] => Array ( ) [_FILES] => Array ( ) [host] => mijn host [user] => mijn user [password] => mijn paswoord [database_karpovdeinze] => mijn database [conn] => mysqli Object ( [affected_rows] => 0 [client_info] => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ [client_version] => 50011 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [error_list] => Array ( ) [field_count] => 0 [host_info] => karpovdeinze.be.mysql via TCP/IP [info] => [insert_id] => 0 [server_info] => 5.5.47-MariaDB-1~wheezy [server_version] => 50547 [stat] => Uptime: 2830400 Threads: 8 Questions: 978592298 Slow queries: 11446 Opens: 15120761 Flush tables: 2 Open tables: 8192 Queries per second avg: 345.743 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 17317333 [warning_count] => 0 ) [ipageid] => 4 )
Nu vraag ik me af waar mijn andere variabelen zijn gebleven?
Welke andere variabelen? En maakt dit uit voor het huidige vraagstuk? Bij debuggen is het zaak dat je enkel relevante zaken bekijkt en niet *alles*, want dan zie je vaak door de bomen het bos niet meer. Volg gewoon het eerder besproken kruimelpad en zie eerst eens waar dat je brengt.
Maar nu snap ik wel niet waar dit op wijst.
Als je deze variabele wilt inspecteren zul je dat dus ook binnen die functie moeten doen, daarbuiten bestaat deze niet.
Vermoedelijk iets mis met de query of ben ik fout?
Kortom:
Wat denken jullie hiervvan?
Code (php)
Of geeft die lege resultaatset altjd false en hoe vang je dit dan p?
documentatie van de query() methode:
Ook als er geen resultaten zijn.
Ik zou foutafhandeling apart, en eenmalig, programmeren en niet rechtstreeks in je applicatie-code zetten, en foutmeldingen ergens (anders) opvangen. Anders bestaat een groot deel van je code uit extra if-constructies en het dumpen van foutmeldingen waar (eind)gebruikers toch niets aan hebben. Plus je doet elke keer hetzelfde, indien iets false of NULL of whatever is staak je het programma. Dit kun je elders, en eenmalig, oplossen. Bijvoorbeeld door het schrijven van een of enkele wrapper classes. Deze kunnen je veel werk besparen (noot: deze wrappers zijn ondertussen weer wat veranderd, maar de versie die daar staat werkt volgens mij ook prima en kan sowieso dienen als inspiratie).
Wat je moet doen als er geen resultaten zijn ($result->num_rows == 0) is applicatie-specifiek. Dit zou je wel rechtsreeks in je code kunnen regelen omdat je daar ook moet besluiten wat er dan moet gebeuren.
Uit de Quote:
or successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object.
Ook als er geen resultaten zijn.
Ik zou foutafhandeling apart, en eenmalig, programmeren en niet rechtstreeks in je applicatie-code zetten, en foutmeldingen ergens (anders) opvangen. Anders bestaat een groot deel van je code uit extra if-constructies en het dumpen van foutmeldingen waar (eind)gebruikers toch niets aan hebben. Plus je doet elke keer hetzelfde, indien iets false of NULL of whatever is staak je het programma. Dit kun je elders, en eenmalig, oplossen. Bijvoorbeeld door het schrijven van een of enkele wrapper classes. Deze kunnen je veel werk besparen (noot: deze wrappers zijn ondertussen weer wat veranderd, maar de versie die daar staat werkt volgens mij ook prima en kan sowieso dienen als inspiratie).
Wat je moet doen als er geen resultaten zijn ($result->num_rows == 0) is applicatie-specifiek. Dit zou je wel rechtsreeks in je code kunnen regelen omdat je daar ook moet besluiten wat er dan moet gebeuren.