Linebreaks & escape_query
dit is mijn eerste post en ik moet eerlijk zeggen dat ik me ook heb geregistreerd om deze te stellen.
Ik heb mezelf een tijdje terug op een blauwe maandag PHP geleerd via internet.
Ik kan naar mijn mening al aardig goed programmeren, maar soms loop ik tegen een probleempje aan, zoals nu om half 3 's nachts. Normaal google ik dan en vind ik zo een oplossing, maar nu niet. Ik hoop dan ook dat jullie mij uit de brand kunnen helpen.
Het probleem is als volgt:
Ik heb een form gemaakt in html en php (?action=register) waarvoor de code wordt geinclude vanuit form.inc.php , deze wordt gesubmit naar ?action=submit waar de $_POST variabelen worden gecontroleerd middels een include van submit.inc.php. De variabelen worden door de functies strip_tags en mysqli_real_escape_string gehaald en op bepaalde kenmerken gecontroleerd. Als een veriabele niet aan de voorwaarden voldoet, wordt in ?action=submit het forum weer tevoorschijn gehaald, en worden de waarden die ingevuld waren teruggezet via echo $variabele . Echter, in de text area worden de linebreaks daar als \r\n neergezet in de browser. Het vreemde is dat voordat er gesubmit wordt, dus op ?action=register, ik een standaardwaarde uit een variabele haal waar ik ook \r\n gebruik voor de linebreak, en dan werkt het wel.
Ik vermoed dus dat het iets met de escape_string te maken heeft, maar weet niet wat.
Heb ik een functie nodig waar ik niet mee bekend ben om dit op te lossen?
Alvast bedankt!
Server draait hier thuis onder Debian 6 met Apache 2 ; uit phpinfo():
Linux debian 2.6.32-5-amd64 #1 SMP Mon Feb 25 00:26:11 UTC 2013 x86_64
Apache/2.2.16 (Debian)
Rogier de Vries op 23/06/2013 02:48:37:
De variabelen worden door de functies strip_tags en mysqli_real_escape_string gehaald en op bepaalde kenmerken gecontroleerd. Als een variabele niet aan de voorwaarden voldoet, wordt in ?action=submit het forum weer tevoorschijn gehaald, en worden de waarden die ingevuld waren teruggezet via echo $variabele . Echter, in de text area worden de linebreaks daar als \r\n neergezet in de browser.
Voer je ook een query uit als een variabele niet aan alle voorwaarden voldoet?
Probeer HTML en SQL meer gescheiden te houden. Gebruik mysqli_real_escape_string() voor de SQL-expressie die je wilt gaan uitvoeren, niet voor de HTML-weergave van ingevoerde tekst.
Neem de query wordt niet uitgevoerd wanneer de waarden teruggezet worden.
Ik heb een functie gemaakt, heel simpel, die de string voorbereid op de sql-query:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function fixstring($string,$max,$connect){
$count = strlen($string);
$string = mysqli_real_escape_string($connect, strip_tags($string));
if ($count > $max){
$string = substr($string,0,$max -1);}
return $string;
}
?>
function fixstring($string,$max,$connect){
$count = strlen($string);
$string = mysqli_real_escape_string($connect, strip_tags($string));
if ($count > $max){
$string = substr($string,0,$max -1);}
return $string;
}
?>
Ik snap je punt over het scheiden van code, maar als ik die string straks weer uit mijn database haal, heb ik waarschijnlijk nog steeds dit probleem, of wordt dit dan verholpen daar een fetch functie?
Toevoeging op 23/06/2013 13:57:01:
Ik zie nu ook een fout staan, regel 3 en 4 van de functie heb ik even omgedraaid.
Gewijzigd op 23/06/2013 13:31:07 door Rogier de Vries