Hoi iedereen,

Ik heb het CMS waar ik mee bezig was afgerond, maar nu ben ik een nieuwe aan het maken voor iets anders en probeer ik jullie tips van destijds te gebruiken.

Zijn er nog dingen die ik beter kan doen en weet iemand een goeie website waar een tutorial over foutafhandeling staat.

Ik ben nu van plan wel mysqli te gebruiken en normale PHP, dus geen OOP.




<?php
include "include/config.php";

if($_SERVER['REQUEST_METHOD'] == "POST")
{
	if (strlen($_POST['pv_title'])<1) 
	{
		$melding = 'Er is geen titel ingevuld!';
	}
	else 
	{
		if (strlen($_POST['pv_description'])<1) 
		{
			$melding = 'Er is geen beschrijving ingevuld!';
		}
		else 
		{
			if (strlen($_POST['pv_link'])<9) 
			{
				$melding = 'Er is geen link ingevuld!';
			}
			else 
			{
				$queryInsert = mysqli_query("INSERT INTO	p_video
										(pv_title,
										pv_description,
										pv_link)
									VALUES	('" . $pv_title=mysql_real_escape_string($_POST['pv_title']) . "',
										'" . $pv_description=mysql_real_escape_string($_POST['pv_description']) . "',
										'" . $pv_link=mysql_real_escape_string($_POST['pv_link']) . "')");
				if($queryInsert) 
				{
					header("location: SOMEWHERE.php");
				}
			}
		}
	}
}
?>


<fieldset>
	<?php
	echo $melding;
	?>
	<form	action="" 
				method="post">
	
		Titel: 
		<input type="text" 
					name="pv_title"><br>
					
		Beschrijving: 
		<input type="text" 
					name="pv_description"><br>
					
		Link: 
		<input type="text" 
					name="pv_link"><br>
					
		<br>
		<input type="submit" 
					name="submit">
	</form>
</fieldset>
zo is die nu:


<?php
include "include/config.php";

# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(0);

# sql debug
define('DEBUG_MODE',false);  // true == aan, false == uit
	
# functie voor sql debug
function showSQLError($sql,$error,$text='Er is een fout opgelopen tijdens het proces, probeer het later nog is!')
{
	if (DEBUG_MODE)
	{
		return  '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
	}
	else
	{
		return $text;
	}
}

if($_SERVER['REQUEST_METHOD'] == "POST")
{
	$melding = array();

	if (strlen($_POST['pv_title'])=="") 
	{
		$melding[] = 'Er is geen titel ingevuld!';
	}

	if (strlen($_POST['pv_description'])=="") 
	{
		$melding[] = 'Er is geen beschrijving ingevuld!';
	}

	if (strlen($_POST['pv_link'])<9) 
	{
		$melding[] = 'Er is geen link ingevuld!';
	}

	if(count($melding) == 0) 
	{
		$queryInsert = "INSERT INTO	pv_table 
									(pv_title, 
									pv_description, 
									pv_link)
							VALUES	('" . mysqli_real_escape_string($con, $_POST['pv_title']) . "',
									'" . mysqli_real_escape_string($con, $_POST['pv_description']) . "',
									'" . mysqli_real_escape_string($con, $_POST['pv_link']) . "')";
		
		$queryInsert = mysqli_query($con, $queryInsert);

		// met ! check ik of het niet zo is
		if ( ! $queryInsert ) 
		{
			echo showSQLError($queryInsert, mysqli_error($con), 'Fout bij het invoegen van de post.');
		}
		else
		{
			# De query is geluk! :)
			echo 'Gebruiker is toegevoegd!';
		}
	}
}
?>


<fieldset>
	<?php
	if(!empty($melding))
	{
		foreach($melding as $eenMelding)
		{
			echo $eenMelding . "<br>";
		}
	}
	?>
	<form method="post">
	
		Titel: 
		<input	type="text" 
				name="pv_title"
				value="<?php echo isset($_POST['pv_title']) ? htmlspecialchars($_POST['pv_title']) : false; ?>"><br>
					
		Beschrijving: 
		<input	type="text" 
				name="pv_description"
				value="<?php echo isset($_POST['pv_description']) ? htmlspecialchars($_POST['pv_description']) : false; ?>"><br>
					
		Link: 
		<input	type="text" 
				name="pv_link"
				value="<?php echo isset($_POST['pv_link']) ? htmlspecialchars($_POST['pv_link']) : false; ?>"><br>
					
		<br>
		<input	type="submit" 
				name="submit">
	</form>
</fieldset>
Racoon smasher op 01/07/2014 15:29:19

Aar dat klopt, anders zou het twintig keer in me php bestanden voorkomen. Ga ik zeker doen.


Euh... ;-)

Verder kan je define voor je DEBUG_MODE ook wel in je config geplaatst worden.

Verder snap ik deze contructie niet helemaal:

   if (strlen($_POST['pv_title'])=="") {

Ik had toch een mooi voorbeeld gegeven met trim() en een vergelijking met een lege string?
Ik heb het weer terug gezet, ik neem aan dat het zo moet staan en de derde wel strlen

<?php
	if (trim($_POST['pv_title'])=="") 
	{
		$melding[] = 'Er is geen titel ingevuld!';
	}

	if (trim($_POST['pv_description'])=="") 
	{
		$melding[] = 'Er is geen beschrijving ingevuld!';
	}

	if (strlen($_POST['pv_link'])<9) 
	{
		$melding[] = 'Er is geen link ingevuld!';
	}
?>
En wat als iemand als URL 'tralalalalalalalaa' invuit? Is een controle op http:// en https:// niet een handiger idee?
Ik moet sws heel veel beveiliging aan die url geven, want het mag alleen een youtube link zijn en er moet /watch?v= achter staan, maar het kan .com en .nl zijn en na die /watch?v= komen altijd 11 tekens te staan. gaat om een video van youtube.

voor een normale link beveiliging zou ik de type veranderen naar url inplaats van text

Reageren