Ik ben voor een kleine site een simpel cms systeempje aan het maken.
De pagina's voor de site zijn er, en de $titel en $content staan in een database. De gebruiker kan vervolgens het content gedeelte zelf invullen. Dit gaat middels een wijzig-pagina met fckeditor in het form.

Mijn idee is als volgt:
admin-pagina / met inlog
op die pagina een lijst met links naar de te wijzigen pagina's
wijzigen kan op de pagina wijzig.php_1, 2, etc.
op die opagina wordt middels onderstaand script de $titel en $content opgehaald en door de gruiker aangepast en opgeslagen.

Ik heb middels onderstaand script het basis idee werkend.
Ik heb met mijn beperkte php kennis enkele scripts aan elkaar geknoopt (onder andere een stukje uit simpel cms van phphulp en een topic van webmastercity een oude tuttorial voor een gastenboek) Tevens heb ik de tuto van phphulp beterffende php & mysql gelezen.

Ik heb echter het idee dat er an de invoerkant nog wel iets verbetert kan worden kwa veiligheid? Ook denk ik dat de gebruikt scriptdelen wellicht niet helemaal goed in elkaar zaten / zitten.
Mijn vraag: is dit systeempje veilig genoeg? Er is maar een gebruiker.
Kan het admindeel nog wat beter opgezet worden (niet te ingewikkeld)

dit is wijzig.php

<?php
ini_set ('display_errors', 1);
error_reporting (E_ALL); 
?>
<?php
// hier de eenvoudige pagina beveiliging
session_start();
if($_SESSION['login'] == 1 && $_SESSION['sid'] == session_id()){
?>

<?php // verbinden met de database
require_once("connect.php");?>
<?php
//  hier de fckeditor invoegen
include_once("fckeditor/fckeditor.php") ;
?>
<html>
<head>
<title>Content pagina 1 wijzigen</title>
</head>
<body>
<h1>Kop en Inhoud van de pagina wijzigen</h1>

<?php // de aangepaste gegevens weer in de database zetten - updaten 
if($_POST['submit']){
	if ($_POST['titel'] == ""){ 
	print("U hebt geen naam ingevuld, wat vereist is. Klik <a href=\"javascript:history.go(-1)\">hier</a> om terug te keren en uw naam in te vullen.<br>");
	} 
	else if ($_POST['content'] == ""){ 
	print("U heeft geen bericht ingevuld, wat vereist is. Klik <a href=\"javascript:history.go(-1)\">hier</a> om terug te keren en uw bericht in te vullen.<br>");
	}
else{
	$query="UPDATE content SET titel='".($_POST['titel'])."', content='".($_POST['content'])."' WHERE paginaid=1";
	$wijzig=mysql_query($query) or die(mysql_error());
	print("Pagina-inhoud gewijzigd<br>Klik <a href=\"admin_page.php\">hier</a> om terug te keren naar de admin_page.<br/> Of <a href=\"loguit.php\">hier</a> om uit te loggen");
}
}
// de gegevens uit de database ophalen om in het formulier  te tonen
else{
	$select = mysql_query("SELECT * FROM content WHERE paginaid=1");
	$data = mysql_fetch_array($select);
?>

<form name="data" method="POST" enctype="multipart/form-data" action="wijzig.php?id=1">
<table class="main" cellspacing="0" width="800" hight="300" align="center">
  <tr class="light">
    <td class="main" width="200">Koptekst*:</td>
    <td class="main" width="800"><input type="text" size="30" name="titel" value="<?php print($data['titel']);?>"></td>
  </tr>
    <tr class="dark">
    <td class="main" width="100" valign="top">Pagina inhoud*:</td>
	 <td class="main" width="800" height="300">
	 <?php
	$oFCKeditor = new FCKeditor('content') ;
	$oFCKeditor->BasePath = '/fckeditor/' ;
	//$oFCKeditor->CustomConfigurationsPath = '/pad naar mijn eigen_fckconfig.js' ;  werkt nog niet nog uitzoeken.
	$oFCKeditor->Value = $data['content']; // Hier komt dus de tekst in die geupdate kan worden. 
	$oFCKeditor->Width = "100%"; 
	$oFCKeditor->Height = 500;
	$oFCKeditor->Create() ;?> 
	</td>
  </tr>
  <tr class="title">
    <td class="main" colspan="2">
      <font size="3">* Hier moet altijd een tekst staan.</font>
      <input type="submit" value="Voeg toe">
    </td>
  </tr>
</table>
</form>
<?php
}
?>
</body>
</html>
<?php
}
else{
?>
<html>
<head>
<title>Verboden Toegang eerst inloggen</title>
<link rel="stylesheet" href="/tg.css">
</head>
<body>
<h1>Toegang gewijgerd</h1>
U bent niet gemachtigd om deze pagina te bekijken.</br>
Klik <a href="login.php">hier</a> om in te loggen.
</body>
</html>
<?php
}
?>


Had nog niet getest met de error_melding aan. Krijg nu dit:

Notice: Undefined index: submit in wijzig.php on line 24

Hoe los ik die op?
if(isset($_POST['submit'])){

ipv

if($_POST['submit']){
Tamara schreef op 28.11.2008 14:13
if(isset($_POST['submit'])){

ipv

if($_POST['submit']){


Nog beter:

if($_SERVER['request_method'] == 'POST')
@Tamara mooi dat werkt.
Iemand nog wat verbeter tips of tips m.b.t. de veiligheid?

mysql_real_escape_string()


voor je iets in je db zet, altijd escapen!!
Staat er inmiddels ook in. :) Moest wel het script aanpassen omdat nu bij opvragen in wijzig.php eerst stripslashes moest worden toegepast omdat anders de opmaak niet meer zichtbaar was door de toegepaste escapes.
Dat gebeurd overigens ook op de webpagina waar de bewerkte tekst / afbeeldingen te zien zijn.
Ben inmiddels weer een stuk verder met het CMS-je. Heb de basis werkend. Echter wil ik nog een stukje toevoegen (zie onder). Maar krijg het niet helemaal goed. In onderstaand scriptje wordt er wel netjes iets in de database gezet, maar vervolgens kom ik weer op de zelfde invoerpagina terug. Bij het script zoals dat hierboven staat, krijg je na het invoegen (submit) alleen te zien dat de invoer gelukt is, met een optie om terug te gaan of om uit te loggen. Ik krijg dat dus niet voor elkaar om dat bij bij dit scriptje ook zo te doen (er zou wellicht nog ergens een Else moeten komen?).

Waar gaat het fout?

het script (zonder opmaak)

<?php // verbinden met de database
require_once("connect.php");?>
<?php
//  hier de fckeditor invoegen
include_once("fckeditor/fckeditor.php") ;
?>
<?php
//wat vliegt de tijd?
if($_SERVER['REQUEST_METHOD'] == 'POST' )
{
$sql = "
    UPDATE
        content
    SET
        box_1_titel='".mysql_real_escape_string($_POST['box_1_titel'])."', box_1_inhoud='".mysql_real_escape_string($_POST['box_1_inhoud'])."',box_2_titel='".mysql_real_escape_string($_POST['box_2_titel'])."', box_2_inhoud='".mysql_real_escape_string($_POST['box_2_inhoud'])."' 
    WHERE
        paginaid=2
";
}
if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_affected_rows() == 0)
{
    echo 'Geen records gewijzigd. <br />Query: '.$sql;
}
else
//alleen dit stukje tonen als het updaten is gelukt
{
    echo 'Update was succesvol!';
}

// de (gewijzigde) gegevens uit de database ophalen om in het formulier  te tonen
$sql = "        
        SELECT *

        FROM
			content

        WHERE
			paginaid = 2
		";
		
//de gegevens in een array zetten
$resultaat  = mysql_query($sql);
$rij  = mysql_fetch_array($resultaat);
        $page_name   	  = stripslashes($rij['page_name']);
		$box_1_titel      = stripslashes($rij['box_1_titel']);
        $box_1_inhoud     = stripslashes($rij['box_1_inhoud']);
        $box_2_titel      = stripslashes($rij['box_2_titel']);
        $box_2_inhoud     = stripslashes($rij['box_2_inhoud']);		
//kijken of het gelukt is?
if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
};
?>

<form name="data" method="POST" enctype="multipart/form-data" action="?actie=wijzig1_boxes_nl&id=2">
<input type="hidden" name="submit" value="1">
Koptekst* / Hier de box_1 titel:</br>
    <input type="text" size="30" name="box_1_titel" value="<?php print($box_1_titel);?>"></br>
    Inhoud* / Hier de box_1 inhoud typen:
	 </br>
	 <?php
	$oFCKeditor = new FCKeditor('box_1_inhoud') ;
	$oFCKeditor->BasePath = '/fckeditor/' ;
	//$oFCKeditor->CustomConfigurationsPath = '/pad naar mijn eigen_fckconfig.js' ;  werkt nog niet nog uitzoeken.
	$oFCKeditor->Value = $box_1_inhoud; // Hier komt dus de tekst in die geupdate kan worden. 
	$oFCKeditor->Width = "100%"; 
	$oFCKeditor->Height = 500;
	$oFCKeditor->Create() ;?> 	
   </br>
Koptekst* / Hier de box_2 titel:</br>
    <input type="text" size="30" name="box_2_titel" value="<?php print($box_2_titel);?>"></br>
    Inhoud* / Hier de box_2 inhoud typen:
	 </br>
	 <?php
	$oFCKeditor = new FCKeditor('box_2_inhoud') ;
	$oFCKeditor->BasePath = '/fckeditor/' ;
	//$oFCKeditor->CustomConfigurationsPath = '/pad naar mijn eigen_fckconfig.js' ;  werkt nog niet nog uitzoeken.
	$oFCKeditor->Value = $box_2_inhoud; // Hier komt dus de tekst in die geupdate kan worden. 
	$oFCKeditor->Width = "100%"; 
	$oFCKeditor->Height = 500;
	$oFCKeditor->Create() ;?> 	
   </br>
Klaar? Klick dan hieronder op: <b>voeg toe</b> om de pagina op te slaan!</br></br>
    <input title="klick hier om de pagina op te slaan!" type="submit" value="Voeg toe">
</form>
<?php
if(isset($_POST['submit']))

Daar mag je van maken:
if($_SERVER['REQUEST_METHOD'] == 'POST')

En dat is een paar weken geleden ook al gezegd... Jammer dat je niets doet met de hulp die je wordt aangeboden.
@pgFrank

is er dan een voordeel bij ?
@Flip

Het voordeel is dat je dan de enige juiste methode gebruikt om te kijken of er gepost is.

Ik kan in een pagina best $_POST['waarde'] = 'inhoud'; doen, maar dat wil niet zeggen dat er ook echt gepost is. -> Controleren of er een post actie is gedaan doe je op de manier zoals Frank het je voor deed.

Reageren