Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

gastenboek maken in php mbv database

bewerkt do 2 apr 2015 in Tutorials (Develop) Posts: 878
Een simpel gastenboek maken met waarin de data in een database staat.

Stap 1
Als eerste maken we een database aan. Daarin voeren we de volgende query uit:

CREATE TABLE guestbook(
id int(5) NOT NULL auto_increment,
name varchar(60) NOT NULL default ' ',
email varchar(60) NOT NULL default ' ',
datetime varchar(60) NOT NULL default '',
message text NOT NULL,

Primary key(id)
);

We hebben nu een database waarin we de naam, email, datum en tijd en het bericht kunnen opslaan.

Stap 2: form.html
We gaan de form maken waarin bezoekers kunnen schrijven:


<a class="button" href="gastenboek.php">Bekijk Gastenboek</a>

<h2>Schrijf in Gastenboek</h2>
<form name="guest" method="post" action="verwerk.php">
Naam: <br />
<input type="text" name="name" required /><br /><br />
Email: <br />
<input type="text" name="email" required /><br /><br />
Bericht: <br /><textarea name="message" rows="10" cols="50" required></textarea> <br /><br />
<input type="checkbox" name="verplicht" required>Ik ben geen robot</input><br /><br />
<button class="button" name="submit" type="submit">Plaats bericht</button>

</form>

Het bovenste anker geeft ons de mogelijkheid het gastenboek te bekijken voordat we zelf erin hebben geschreven.
De checkbox voor de submit is er om te vorkomen dat robots ons gastenboek invullen.
Merk ook op dat alle velden verplicht zijn door de required in de input te zetten.
Als we kijken wat de action is, dan zie we dat we doorverwezen worden naar verwerk.php. Dit is de volgende stap.

Stap 3: verwerk.php

<?php
// connecteren op de database
$host="localhost"; //host, meestal localhost
$user="gebruikersnaam"; //user die op DB connecteert
$pass="vsBYdtFU7JLGNpwq"; //Password van de user die op DB connecteert
$dbname="guestbook"; // Naam Database

$con=mysqli_connect($host,$user,$pass,$dbname);
if (mysqli_connect_errno($con))
{
echo "<h1>Connectie Database mislukt: " . mysqli_connect_error() ."</h1>";
}
// uitlzen inputvelden en toekennen aan variabelen
$name = mysqli_real_escape_string($con, $_POST['name']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$message = mysqli_real_escape_string($con, $_POST['message']);

date_default_timezone_set('Europe/Amsterdam');
$datetime=date("d-m-y \o\m\ H:i:s"); //datum en tijd met "om" ertussen

$sql="INSERT INTO guestbook(name,email,message,datetime) VALUES('$name','$email','$message','$datetime')"; // data in de database zetten
if (!mysqli_query($con,$sql))
{
die('Fout: ' . mysqli_error($con)); // evt fout met error vermelden
}
else {
mysqli_close($con);
header('Location: gastenboek.php'); //gelijk doorsturen naar gastenboek
}

?>

In de bovenste 4 regels vullen we de naam van de host in, de gebruikernsaam van diegene die op de DB connecteert, het password en de naam van de DB.
Daarna connecteren we op de DB, en als dat niet goed gaat geven we een error.
Nu gaan we de inputwaardes toekennen aan variabelen. De datum wordt vermeld in dag-maand-jaar met erachter het tijdstip.
en als laatste gaan we de data in de DB zetten met wederom een echo als het fout gaat.
tot slot sluiten we de connectie met de DB en we verwijzen gelijk door naar bestand gastenboek.php. Dit is stap 4

Stap 4: gastenboek.php
De data staat in de DB. Nu nog ervoor zorgen dat we deze op het scherm krijgen.

<div class="gastenboek"><h2>Gastenboek</h2></div>


<?php
$host="localhost"; //host, meestal localhost
$user="gebruikersnaam"; //user die op DB connecteert
$pass="vsBYdtFU7JLGNpwq"; //Password van de user die op DB connecteert
$dbname="guestbook"; //Naam Database
$con=mysqli_connect($host,$user,$pass,$dbname);

if (mysqli_connect_errno($con))
{
echo "Connectie Database mislukt: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT name,message,email,datetime FROM guestbook");

if(mysqli_num_rows($result) == 0) { // gastenboek is nog leeg
echo 'Schrijf als eerste in het gastenboek!';
} else {

while($row = mysqli_fetch_array($result))
{ ?>

<div class="velden"> <!-- voor styling van alle echo's; zie CSS -->
<div class="header">
<div class="naam"><?php echo htmlspecialchars($row['name'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo naam-->
<div class="email"><?php echo htmlspecialchars($row['email'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo email-->
<div class="tijd"><?php echo $row['datetime']; ?></div> <!-- echo datum en tijd-->

</div>

<div class="bericht"><?php echo htmlspecialchars($row['message'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo bericht-->

</div>
<?php } ?>


<?php }
mysqli_close($con); // sluit connectie
?>

<div class="nieuw-bericht">
<a class="button" href="form.html">Plaats Nieuw Bericht</a> <!-- Nieuw bericht plaatsen -->
</div>

Zoals je ziet moeten we ook hier weer eerste connecteren op de DB. Dit doen we weer direct aan het begin.Wederom een check of connectie is gelukt en zonodig een error weergeven.
Aand e variabele $result wordt nu de data gekoppeld van de 4 velden die we in de DB hebben staan; te weten: naam, email, datum en tijd en bericht
We doen nu eerst een check of er al iemand in het gastenboek geschreven heeft. Zonee, dan geven we de melding: "Schrijf als eerste..."
Staat er wel al data in, dan gaan we die outputten. Elk veld komt met een echo op het scherm. We zetten de echo's nog even in een div zodat we die straks op een nette manier kunnen opmaken met css. Als laatste sluiten we weer de connectie met de DB.
Het anker onderaan geeft ons de mogelijkheid om een nieuw bericht te schrijven en verwijst weer naar onze form.

Voor de opmaak heb ik deze style gebruikt:

a.button, button[type=submit] {
background-color: #428bca;
padding: 10px;
color: #f6f6f6;
border-radius: 2px;
text-decoration: none;
cursor: pointer;
border: none;
font-size: 16px;
}

.velden {
width: 600px;
height: auto;
border: 1px solid #ccc;
border-radius: 2px;
background-color: #f6f6f6;
margin-bottom: 10px;
}
.header {

min-height: 30px;
height: auto;
background-color: #e5e5e5;
border-bottom: 1px solid #ccc;
}
.naam {
height: auto;
padding: 5px;
font-size: 16px;
float: left;
font-weight: bold;
}
.email {
height: auto;
padding: 5px 20px 5px 10px;
float: left;

}
.tijd {
height: auto;
padding: 5px 20px 5px 0;
float: right;

}

.bericht {
clear: both;
padding: 10px 5px 10px 5px;

}
a.button {
background-color: #428bca;
padding: 10px;
color: #f6f6f6;
border-radius: 2px;
text-decoration: none;
cursor: pointer;

}
.nieuw-bericht {
margin: 20px 0 20px 0;
}

Updated 1-4-2015: beveiliging op de input gezet en clean output

Dit hebben we gemaakt

Feedback welkom!!!



«1

Reacties

  • NOOIT gebruiken! :p

    Geen controle over de input noch output..

    Gebruik sowieso real_escape_string bij de inserts en htmlentities oid bij de outputs.
    nuet
  • je demo bevat nu een (onschadelijk) voorbeeldje..
  • PMPosts: 878
    hmmm... je hebt gelijk, zo te zien heb je de beveiliging goed getest; en dat is maar goed ook. Ik ga me eens verdiepen in de beveiliging en kom er nog op terug

  • Er zit totaal geen beveiliging in, maar zoals ik al zei, je hoeft alleen de input door real_escape_string te halen en de output "clean" te tonen. Je kan hiervoor bijvoorbeeld striptags voor gebruiken en bepaalde tags toe te staan zoals b, i, u etc, of gewoon helemaal geen html toestaan en door htmlentities te halen.
  • bewerkt ma 30 mrt 2015
    PMPosts: 878
    het stuk met mysql_real_escape_string is dit zo correct gedaan?

    // uitlzen inputvelden en toekennen aan variabelen
    $name = mysql_real_escape_string($_POST['name']);
    $email = mysql_real_escape_string($_POST['email']);
    $message = mysql_real_escape_string($_POST['message']);

    date_default_timezone_set('Europe/Amsterdam');
    $datetime=date("d-m-y \o\m\ H:i:s"); //datum en tijd met "om" ertussen

    $sql="INSERT INTO guestbook(name,email,message,datetime) VALUES('$name','$email','$message','$datetime')"; // data in de database zetten
  • Gewoon even een string invoeren met quotes en in de db kijken :)
    Ikzelf gebruik eigenlijk altijd dit opzetje:


    <?php
    //db stuff
    $mysqli = @new mysqli('host', 'user', 'pass', 'database');

    //connect
    if ($mysqli->connect_error)
    {
    die('Connect Error: ' . $mysqli->connect_error);
    }

    //charset
    $mysqli->set_charset("utf8");

    // query's
    $qry = $mysqli->query("select * from pages where page = '".$mysqli->real_escape_string($_GET['page'])."'") or die($mysqli->error);

    //num rows (select)
    if($qry->num_rows < 1)
    {
    header('HTTP/1.0 404 Not Found', true, 404);
    }
    else
    {
    //fetch
    while($page = $qry->fetch_assoc())
    {
    $titel = stripslashes(htmlentities($page['titel']));
    }
    }
    ?>
    nuet
  • PMPosts: 732
    Een leuke en handige functie is toAscii


    class data {

    public $title = null;

    public function toAscii($str, $replace=array(), $delimiter='-') {
    if( !empty($replace) ) {
    $str = str_replace((array)$replace, ' ', $str);
    }
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
    return $clean;
    }

    public function __construct( $data=array() ) {
    if ( isset( $data['title'] ) ) $this->title = $this->toAscii( $data['title'], '', ' ' );
    }

    }
    nuet
    If it's not fun, you're not doing it right!
  • bewerkt ma 30 mrt 2015
    PMPosts: 878
    Ik heb nu de 3 strings aangepast:

    // uitlzen inputvelden en toekennen aan variabelen
    $name = mysqli_real_escape_string($con, $_POST['name']);
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $message = mysqli_real_escape_string($con, $_POST['message']);

    Vervolgens heb ik bij de echo's gebruik gemaakt van htmlspecialchars():


    <div class="naam"><?php echo htmlspecialchars($row['name'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo naam-->
    <div class="email"><?php echo htmlspecialchars($row['email'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo email-->
    <div class="tijd"><?php echo $row['datetime']; ?></div> <!-- echo datum en tijd-->

    </div>

    <div class="bericht"><?php echo htmlspecialchars($row['message'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo bericht-->

    Is dit nu veilig genoeg?
  • bewerkt ma 30 mrt 2015
    PMPosts: 415
    nu gaat het mijn hackskills in ieder geval te boven (ben ook geen hacker :D )

    Nu nog wat opmerkingen die evt ook wel van enig nut zijn.
    De datum zou ik gewoon in een datetime of timestamp opslaan, dan kun je er meer mee doen dan nu. (al is dit voor het voor het gastenboek niet helemaal nodig en is het sneller zoals jij het nu doet)

    Verder zou je ook moeten overwegen wat er gaat gebeuren als je een paar honderd records in de db hebt staan, dat wordt een lange pagina!! (en traag).

    Hierbij kan de datum dan weer in het voordeel spelen, je kunt dan bijvoorbeeld de gastenboekrecords over "per jaar" pagina's verdelen.

    En als laatste zou ik je gastenboek andersom sorteren, nu komt de laatste record onderaan,..

    edit, nog wat getest in je voorbeeldje, maar lijkt niet te lukken met mijn skills :)
    Er komt nog wel een html/css puntje aan het licht (te lange strings)
  • PMPosts: 878
    Yep, weer waardevolle informatie. Er gaat qua opmaak ook nog van alles fout zie ik idd; output komt buiten de div terecht
    En pagination: helemaal gelijk; moet iets inbouwen dat om de bijv. 10 records een nieuwe page komt met een tab.
    Ook het laaste geplaatse bericht bovenaan laten verschijnen.; meest logisch idd
    Over die beveiliging; dit is voor mij ook echt de eerste keer dat ik me hierin echt verdiep.
    enfin, weer wat werk aan de winkel...
  • PMPosts: 732
    eventueel uitlezen met een LIMIT ? hierdoor zou je er een pagina navigatie aan kunnen hangen.
    If it's not fun, you're not doing it right!
  • bewerkt wo 1 apr 2015
    PMPosts: 415
    Een pagina systeem is wel iets meer dan limit hoor :P

    Je moet eerst het aantal records weten, dan delen door het aantal gewilde records per pagina, dan pagina nummers opbouwen, en lieftst niet zoals in 1980 in deze trent [1][2][3][4][5][6][7][8][9][10 tm 1033
    maar zoals het tegenwoordig gaat en je bv alleen zo iets ziet:
    [<<] [<] [2] [3] <u>4 [5] [6] [>] [>>] van xxx
    Het is geen wereld opgave, maar je moet er toch een beetje over nadenken ;-)

    edit, bugje? als je mijn post edit zie je dat de 4 underlined moet zijn

    nuet
  • PMPosts: 732
    Als je even speelt dan kom je er wel.
    En met dit weer ben je van de straat :)
    nuet
    If it's not fun, you're not doing it right!
  • bewerkt wo 1 apr 2015
    PMPosts: 878
    tja, het heeft met die hoek brackets te maken < en >; in combinatie met htmLawed die enabled is. En ik heb html als input formatter. Je mag die hoek brackets blijkbaar alleen gebruiken voor html tags.

    Hier kun je het testen: http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php


  • bewerkt do 2 apr 2015
    PMPosts: 878
    pagination eindelijk klaar webprofis.nl/demo/vd/1/php-scripten/gastenboek/index.html

    Hieronder staat de functie: ( heb deze niet zelf gemaakt hoor: -S )

    <?php
    function pagination($query,$per_page=10,$page=1,$url='?'){
    global $conDB;
    $query = "SELECT COUNT(*) as `num` FROM {$query}";
    $row = mysqli_fetch_array(mysqli_query($conDB,$query));
    $total = $row['num'];
    $adjacents = "2";

    $prevlabel = "&lsaquo;";
    $nextlabel = "&rsaquo;";
    $lastlabel = "&rsaquo;&rsaquo;";

    $page = ($page == 0 ? 1 : $page);
    $start = ($page - 1) * $per_page;

    $prev = $page - 1;
    $next = $page + 1;

    $lastpage = ceil($total/$per_page);

    $lpm1 = $lastpage - 1; // //laatste pagina -1

    $pagination = "";
    if($lastpage > 1){
    $pagination .= "<ul class='pagination'>";
    $pagination .= "<li class='page_info'>Pagina {$page} van {$lastpage}</li><br /><br />";

    if ($page > 1) $pagination.= "<li><a href='{$url}page={$prev}'>{$prevlabel}</a></li>";

    if ($lastpage < 1 + ($adjacents * 2)){ // 7
    for ($counter = 1; $counter <= $lastpage; $counter++){
    if ($counter == $page)
    $pagination.= "<li><a class='current'>{$counter}</a></li>";
    else
    $pagination.= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
    }

    } elseif($lastpage > 1 + ($adjacents * 2)){ // 5

    if($page < 1 + ($adjacents * 2)) {

    for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++){
    if ($counter == $page)
    $pagination.= "<li><a class='current'>{$counter}</a></li>";
    else
    $pagination.= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
    }
    $pagination.= "<li class='dot'>...</li>";
    $pagination.= "<li><a href='{$url}page={$lpm1}'>{$lpm1}</a></li>";
    $pagination.= "<li><a href='{$url}page={$lastpage}'>{$lastpage}</a></li>";

    } elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {

    $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
    $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
    $pagination.= "<li class='dot'>...</li>";
    for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
    if ($counter == $page)
    $pagination.= "<li><a class='current'>{$counter}</a></li>";
    else
    $pagination.= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
    }
    $pagination.= "<li class='dot'>..</li>";
    $pagination.= "<li><a href='{$url}page={$lpm1}'>{$lpm1}</a></li>";
    $pagination.= "<li><a href='{$url}page={$lastpage}'>{$lastpage}</a></li>";

    } else {

    $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
    $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
    $pagination.= "<li class='dot'>..</li>";
    for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) {
    if ($counter == $page)
    $pagination.= "<li><a class='current'>{$counter}</a></li>";
    else
    $pagination.= "<li><a href='{$url}page={$counter}'>{$counter}</a></li>";
    }
    }
    }

    if ($page < $counter - 1) {
    $pagination.= "<li><a href='{$url}page={$next}'>{$nextlabel}</a></li>";
    $pagination.= "<li><a href='{$url}page=$lastpage'>{$lastlabel}</a></li>";
    }

    $pagination.= "</ul>";
    }

    return $pagination;
    }
    ?>

  • De connectie hoef je toch niet global te maken? Die kun je toch meegeven in de params van die functie?
    Je hoeft niet alles te tellen, alleen de id's is voldoende en sneller.

    $query = "SELECT COUNT(id) as num FROM" . $query";

    Als je ?pagina=99 ingeeft mag je de eerste zijn die een bericht mag schrijven, daar zou je eigenlijk een 404 op moeten teruggeven.

    Ik neem aan de je $_GET['page'] ook door real_escape_string haalt?

    Verder ziet het er goed uit.
    nuet
  • bewerkt do 2 apr 2015
    PMPosts: 878
    ik zal ff alles posten wat de output aangaat:
    de connectie heb ik apart gezet:
    connection.php:

    <?php
    // connecteren op DB
    $db_username = 'user_name'; // //user die op DB connecteert
    $db_password = 'user_password'; // //Password van de user die op DB connecteert
    $db_name = 'guestbook'; // Naam DB
    $db_host = 'localhost'; // host, meestal localhost

    $conDB = mysqli_connect($db_host, $db_username, $db_password, $db_name)or die('Error: Connectie DB mislukt...');
    ?>
    functions.php: staat al hierboven in vorige post
    gastenboek.php:

    <link rel="stylesheet" type="text/css" href="gastenboek.css" media="all" />

    <?php
    include_once('connection.php');
    include_once('functions.php');

    $page = (int)(!isset($_GET["page"]) ? 1 : $_GET["page"]);
    if ($page <= 0) $page = 1;

    $per_page = 1; // hoeveel records tonen per pagina

    $startpoint = ($page * $per_page) - $per_page;

    $statement = "guestbook ORDER BY datetime DESC"; // records sorteren; laatst toegevoegde eerst tonen DESC

    $results = mysqli_query($conDB,"SELECT * FROM {$statement} LIMIT {$startpoint} , {$per_page}");

    if (mysqli_num_rows($results) != 0) { // als DB niet leeg is

    // output van de records
    while ($row = mysqli_fetch_array($results))
    { ?>
    <div class="wrapper">
    Ik heb zolang maar 1 record per pagina getoond om de pagination beter te testen<br /><br />
    <div class="velden"> <!-- voor styling van alle echo's; zie CSS -->
    <div class="header">
    <div class="naam"><?php echo htmlspecialchars($row['name'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo naam-->
    <div class="email"><?php echo htmlspecialchars($row['email'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo email-->
    <div class="tijd"><?php echo $row['datetime']; ?></div> <!-- echo datum en tijd-->

    </div>

    <div class="bericht"><?php echo htmlspecialchars($row['message'], ENT_QUOTES, UTF-8, true); ?></div> <!-- echo bericht-->

    </div> <!-- end velden -->

    <?php } ?>


    <br /><br />
    <?php echo pagination($statement,$per_page,$page,$url='?'); ?>
    </div> <!-- end wrapper -->


    <?php } // end while
    else { // DB is dus nog leeg
    echo "Schrijf als eerste in het Gastenboek";
    }

    ?>
  • bewerkt vr 3 apr 2015
    PMPosts: 878
    heb wat gewijzigd:
    gastenboek.php regel 7 veranderd in:

    $page = (int)(!isset($_GET["page"]) ? 1 : mysqli_real_escape_string($_GET["page"]));
    in functions.php: regel 4 is nu:

    $query = "SELECT COUNT(id) as num FROM {$query}";
    connectie niet global maken zit ik nog mee te klungelen:
    Dit werkt in ieder geval niet:

    function pagination($conDB, $query,$per_page=10,$page=1,$url='?'){
    En dan de 404 nog erin verwerken

    edit: die $_GET['page'] door real_escape_string halen; dan werkt de pagination niet meer
  • nuet schreef:: edit: die $_GET['page'] door real_escape_string halen; dan werkt de pagination niet meer
    Klopt, omdat je zegt dat het een int moet zijn maar je typecast het naar een string dmv real_escape_string
    In dit geval hoef je die get dan ook niet verder te beveiligen.



    nuet schreef:: function pagination($conDB, $query,$per_page=10,$page=1,$url='?'){
    Maar wel als je de function aanroept met die gegevens erin toch? Dus:

    <?php echo pagination($conDB, $statement,$per_page,$page,$url='?'); ?>
    toch?
  • PMPosts: 878
    Waar zou ik die functie dan moeten callen wat je hierboven aangeeft?
    Ik snap het ff niet. Bovendien, dit is toch de functie?

    pagination($query,$per_page=10,$page=1,$url='?')

  • function pagination($conDB, $query,$per_page=10,$page=1,$url='?'){

    <?php echo pagination($conDB, $statement,$per_page,$page,$url='?'); ?>

    volgens mij moet dit gewoon werken.
  • PMPosts: 878
    Ik krijg het niet werkend daarmee of ik doe iets verkeerd. Zonder die global werkt het niet.
    Als je tijd en zin hebt, test het zelf even uit. Rechts boven gear-icon > upload > php-scripten > gastenboek. Download de bestandjes, edit ze , uploaden weer en kijken wat het doet
  • PMPosts: 878
    Die checkbox in de form, voor submit, ik zie die vaker als spamprotectie maar is dat nu werkelijk veilig om geautomatiseerde systemen tegen te houden die input leveren?
  • bewerkt vr 3 apr 2015
    PMPosts: 878
    die 404 heb ik nu zoiets:

    else { // DB is nog leeg
    if (isset($_GET['page']]) {
    // redirect naar 404;
    } else {
    echo "Schrijf als eerste in het Gastenboek";
    }
    }
    Maar vlg mij kan dit op een nettere manier
  • ik heb hier een vb zodat je kunt zien wat ik bedoel:


    <?php
    $conDB = 'ik ben de connectie';
    ?>

    <p>
    <?php
    //werkt perfect zonder moeilijk of globals meuk
    function aap($conDB, $a, $b, $c)
    {
    var_dump(func_get_args());
    }
    aap($conDB, 'a', 'b', 'c');
    ?>
    <p>


    </p>
    <?php
    //fout
    function noot()
    {
    echo $conDB; //foutmelding
    global $conDB; //werkt maar is niet de juiste manier
    echo $conDB; //werkt maar is niet de juiste manier
    }
    noot();
    ?>
    </p>

    wat betreft die checkbox, ik dacht dat de meeste bot's zo'n beetje standaard alle velden probeert te voorzien van data.
    Maar met zo'n simpele controle denk ik dat je vrij snel de pineut bent
    nuet
  • die 404 code die je net schreef is sowieso niet helemaal goed, want als je bv maar ????n record hebt, en ik geef in de url page=5 in, moet je ook een 404 geven en dat doet hij nu niet als ik de code goed lees.

    mijn antwoorden duren heel lang, mijn arm ligt in de poejer, heel hard verzwikt/gescheurde spier of weet ik wat, dus ik typ weinig en traag vandaag (of de komende tijd)
  • bewerkt vr 3 apr 2015
    PMPosts: 878
    dit schijnt wel te werken, althans ik krijg bij een pagina die nog niet bestaat een blanko page. Page 10 is de laatste, roep je een pagina erboven dan krijg je een blanko page, alle andere pagina's < 11 geeft ie gewoon de pagina weer

    else { // DB is dus nog leeg
    if (isset($_GET['page'])) {
    header('HTTP 1.1 404 Not Found');
    }
    else {
    echo "Schrijf als eerste in het Gastenboek";
    }

    of deze:

    <?php
    if (isset($_GET['page'])) {
    header('Deze pagina bestaat niet', true, 404);
    include('404_pagina.php');
    die();
    else {
    echo "Schrijf als eerste in het Gastenboek";
    }
    }

    Deze laatste schijnt goed te werken. Heb hem nu actief
  • het live voorbeeld lijkt het goed te doen.
  • bewerkt za 4 apr 2015
    PMPosts: 878
    ik heb hem werkend; snap nu wat je bedoelt:
    voorheen in functions.php:

    function pagination($query,$per_page=10,$page=1,$url='?'){
    global $conDB;
    verbeterde versie:

    function pagination($conDB,$query,$per_page=10,$page=1,$url='?'){
    //global $conDB;// deze disabled

    in gastenboek.php voorheen:

    echo pagination($statement,$per_page,$page,$url='?');
    verbeterde versie:

    echo pagination($conDB,$statement,$per_page,$page,$url='?');
Login of Registreer om te reageren.