Dag,

Ik ben helemaal de draad kwijt. Ik ben een tijdje geleden begonnen met het maken van een cms(je). Kan nu wat leuke standaard dingetjes doen, waaronder berichten posten. Hier de code, daaronder de vraag:

Form:

                <form class="post" method="post" action="includes/add_msg.php">
                    <p>
                        <label for="titel">Titel:</label>
                        <input id="titel" name="titel" type="text" />
                    </p>
                    <p>
                        <label for="bericht">Bericht:</label>
                        <textarea name="bericht" cols="50" rows="5" wrap="virtual"></textarea>
                    </p>
                    <p>
                        <input type="submit" value="Publiceren" />
                        <input type="reset" name="Submit2" value="Wis velden" />
                    </p>
                </form>


PHP verwerk script:

<?php
    require 'authenticatie.php';
	
	$corefuncs = 'corefuncs.php';
	if (file_exists($corefuncs) && is_readable($corefuncs)){
		include($corefuncs);
	}
	if (function_exists('nukeMagicQuotes')){
		nukeMagicQuotes();
	}
	
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Publiceren</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="Stylesheet" href="../style.css" type="text/css" />
</head>

<body>

<div id="dashwrapper">

<?php
	if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
  // verbinding maken met de database
		include('db_config.php'); 

		// ingevulde waardes 'opvangen' en tijdelijk opslaan
		$titel=$_POST['titel'];  
		$bericht=$_POST['bericht'];
		
		// datum en tijd in een variable zetten
		$datumtijd=date("y-m-d H:i:s");

		// gegevens wegschrijven naar de database 'forum'
		$sqlcode="INSERT INTO berichten (titel, bericht, datumtijd)VALUES('$titel', '$bericht', '$datumtijd')";
		$resultaat=mysql_query($sqlcode)or die(mysql_error());

		if($resultaat)
		{
?>
            <div>
			<p>Toevoegen Gelukt!!</p><br />
			<a href="../dashboard.php">Terug naar Dashboard</a>
            </div>
<?php
		}
		else
		{
?>
            <div>
			<p>Toevoegen Mislukt!</p><br />
			<a href="../dashboard.php">Terug naar Dashboard</a>
            </div>
<?php
		}

		mysql_close();
	}
?> 
    
</div>

</body>
</html>


Het probleem hiermee is dat de magic quotes dus weggehaald zijn, omdat ik overal lees dat dit aangeraden wordt "enzo". Ik heb ze dus weggehaald, maar als ik nu quotes invoer krijg ik natuurlijk een foutmelding. Allereerst vraag ik me af wat ik nu moet doen om dit te voorkomen? En welke manier daarvoor dus de juiste is?

Ten tweede, heb ik een functie gebruikt om de magic quotes weg te halen genaamd nukeMagicQuotes (uit mijn php leerboek). Maar kan ik dit niet beter in een php.ini aanpassen?

Bedankt!
posten vs. Magic Quotes
Posten is niet vs. Magic Quotes... Magic Quotes is een functionaliteit van PHP waar de meeste mensen niet blij mee zijn. That's it.

maar als ik nu quotes invoer krijg ik natuurlijk een foutmelding.
Wat voor foutmeldingen?

Controleer je overigens wel voordat je die magic-quotes weghaalt, of überhaupt dat systeem aan staat? ( http://nl2.php.net/get_magic_quotes_gpc )
De titel was meer bedoeld om aan te geven waar het over ging. Als je een bericht post, wil je dan wel of geen magic quotes?

Dit is de foutmelding die ik krijg:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sdf'sdf'sdf"dfäsdf', '09-09-23 13:11:56')' at line 1


Ik heb gecontroleerd of de magic-quotes aanstaan ja, en die staat aan. In mijn boek staat overigens dat je de functie nukeMagicQuotes altijd kunt gebruiken, of de magic quotes nou aan of uit staan op de server. Om te voorkomen dat je problemen krijgt als de server administrator dit verandert.
Jij zet de input zonder te controleren direct in de query => Sql-injection.
Zet er mysql_real_escape_string() omheen.

<?php
$titel=mysql_real_escape_string($_POST['titel']);  
$bericht=mysql_real_escape_string($_POST['bericht']);
?>


Zo dus. Het werkt nu inderdaad, bedankt! Alleen snap ik het dubbele werk nog niet hélemaal, misschien dat iemand dat nog kan uitleggen.

Overigens, moet ik bij al mijn SQL queries nu de mysql_real_escape_string() functie gebruiken? Dus DELETE, INSERT, UPDATE, datsoort dingen? En moet ik overal de functie nukeMagicQuotes uitzetten of zijn er momenten waarop je het best kunt gebruiken?

Reageren