[PHP/MSSQL] HTMLArea Insert

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Bij de ontwikkeling van een intranet stuit ik op het volgende probleem:

Middels HTMLArea wordt een grote hoeveelheid informatie in een MSSQL Database gepompt. In eerste instantie was dat een MySQL database. Later is dat een MSSQL database geworden.

Er is op dit moment bijzonder veel documentatie aanwezig in de vorm van Word documentatie. Wanneer we de inhoud van deze files copy / pasten in de textvelden van HTMLArea was dat op de MySQL database geen enkel probleem. Helaas denkt de MSSQL database daar anders over. Schijnbaar is de opmaak (lees code) niet te verwerken in de MSSQL database.

Voorbeeld:

code:
1
2
3
4
5
Warning: mssql_query(): message: Line 2: Incorrect syntax near 'Times'. 
(severity 15) in d:\inetpub\Intranet\modules\help.php on line 132

Warning: mssql_query(): Query failed in d:\inetpub\Intranet\modules\help.php on line 132
Query Mislukt


Tekst opmaken met behulp van HTMLArea en wegschrijven in de MSSQL database is dus geen probleem. Kopieren van tekst vanuit Word wel. Schijnbaar wordt daar een extra stukje opmaak meegegeven welke niet wordt geaccepteerd door de MSSQL database.

Enig idee wat hier fout gaat?

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Er zit een fout in je query. En meer zinnigs is er nu niet te zeggen, zonder je query te zien.
Waarschijnlijk kan je eea al oplossen door Parametrized Queries te gebruiken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
code:
1
2
$sql  = "SELECT help_id, datum_toegevoegd, titel, inhoud FROM intern_help WHERE help_id = '$id'";
$resultaat = mssql_query($sql) or die ("Query mislukt");

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Ik gok dat er een single quote oid zit in je stuk tekst, iig wat het oplevert, waardoor deze gaat bokken.

Zet $sql eens op je scherm ipv dat je hem uitvoert en analyseer de geldigheid van deze query eens.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Het gaat dus al fout bij de SELECT query?? Als dat zo is heeft het niets met het "copy-pasten" vanuit Word te maken natuurlijk!

Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
In de tekst zitten allerlei leestekens, sterretjes, asterix etc. etc.
Er gaat dus e.e.a. fout in de query. MSSQL denkt daar anders over dan MySQL. Waarschijnlijk zal ik de tekst moeten converteren naar een leesbaar formaat voor MSSQL.

-> SELECT gaat prima.
Zonder copy past werkt het prima.

[ Voor 12% gewijzigd door Majestic op 08-12-2003 10:43 ]

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Zoek eens op escapen; ik gok dat hier je probleem ligt. Geen idee hoe dat moet in PHP.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt met de functie mysql_escape_string() quotes e.d. escapen.... Ik weet alleen niet of dat ook genoeg "dekking" geeft voor MSSQL, aangezien ik daar nog nooit mee gewerkt heb...

Acties:
  • 0 Henk 'm!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Zoals gezegd: escapen.
Kelsey made a note that the only character that MSSQL needs "escaping" is the single quote ', and it done by using two single quotes ''. You will want to make sure that, when using strings, you contain the strings in single quotes, since you can't escape double quotes.

In addition, you won't find a mssql_escape_string() function (though there are for other DB's, i.e. mysql_escape_string()), but using:

$escapedString = str_replace("'","''",$stringToEscape);

Will accomplish the same thing.

Today's subliminal thought is:


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Uit je verhaal begrijp ik dat mssql geen (Overbodige Word) html wil pakken.

Dan kan je met html_entities() de boel escapen, dit escaped quotes en ver vangt dingen als
code:
1
<
door
code:
1
&lt;

Dan wordt je query ongeveer
PHP:
1
2
$sql = "INSERT INTO tabel (inhoud) VALUES(' ".htmlentities($text, ENT_COMPAT)." ')";
/* ENT_COMPAT geef je aan dat sngle quote escaped moeten worden */


Met html_entity_decode(); kun je het zeer terug zetten in gewone html.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik denk dat Annie er dichter bij zit. Het verschil tussen mysql en mssql is dat bij de eerste de ' moet worden vervangen door een \' en bij de tweede door een ''. Pas je de eerste methode bij de tweede db toe dan gaat het natuurlijk fout (en niet alleen bij gepaste word tekst ;) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Ik gebruik binnen een intranetomgeving htmlarea voor het invullen van <textarea>'s.
Er wordt gebruik gemaakt van IIS op een Windows 2000 SBS. Als programmeertaal gebruiken we hoofdzakelijk php / javascript. De database is een SQL server.

Het vervelende van htmlarea is dat het op de IIS / SQL Server omgeving heel raar omspringt met quotes binnen de <textarea>'s. Wanneer een stuk tekst bijvoorbeeld tussen enkele quotes staat ontstaan direct syntax fouten:

code:
1
Warning: mssql_query(): message: Line 1: Incorrect syntax near 's'. (severity 15) in d:\inetpub\Intranet\modules\help.php on line 211


In dit voorbeeld heb ik alleen een s' toegevoegd.
Enig idee hoe htmlarea te manipuleren is om dit soort sinicure te voorkomen?

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

Kun je de texten niet, als ze gepost worden dm.v. htmlspecialchars()
op de correcte manier in de db zetten?

link

[ Voor 27% gewijzigd door koli-man op 12-12-2003 09:49 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

Verwijderd

wel eens van HTML entities gehoord? " wordt
code:
1
&quot;
en dat soort dingen. Is een mooie functie voor in PHP.

http://nl.php.net/manual/nl/function.htmlspecialchars.php

Ja KAN natruulijk zoiets krijgen als ik b.v. dit invoer:
Hoi 'ik' ben AAI

moet je je PHP code eens voorstellen, zoals het er uit zou zien als je een variabele die waarde geeft:
code:
1
$tekst = 'Hoi 'ik' ben AAI';

en zoek de fouten ;)

[ Voor 8% gewijzigd door Verwijderd op 12-12-2003 09:49 ]


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Hier worden de POST waarden geinsert.

PHP:
1
$sql = "INSERT INTO intern_help (datum_toegevoegd, titel, inhoud) VALUES ('$datum','$_POST[titel]','$_POST[inhoud]')";

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

erhm...

[rml][ PHP en MSSQL] HTMLArea[/rml]

Waarom open je een nieuw topic? Heb je uberhaupt wel iets met de informatie daar gedaan? Ik betwijfel het..

[ Voor 25% gewijzigd door gorgi_19 op 12-12-2003 09:50 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

PHP:
1
$_POST[titel] = htmlspecialchars($_POST[titel]);


maar opzoeken is natuurlijk inderdaad beter

[ Voor 25% gewijzigd door koli-man op 12-12-2003 09:51 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

koli-man schreef op 12 december 2003 @ 09:50:
PHP:
1
$_POST[titel] = htmlspecialchars($_POST[titel]);
Een single quote is afaik geen special char. En zo wel, dan zal hij hem niet op de juiste manier escapen voor SQL Server

[ Voor 17% gewijzigd door gorgi_19 op 12-12-2003 09:52 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
gorgi_19 schreef op 12 december 2003 @ 09:49:
erhm...

[rml][ PHP en MSSQL] HTMLArea[/rml]

Waarom open je een nieuw topic? Heb je uberhaupt wel iets met de informatie daar gedaan? Ik betwijfel het..
Zo dan, zit ik ffe te slapen.
Gooi deze maar op slot dan.

Mijn excuses.

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

Verwijderd

koli-man schreef op 12 december 2003 @ 09:50:
PHP:
1
$_POST[titel] = htmlspecialchars($_POST[titel]);


maar opzoeken is natuurlijk inderdaad beter
No offense maar ga eens kijken bij Array's in de PHP manual
code:
1
$_POST[titel]

is NIET netjes!!! Want wat is "titel" ?? geen variabele, want je hebt er geen $ voor.
ook geen tekst want er staan geen quotes omheen.

Dit zijn trouwens wel heel basic dingen hoor :7

Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Verwijderd schreef op 12 december 2003 @ 09:53:
[...]


No offense maar ga eens kijken bij Array's in de PHP manual
code:
1
$_POST[titel]

is NIET netjes!!! Want wat is "titel" ?? geen variabele, want je hebt er geen $ voor.
ook geen tekst want er staan geen quotes omheen.

Dit zijn trouwens wel heel basic dingen hoor :7
Bedoel je nu mijn code of die van koli_man?

[ Voor 8% gewijzigd door Majestic op 12-12-2003 09:57 ]

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Majestic schreef op 12 december 2003 @ 09:56:
[...]


Bedoel je nu mijn code of die van gorgi_19?
De code van koli-man, zo te zien. Jouw code trouwens ook niet netjes; het ziet er vrij gevoelig uit voor SQL Injection attacks en Cross Site Scripting attacks.

[ Voor 109% gewijzigd door gorgi_19 op 12-12-2003 10:03 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

Hij bedoelt die van mij. daar heeft hij gelijk in, maar ik had het inderdaad even te snel gepost.

[ Voor 25% gewijzigd door koli-man op 12-12-2003 09:57 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 16-09 14:45
addslashes($_POST['titel']) gebruiken :)

edit:
Dat geld uiteraard ook voor inhoud.
Ik gebruik htmlarea ook en ben er best tevreden over als je alleen maar in htmlarea blijft werken. Als je ook in de source gaat werken (dat <> symbooltje) dan gaat het allemaal wat minder (opmaak)...

[ Voor 78% gewijzigd door jan-marten op 12-12-2003 09:59 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

jan-marten schreef op 12 december 2003 @ 09:58:
addslashes($_POST['titel']) gebruiken :)
Gaat niet werken; MS SQL vereist een '' als escaping (2 single quotes achter elkaar), niet \', wat addslashes doet.

[ Voor 18% gewijzigd door gorgi_19 op 12-12-2003 10:01 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 16-09 14:45
:X stom van mij |:(

misschien zelf een 'addquotes' functie maken?

[ Voor 57% gewijzigd door jan-marten op 12-12-2003 10:02 ]


Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

Wanneer krijg je eigenlijk nou de fout?
bij het inserten of het lezen?

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

Verwijderd

Majestic schreef op 12 december 2003 @ 09:56:
[...]


Bedoel je nu mijn code of die van koli_man?
Bij beiden zie ik hetzelfde, de code van koli-man was ff overzichtelijker :D

Misschien wel handig om binnen PHP alle rare dingen uit de input te halen?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

koli-man schreef op 12 december 2003 @ 10:01:
Wanneer krijg je eigenlijk nou de fout?
bij het inserten of het lezen?
Bij het inserten; door de single quote lijkt het alsof het sql statement eerder afgelopen is dan hij in werkelijkheid is.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Ik weet niet of je er iets aan hebt, maar ik gebruikt altijd htmlentities. Je gebruikt het dan zo
PHP:
1
$var = htmlentities($var,ENT_QUOTES);

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Majestic schreef op 12 december 2003 @ 09:52:
[...]
Zo dan, zit ik ffe te slapen.
Gooi deze maar op slot dan.

Mijn excuses.
Dus je bent binnen een week vergeten dat je er al een topic over had :? What drugs are you on... :z

Ik merge ze wel ff.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Kan ik ook htmlentities gebruiken ín de SQL Query?

PHP:
1
$sql = "INSERT INTO intern_nieuws (medewerker_id, datum_toegevoegd, titel, inhoud) VALUES ('$medewerker_id','$datum','$_POST[titel]','$_POST[inhoud]')";


Zou ik in deze regel ook ná VALUES htmentities() kunnen gebruiken?

Zo dus:

PHP:
1
$sql = "INSERT INTO intern_nieuws (medewerker_id, datum_toegevoegd, titel, inhoud) VALUES (htmlentities('$medewerker_id','$datum','$_POST[titel]','$_POST[inhoud]'))";

[ Voor 33% gewijzigd door Majestic op 19-12-2003 10:40 ]

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

htmlentities is een PHP functie; je zult dus iets moeten maken als
PHP:
1
$sql = "INSERT INTO intern_nieuws (medewerker_id, datum_toegevoegd, titel, inhoud) VALUES ('". htmlentities[$datum] . "','$_POST[titel]','$_POST[inhoud]'))";

Geen idee of het correcte PHP is, maar je hebt het idee. :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
volgens mij heeft gorgi 19 al aangegeven dat paramaterized queries een oplossing is..., ik weet niet hoe dit in php is op te lossen, maar het lijkt me dat er wel het een en ander mogelijk is...

[google=paramaterized query]

daarnaast kennen we in asp het recordset object, (dus via objRS.addnew objRS.update), ik neem aan dat php hiervoor ook een implementatie heeft

p.s. ik weet dat de tweede oplossing niet efficient is, maar we hebben het hier over het updaten van de content van een intranet, iets wat bij mijn weten niet continu zal worden gedaan... en bovendien, die paar milliseconden...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
En met een $_POST wordt het dan?

PHP:
1
'" .htmlentities $_POST[inhoud] . "'


?

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Majestic schreef op 19 december 2003 @ 10:56:
En met een $_POST wordt het dan?

PHP:
1
'" .htmlentities $_POST[inhoud] . "'


?
PHP:
1
'" .htmlentities $_POST['inhoud'] . "'

zoiets gok ik, maar probeer het uit. Ik ben vele malen belabberder in PHP dan de gemiddelde bezoeker hier.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
De dubbele quotes sluiten de SQL Query al af.
Enkele quotes leveren parse errors op:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
PHP:
1
$inhoud = htmlentities($_POST['inhoud']);


Does the trick.

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Helaas blijft het beoogde effect uit.
Ik had gedacht dat de ' tekens weggeschreven zouden worden als
PHP:
1
'
de quotes leveren namelijk foutmeldingen op in de sql query.

Iemand een idee?

[ Voor 19% gewijzigd door Majestic op 19-12-2003 11:17 ]

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

vervang
SQL:
1
' 

voor
SQL:
1
''

[ Voor 21% gewijzigd door gorgi_19 op 19-12-2003 11:19 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
je bedoeld ['inhoud']?

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Nee, niet in de code, in het 'parsed' sql statement.

[ Voor 12% gewijzigd door gorgi_19 op 19-12-2003 11:23 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Majestic
  • Registratie: December 1999
  • Laatst online: 22-01-2024

Majestic

Neerlandici.

Topicstarter
Sorry,

Ik snap niet hoe dat het probleem zou kunnen oplossen.
Misschien moet ik iets duidelijker zijn.

Waneer in het textveld een ' invul, krijg ik de volgende melding:

Warning: mssql_query(): message: Unclosed quotation mark before the character string '\')'. (severity 15) in d:\inetpub\Intranet\modules\nieuws.php on line 26

Warning: mssql_query(): message: Line 1: Incorrect syntax near '\')'. (severity 15) in d:\inetpub\Intranet\modules\nieuws.php on line 26

Warning: mssql_query(): Query failed in d:\inetpub\Intranet\modules\nieuws.php on line 26

Je brengt me helemaal van mijn abrikoos.


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Je moet dus, zoals o.a. gorgi al zei, op een MSSQL server niet ' doen, maar ''. Dat is alles. :Y)

edit: dus
PHP:
1
2
3
$string = "mooh'mooh";

$goeieString = str_replace('\'','\'\'',$string); // oid

[ Voor 83% gewijzigd door RedRose op 19-12-2003 12:28 . Reden: slashes :| ]

Sundown Circus

Pagina: 1