[PHP+MSSQL] Single quote ellende

Pagina: 1
Acties:

  • Swanfield
  • Registratie: Juni 2004
  • Laatst online: 23-06-2025
Ik ben nu al enige tijd bezig met mijn probleem maar kan de juiste oplossing niet vinden, althans ik krijg het niet voor elkaar.

Ik heb een site waarin een tekstveld staat. In dit tekstveld vul je dan wat in en je drukt daarna op sumbit. Dan komt die tekst in de database. Dat werkt alleen als de tekst een ' bevat en je drukt op submit krijg ik een leeg scherm en er word niets in de database weg geschreven.

Ik heb rond gesnuffeld en kwam op een aantal sites uit met de oplossing bijvoorveeld str_replace te vinden op deze link ook heb ik nog een oude topic op GoT gevonden maar deze ging volgens mij over een ander probleem.

Ik moet dus de ' veranderen in een ander teken bijvoorbeeld : ofzo. Nu zal dit via een soort gelijk script gaan als deze:
PHP:
1
2
3
4
5
6
<?php
   function replaceText($text){
       //get rid of quotation marks
       $text=str_replace("'", "[singleQuote]", $description);
   }
?>


Maar ik krijg het niet voor elkaar.

De vragen die ik heb zijn:

Is dit wel de juiste manier?
Waar moet het script zich bevinden aagezien het om een $_POST gaat moet het volgens mij pas achter af gebeuren maar hoe en waar?

Hopelijk is het duidelijk anders hoor ik het graag :)

Je hoeft niet goed te zijn om de beste te zijn, zolang je maar beter bent dan de rest || Het is niet belangrijk om te winnen, maar het is het enige dat telt


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:42
Moet je je quotes niet escapen

Of anders gebruik je -als dat mogelijk is in php- gewoon parametrized queries.

https://fgheysels.github.io/


Verwijderd

http://nl3.php.net/addslashes

En om het af te vangen: gebruik een hidden variabele action, met daarin de actie die je uitvoert. Check hierop in de pagina, als deze waarde geset is, doe de query. Staat wel in elke tutorial, kan ook anders natuurlijk.

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 15-04 21:42
edit:
nevermind...verkeerd gelezen.

[ Voor 88% gewijzigd door Sybr_E-N op 18-01-2006 12:30 ]


  • Swanfield
  • Registratie: Juni 2004
  • Laatst online: 23-06-2025
Addslashes probeerde ik net op deze:

PHP:
1
2
3
4
5
<?
$add_question = mssql_query("INSERT INTO tblissue 
                (user_id,application_id,driver_id,version,os,description,how) 
            VALUES ('$user_id','".$_POST["application_id"]."','".$_POST["driver_id"]."','".$_POST["version"]."','".$_POST["os"]."','addslashes(".$_POST["description"].")','".$_POST["how"]."')");
 ?>


Misschien een rommeltje maar bij posten lukte het nog niet.

Je hoeft niet goed te zijn om de beste te zijn, zolang je maar beter bent dan de rest || Het is niet belangrijk om te winnen, maar het is het enige dat telt


  • FlorisB
  • Registratie: Augustus 2004
  • Laatst online: 20:41
PHP:
1
2
3
4
5
<? 
$add_question = mssql_query("INSERT INTO tblissue  
                (user_id,application_id,driver_id,version,os,description,how)  
            VALUES ('$user_id','".$_POST["application_id"]."','".$_POST["driver_id"]."','".$_POST["version"]."','".$_POST["os"]."','".addslashes( $_POST["description"] )."','".$_POST["how"]."')"); 
 ?>


tis een PHP functie.
Bij het uit de DB halen moet je stripslashes() gebruiken.

Verwijderd

Ik had het exact hetzelfde probleem. Ik heb het opgelost met

$text = htmlspecialchars( $_POST['text'],ENT_QUOTES);

http://be.php.net/htmlspecialchars

deze functie vormt de speciale tekens om naar hun html equivalent.
' (single quote) becomes ''' En dit laatste word dan niet gezien als een speciaal teken voor html of php en word dus correct geparsed.

[ Voor 22% gewijzigd door Verwijderd op 18-01-2006 12:31 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Misschien is het handig om voor MSSQL ook de voor MSSQL bedoelde escaping te gebruiken... addslashes, mysql_escape_string zijn voorbeelden van hoe het dan niet moet. Waarschijnlijk moet je ' door twee '' vervangen, dat is tenslotte hoe de SQL-standaard het definieert...

htmlspecialchars is weer heel wat anders en raad ik ook ten strengste af.

[ Voor 25% gewijzigd door ACM op 18-01-2006 12:35 ]


  • Swanfield
  • Registratie: Juni 2004
  • Laatst online: 23-06-2025
FlorisB schreef op woensdag 18 januari 2006 @ 12:30:
PHP:
1
2
3
4
5
<? 
$add_question = mssql_query("INSERT INTO tblissue  
                (user_id,application_id,driver_id,version,os,description,how)  
            VALUES ('$user_id','".$_POST["application_id"]."','".$_POST["driver_id"]."','".$_POST["version"]."','".$_POST["os"]."','".addslashes( $_POST["description"] )."','".$_POST["how"]."')"); 
 ?>


tis een PHP functie.
Bij het uit de DB halen moet je stripslashes() gebruiken.
.addslashes werkt ook niet. Ben nog even de rest aan het door lezen :p bedankt in ieder geval al voor de vele reacties _/-\o_

Je hoeft niet goed te zijn om de beste te zijn, zolang je maar beter bent dan de rest || Het is niet belangrijk om te winnen, maar het is het enige dat telt


Verwijderd

ACM schreef op woensdag 18 januari 2006 @ 12:31:
Misschien is het handig om voor MSSQL ook de voor MSSQL bedoelde escaping te gebruiken... addslashes, mysql_escape_string zijn voorbeelden van hoe het dan niet moet. Waarschijnlijk moet je ' door twee '' vervangen, dat is tenslotte hoe de SQL-standaard het definieert...

htmlspecialchars is weer heel wat anders en raad ik ook ten strengste af.
Oh, niet gezien dat het MSSQL was...

  • Swanfield
  • Registratie: Juni 2004
  • Laatst online: 23-06-2025
Verwijderd schreef op woensdag 18 januari 2006 @ 12:30:
Ik had het exact hetzelfde probleem. Ik heb het opgelost met

$text = htmlspecialchars( $_POST['text'],ENT_QUOTES);

http://be.php.net/htmlspecialchars

deze functie vormt de speciale tekens om naar hun html equivalent.
' (single quote) becomes ''' En dit laatste word dan niet gezien als een speciaal teken voor html of php en word dus correct geparsed.
Gelukt! heb dit ervan gemaakt: .htmlspecialchars($_POST["description"],ENT_QUOTES).

Tnx!

Je hoeft niet goed te zijn om de beste te zijn, zolang je maar beter bent dan de rest || Het is niet belangrijk om te winnen, maar het is het enige dat telt


  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 12-04 14:05
Via google opdracht "mssql escape php" kwam ik zo tegen:
Note, this function wont work with mssql or access queries.
Use the function above (work with arrays too).

function addslashes_mssql($str){
if (is_array($str)) {
foreach($str AS $id => $value) {
$str[$id] = addslashes_mssql($value);
}
} else {
$str = str_replace("'", "''", $str);
}

return $str;
}

function stripslashes_mssql($str){
if (is_array($str)) {
foreach($str AS $id => $value) {
$str[$id] = stripslashes_mssql($value);
}
} else {
$str = str_replace("''", "'", $str);
}

return $str;
}

Je kunt in mssql niet escapen met een \ schijnbaar. htmlspecialchars werkt vermoedelijk ook, maar hoe ga je dat dan weer terug converteren? Ook kost dat meer ruimte in je database, kijk maar op http://nl3.php.net/htmlspecialchars.

Ondernemer in tech (oud LOQED.com, nu UpToMore.com)


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

htmlspecialchars is ook helemaal niet bedoeld om te escapen, maar om data netjes te kunnen weergeven in HMTL. Ik snap dus ook niet echt hoe dat in dit geval een uitkomst kan zijn, aangezien hiermee de data op een ongevraagd manier getransformeerd wordt. :X

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1