Post staat onder deze categorie omdat de text editor in js is.

Beste,

Na het implementeren van mijn Rich Text Editor (uEditor.js) kan ik wel handmatig text toevoegen. Maar als ik bepaalde teksten kopieer en plak vanuit kladblok, wordt de tekst wel weergeven in de textarea.. Maar zodra ik het op sla, wordt het niet toegevoegd aan de database

Geen idee of het nu aan mijn PHP functie ligt (aangezien hij in een normaal textarea field wel alles succesvol wegschrijft) of dat het aan de Javascript code ligt.

JS code:
https://github.com/laoqiu/uEditor/blob/master/uEditor.js

Misschien kunnen jullie het vinden.. Alvast bedankt!
C Stonebakers op 15/01/2014 09:39:22
zodra ik het op sla, wordt het zonder ene foutafhandeling gewoon niet toegevoegd aan de database


Lijkt me dat je geen of onvoldoende doet aan foutafhandeling. Controleer of de query goed is gegaan en check daarna ook of er daadwerkelijk iets is toegevoegd (affected_rows). Gebruik je mysql(i)_real_escape_string voor het de database in gaat? Anders kan het nog iets met de quotes te maken hebben.
Handmatig getypte teksten worden wel goed in de database gezet..


Code is even verkleind, anders wordt het gekkenwerk
<?php
	session_start();
		include '../connect.php';
	include 'head.php';
	

	
	if ($_SESSION['login'] != 1)
	{
		header('location:login.php');
		exit();
	}
	else
	{
		mysql_query("INSERT INTO events(titel, tekst, url) 
		VALUES('".$_POST['titel']."', '".$_POST['tekst']."', '".$_POST['url']."')");
?>





En nu je het zegt.. geen foutafhandeling haha, je krijgt alleen een melding als het is geupload anders niet
Content niet geescaped, zodra er dus een quote in de tekst staat ga je helemaal nat. Of dat nu uit een gecopieerde tekst komt, of uit handmatig ingevoerde tekst zal mysql een worst wezen.
Geen foutafhandelijk, bouw een normale fout afhandeling in om te zien of je een database error krijgt. En denk om SQL injection, met deze code kunnen kwaadwilligen je database vernielen/hacken etc...
Oke bedankt ik ga even aan de slag
Let overigens wel op dat [php]mysql_query[/php] vanaf PHP 5.5.0 deprecated is, geen idee hoelang je dit script wil gaan gebruiken maar zodra je server overgaat naar 5.5 zal het dus niet meer werken.

Kijk als vervanger voor [php]mysqli_[/php] of [php]PDO[/php], dit staat overigens wel los van het probleem dat je hebt.
Wat is de beste manier om SQL injection tegen te gaan?

Toevoeging op 15/01/2014 10:51:35:

Chris NVT op 15/01/2014 10:17:51

Let overigens wel op dat [php]mysql_query[/php] vanaf PHP 5.5.0 deprecated is, geen idee hoelang je dit script wil gaan gebruiken maar zodra je server overgaat naar 5.5 zal het dus niet meer werken.

Kijk als vervanger voor [php]mysqli_[/php] of [php]PDO[/php], dit staat overigens wel los van het probleem dat je hebt.


Hebben meer mensen me opgewezen :p, ik denk dat ik mysqli ga gebruiken in mijn huidige site. Komt goed ;)
De beste manieren:
1 - filter alle user input via bijvoorbeeld [php]filter_var[/php] functies.
2 - typecast alle niet string variabelen naar hun echte type
3 - gebruik de mysqli_real_escape_string functie voor alle variabelen die je als waarde in een query wilt hebben
4 - (of in plaats van 3) gebruik prepared statements met parameters, dit kan in zowel mysqli of pdo.
5 - als je user input gebruikt om kolomnamen te selecteren, zorg er dan voor dat je niet klakkeloos de user input overneemt, maar gebruik een switch statement (bijvoorbeeld) om een voorgedefinieerde waarde te gebruiken

En de oplossing die alle problemen zal voorkomen
6 - geen user input gebruiken in queries....
Voor mysql_ is het beste om je variabelen/waardes te escapen via mysql_real_escape_string();

Jou query die niet escaped is
<?php
 mysql_query("INSERT INTO events(titel, tekst, url) 
        VALUES('".$_POST['titel']."', '".$_POST['tekst']."', '".$_POST['url']."')");
?>


Jou code die wel escaped is
<?php
 mysql_query("INSERT INTO events(titel, tekst, url) 
        VALUES('".mysql_real_escape_string($_POST['titel'])."', '".mysql_real_escape_string($_POST['tekst'])."', '".mysql_real_escape_string($_POST['url'])."')");
?>


Voor mysqli is het mysqli_real_escape_string();
Voor PDo gebruik je prepared bijv
<?php
$titel = $_POST['titel'];
$tekst = $_POST['tekst'];
$url = $_POST['url'];
$ins = $conn->prepare("INSERT INTO events(titel, tekst, url) 
        VALUES(':titel', ':tekst', :url')");
$ins->bind_param(':titel', $titel, PDO::PARAM::STR, 5);
$ins->bind_param(':tekst', $tekst, PDO::PARAM::STR, 5);
$ins->bind_param(':url', $url, PDO::PARAM::STR, 5);
$ins->execute();
?>


Let wel alle methodes hierboven is nog steeds zonder foutafhandeling!

Reageren