Ik heb zojuist me CMS verbeterd met behulp van mensen op dit forum en zou graag willen weten wat jullie van dit systeem vinden.



Er zijn een paar kleine dingetjes die niet werken (wordt nog gemaakt) en de layout is inderdaad niet mooi, maar is ook administratie systeem.

Beheerder: DemoAdmin
Wachtwoord: Demo

Linkbuilder: DemoLinkbuilder
Wachtwoord: Demo

Een linkbuilder heeft trouwens minder opties!

Tips altijd welkom :)
$id = $_GET['id']; kan dus weg neem ik aan


<?php
	
	if($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))  
	{
		/* $id = $_GET['id']; */
		if($_SERVER['REQUEST_METHOD'] == "POST") 
		{
			
			if (strlen($_POST['bedrijf'])<1) 
			{
				$melding = 'Er is geen bedrijfsnaam ingevuld!';
			}
			else 
			{
				if (strlen($_POST['jaar'])<4) 
				{
					$melding = 'Er is geen jaartal ingevuld!';
				}
				else 
				{
					$updateCheck = "UPDATE linkbuilding_check 
										SET bedrijf = '" . htmlentities(mysql_real_escape_string($_POST['bedrijf'])) . "', 
											jaar = '" . htmlentities(mysql_real_escape_string($_POST['jaar'])) . "', 
											januari = '" . htmlentities(mysql_real_escape_string($_POST['januari'])) . "', 
											februari = '" . htmlentities(mysql_real_escape_string($_POST['februari'])) . "', 
											maart = '" . htmlentities(mysql_real_escape_string($_POST['maart'])) . "', 
											april = '" . htmlentities(mysql_real_escape_string($_POST['april'])) . "', 
											mei = '" . htmlentities(mysql_real_escape_string($_POST['mei'])) . "', 
											juni = '" . htmlentities(mysql_real_escape_string($_POST['juni'])) . "', 
											juli = '" . htmlentities(mysql_real_escape_string($_POST['juli'])) . "', 
											augustus = '" . htmlentities(mysql_real_escape_string($_POST['augustus'])) . "', 
											september = '" . htmlentities(mysql_real_escape_string($_POST['september'])) . "', 
											oktober = '" . htmlentities(mysql_real_escape_string($_POST['oktober'])) . "', 
											november = '" . htmlentities(mysql_real_escape_string($_POST['november'])) . "', 
											december = '" . htmlentities(mysql_real_escape_string($_POST['december'])) . "' 
										WHERE id='". mysql_real_escape_string($_GET['id']) ."'";
										
					$queryEdit = mysql_query($updateCheck);
					if ($queryEdit) 
					{
						$queryLogboek = mysql_query("INSERT INTO logboek (name, action, date) VALUES ('$username', 'Heeft het bedrijf " . $_POST['bedrijf'] . " aangepast', NOW() )");
		
						if($queryLogboek)
						{
							echo '<script>javascript:history.go(-2)</script>';
						}
					}
				}
			}
		}
	}
	
	$querySelect = mysql_query("SELECT * FROM linkbuilding_check where id ='$id'");
	$queryFetch = mysql_fetch_array($querySelect);

?>
>>> controle op het bestaan en of het een int is doe ik met

Dus je wéét dat het een int is. Waarom vertrouw je die variabele dan alsnog niet?

edit: en ik snap nog altijd niet waarom je eerst van $id een int maakt, en vervolgens in de query controleert als een string.
op regel 36 kun je eventueel nog $id gebruiken.

htmlentities() zou ik overal achterwege laten: die functie hoor je in combinatie met echo te gebruiken.
Je past nu namelijk de invoer aan. Wil je die ooit nog bewerken, zit je met dingen als &lt; en &euml; opgescheept.

Op regel 53 bestaat $id nog steeds niet.
Ivo P op 17/04/2014 14:28:10

op regel 36 kun je eventueel nog $id gebruiken.

htmlentities() zou ik overal achterwege laten: die functie hoor je in combinatie met echo te gebruiken.
Je past nu namelijk de invoer aan. Wil je die ooit nog bewerken, zit je met dingen als &lt; en &euml; opgescheept.

Op regel 53 bestaat $id nog steeds niet.


owja regel 53 klopt inderdaad, zag het over het hoofd, maar hoezo htmlentities() weghalen? dan kan je juist weer <script><script><script><script><script><script><script> doen en dat is ook niet goed
je controle kan altijd een keertje mislukken of niet 100% zijn.

Je code kan nog eens aangepast worden, waardoor je waterdichte controle alsnog niet meer werkt in alle gevallen.

Zeker als code grote stukken uit elkaar staat, kan de invloed van een kleine verandering wel eens groter blijken.

Ik zeg net bijvoorbeeld dat htmlentities() daar niet thuis hoort.

Wat daar dan eigenlijk wel duidelijk bij gezegd moet worden: als je dit aanpast, moet wel aan de andere kant (op het scherm echo-en) htmlspecialchars() gebruikt worden.

Ook bijvoorbeeld als je een pdf maakt, heb je een probleem als je data kapot gemaakt is met htmlenities.

----
iets anders: waarom 12 kolommen met de namen van de maanden?

Wat ga je daar opslaan?
Hoe wil je optellen over een jaar?
Hoe gaat dat als we een jaar verder zijn? komt dan het totaal van de maand april 2015 bij april van dit jaar?
>>> owja regel 53 klopt inderdaad, zag het over het hoofd, maar hoezo htmlentities() weghalen? dan kan je juist weer <script><script><script><script><script><script><script> doen en dat is ook niet goed

real_escape_string() voorkomt dat al. Htmlentities kan dus wel weg.
Ivo P op 17/04/2014 14:33:44


iets anders: waarom 12 kolommen met de namen van de maanden?

Wat ga je daar opslaan?
Hoe wil je optellen over een jaar?
Hoe gaat dat als we een jaar verder zijn? komt dan het totaal van de maand april 2015 bij april van dit jaar?


dan zal er een nieuwe aangemaakt moeten worden met het jaar 2015 en wordt 2014 inactief gezet, maar dat ga ik later allemaal nog uitbreiden

>>> dan zal er een nieuwe aangemaakt moeten worden met het jaar 2015 en wordt 2014 inactief gezet, maar dat ga ik later allemaal nog uitbreiden

Zoiets heet database normalisatie. Niet 12 vaste velden, maar oneindig.

<?php
$insertCheck =  "INSERT INTO linkbuilding_check 
									VALUES( '', 
											'', 
											'" . mysql_real_escape_string($_POST['bedrijf']) . "', 
											'" . mysql_real_escape_string($_POST['jaar']) . "', 
											'" . mysql_real_escape_string($_POST['januari']) . "', 
											'" . mysql_real_escape_string($_POST['februari']) . "', 
											'" . mysql_real_escape_string($_POST['maart']) . "', 
											'" . mysql_real_escape_string($_POST['april']) . "', 
											'" . mysql_real_escape_string($_POST['mei']) . "', 
											'" . mysql_real_escape_string($_POST['juni']) . "', 
											'" . mysql_real_escape_string($_POST['juli']) . "', 
											'" . mysql_real_escape_string($_POST['augustus']) . "', 
											'" . mysql_real_escape_string($_POST['september']) . "', 
											'" . mysql_real_escape_string($_POST['oktober']) . "', 
											'" . mysql_real_escape_string($_POST['november']) . "', 
											'" . mysql_real_escape_string($_POST['december']) . "')";
			
			$queryInsert = mysql_query($insertCheck);
?>

maar dit lost nog steeds niet het probleem op dat hij van ' dit maakt \'

welke code kan ik gebruiken om te zeggen dat tekens zoals ' niet mogen?

real_escape_string() voorkomt dat al. Htmlentities kan dus wel weg


nee. htmlspecialchars() moet wel toegepast worden, maar niet hier.
Die functie gebruik je bij echo.

stel ik sla de naam Mariëlle op.
Dan maakt die htmlentities daar Mari&euml;lle van.
Geen probleem, tot je er een plain-text mail, of een pdf van maakt.

----

Je zou de data compleet anders op moeten slaan.

tabel
id
bedrijfs_id
maand (1-12)
jaar
aantal

dan kun je eenvoudig optellen per kwartaal, per 4 jaar, per afgelopen 5 maanden etc.
en je hoeft niets nieuws per jaar te maken

Reageren