Groot deel van pagina onzichtbaar

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

De Clercq Andy

De Clercq Andy

03/06/2016 09:14:43
Quote Anchor link
Hallo,
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)
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
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>
Gewijzigd op 03/06/2016 09:17:38 door De Clercq Andy
 
PHP hulp

PHP hulp

23/11/2024 10:02:05
 
Ramon van Dongen

Ramon van Dongen

03/06/2016 09:58:36
Quote Anchor link
Waarschijnlijk zit daar een fout. Ik verwacht in de functie tabbladen($conn,ipageid);.

Test het eens door het even tijdelijk zo te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
// echo tabbladen($conn,$ipageid);
?>

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.
 
De Clercq Andy

De Clercq Andy

03/06/2016 10:36:45
Quote Anchor link
Inderdaad, dan toont hij wel van alles.
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!
 
Ramon van Dongen

Ramon van Dongen

03/06/2016 10:42:04
Quote Anchor link
Post anders de code van de functie tabbladen(); eens.... misschien ziet iemand hier opeens wat het zou kunnen zijn.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/06/2016 11:39:17
Quote Anchor link
En/of zet het melden+weergeven van fouten aan door bovenaan deze code te plaatsen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

Grote (?) kans dat in die include een fatal error optreedt dan.
 
De Clercq Andy

De Clercq Andy

03/06/2016 23:42:56
Quote Anchor link
Heb de foutmelding aangezet en krijg idd fatal error. Snap wat hij bedoeld (mijn sql geeft FALSE) maar wel begrijp ik niet waarom dit op mijn wamp wel werkt.
Heeft iemand hiervoor enige verklaring?
 
Ben van Velzen

Ben van Velzen

03/06/2016 23:46:22
Quote Anchor link
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.
 
De Clercq Andy

De Clercq Andy

04/06/2016 15:52:39
Quote Anchor link
Het sql heb ik in een if statement gezet en nu krijg ik geen foutmelding meer.
In mijn else gedeelte staat een echo opdracht maar deze voert hij ook niet uit.
Wat doe ik nu nog fout?
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
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>";
        }    
        
    }
}

?>

Hoe dan ook bedankt voor de geboden hulpà!
 
Jan de Laet

Jan de Laet

04/06/2016 16:05:35
Quote Anchor link
Die if op regel 26 heeft niet zo veel zin. Hier vul je alleen de variabele $sqltabbladen.
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).
 
Thomas van den Heuvel

Thomas van den Heuvel

04/06/2016 16:09:53
Quote Anchor link
Wat @Ben hierboven zegt: bestudeer nader of er mogelijk iets mis is met je databaseconnectie of -queries. Een if-statement ergens omheen zetten is goed en wel, maar als je daarmee effectief het probleem onder het tapijt schuift helpt dat niet bij het oplossen van je probleem :).

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($conn);
?>

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 Clercq Andy

De Clercq Andy

04/06/2016 16:32:00
Quote Anchor link
Merci voor deze snelle reacties
de variabele $conn geeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

04/06/2016 16:37:31
Quote Anchor link
Daar kun je uit afleiden dat er in ieder geval een connectie met je database is.

Gaan we verder kijken.

Dump $resulttabbladen eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($resulttabbladen);
?>

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
 
De Clercq Andy

De Clercq Andy

04/06/2016 18:06:50
Quote Anchor link
Heb met de functie get_defined_vars() al mijn variabelen uitgeprint. Dit geeft volgende resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

05/06/2016 13:36:09
Quote Anchor link
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.
 
De Clercq Andy

De Clercq Andy

05/06/2016 15:32:28
Quote Anchor link
Dit heb ik gedaan. De variabele $resulttabbladen gaf NULL en dan ben ik de andere gaan onderzoeken en deze gaven ook null. Vandaar dat ik bovenstaande deed.
Maar nu snap ik wel niet waar dit op wijst.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/06/2016 15:36:34
Quote Anchor link
De variabele $resulttabbladen bestaat enkel binnen de functie tabbladen.

Als je deze variabele wilt inspecteren zul je dat dus ook binnen die functie moeten doen, daarbuiten bestaat deze niet.
 
De Clercq Andy

De Clercq Andy

05/06/2016 17:13:43
Quote Anchor link
Heb beide result variabelen nagezien en beide geven null.
Vermoedelijk iets mis met de query of ben ik fout?
 
Ben van Velzen

Ben van Velzen

05/06/2016 17:23:25
Quote Anchor link
Dus pas je foutafhandeling toe op je query. Nogmaals: je laat nu gewoon de applicatie altijd doorlopen, dat wil je niet.
Kortom:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (!$conn->query(....)) {
  // haal hier je foutmelding uit $conn->error
}
?>
 
De Clercq Andy

De Clercq Andy

09/06/2016 09:34:10
Quote Anchor link
De problemen duiken vooral op bij een query die geen records als resultaat geeft.
Wat denken jullie hiervvan?
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
<?php
if (false === $query)
     {

     echo $conn -> error();
     }

else
     {
     //correcte query
       if (NULL === $result)
           {

           //code om uit te voeren indien er geen records zijn
           }
     }

?>

Of geeft die lege resultaatset altjd false en hoe vang je dit dan p?
 
Thomas van den Heuvel

Thomas van den Heuvel

09/06/2016 14:59:32
Quote Anchor link
Uit de documentatie van de query() methode:
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.
 



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.