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>
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /home/sandecv3/domains/sanderpals.nl/public_html/youtube/add.php on line 49

toch vrij duidelijk:

mysqli_real_escape_string verwacht precies 2 parameters, er wordt er 1 gegeven op regel 49 van ...
Ja maar ik kan jammer genoeg de fout niet vinden in de php.

Verder heb ik wel 2 domme fouten gevonden in me php die er niets mee te maken hadden. ik had 2 keer een mysqli_query en er stond === false en heb dit verranderd naar == false.


<?php
	if(count($melding) == 0) 
	{
		$queryInsert = "INSERT INTO	p_video 
									(pv_title, 
									pv_description, 
									pv_link)
							VALUES	('" . $pv_title=mysqli_real_escape_string($_POST['pv_title']) . "',
									'" . $pv_description=mysqli_real_escape_string($_POST['pv_description']) . "',
									'" . $pv_link=mysqli_real_escape_string($_POST['pv_link']) . "')";
		#  Check of query is gelukt    
		if (($queryInsert = mysqli_query($queryInsert)) == false) 
		{
			# als de query fout is -> foutafhandeling
			echo showSQLError($queryInsert, mysqli_error(),'Fout bij het invoegen van de post.');
		}
		else
		{
			# De query is geluk! :)
			echo 'Gebruiker is toegevoegt!';
		}
	}
?>

Ja maar ik kan jammer genoeg de fout niet vinden in de php


tja, het zou op zich handig zijn als php bij een foutmelding ook zou vermelden in welk script en op welke regel een fout optreedt.....
oh wacht....
Lees Ivo's vorige reactie eens over mysqli_real_escape_string(), je mist het argument van de connectie.
Ik heb de problemen opgelost met jullie hulp.


als jullie nog dingen zien die beter kunnen, overbodig zijn of afvragen waarom ik dat neer zet dan hoor ik het graag.


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

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

# sql debug
define('DEBUG_MODE',false);  // true == aan, false == uit
	
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
	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	('" . $pv_title = mysqli_real_escape_string($con, $_POST['pv_title']) . "',
									'" . $pv_description = mysqli_real_escape_string($con, $_POST['pv_description']) . "',
									'" . $pv_link = 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 toegevoegt!';
		}
	}
}
?>


<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']) ? $_POST['pv_title'] : false; ?>"><br>
					
		Beschrijving: 
		<input	type="text" 
				name="pv_description"
				value="<?php echo isset($_POST['pv_description']) ? $_POST['pv_description'] : false; ?>"><br>
					
		Link: 
		<input	type="text" 
				name="pv_link"
				value="<?php echo isset($_POST['pv_link']) ? $_POST['pv_link'] : false; ?>"><br>
					
		<br>
		<input	type="submit" 
				name="submit">
	</form>
</fieldset>
Ik mis nog wat validatie, volgens mij als ik dit zou typen als titel in jouw CMS: "<script>alert('mag niet...')</script>"; dan zou die dat uitvoeren... de mysqli_real_escape_string is wel goed maar dat is dus pas als je het in de database invoert, de value POSTS van je formulier zou ik ook valideren met bijvoorbeeld een standaard functie die de variable trimt en ervoor zorgt dat je geen speciale tags kan gebruiken.

Verder ziet de code er netjes uit.
De hele functie ShowSQLError() { } zou je prima in een functions.php kunnen plaatsen, zodat je die functie binnen je hele volledige script kunt gebruiken.
regel 49,50 en 51 is wat vreemd met de toewijzing aan een var en gelijktijdig het uitbreiden van een string.

"toegevoegt" is meestal met een D aan het einde.

regel 85 en verder missen htmlspecialchars()q
Aar dat klopt, anders zou het twintig keer in me php bestanden voorkomen. Ga ik zeker doen.

Ivo hoe zou jij regel 49, 50 en 51 dan doen?
En $text="Error" is best nietszeggend voor je bezoekers als je query mislukt.
Vertel ze gewoon dat er een technisch probleem bij jouw kant is, en dat ze het later nog eens moeten proberen.

Reageren