Bekijk Volledige Versie : php mysql vraag
Hoi,
Ik probeer vanaf een invulformulier een tekst op te laten slaan als .txt
bestand. Is dat überhaupt mogelijk of moet ik een heel andere oplossing
verzinnen. In welke richting moet ik het dan zoeken.
$docname="test.txt";
$fileSize= strlen($notitie);
$fileType="text/plain";
$notitie="test of dit wil";
$query = "INSERT INTO document (naam, size, type, bestand) " .
"VALUES ($docname, $fileSize, $fileType, $notitie)";
mysql_query($query) or die (mysql_error());
Dit geeft dan de foutmelding:
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 'of dit
wil)' at line 1
De betreffende velden in de tabel document:
id = integer (autoincrement,enz)
naam=varchar(45)
size=integer
type=varchar(45)
bestand=mediumblog
Hopelijk kan ik hier weer wat van leren. Bij voorbaat dank voor de aandacht.
bjorri.
bjorri wrote:
> Hoi,
>
> Ik probeer vanaf een invulformulier een tekst op te laten slaan als
> .txt bestand. Is dat überhaupt mogelijk of moet ik een heel andere
> oplossing verzinnen. In welke richting moet ik het dan zoeken.
>
>
> $docname="test.txt";
> $fileSize= strlen($notitie);
> $fileType="text/plain";
> $notitie="test of dit wil";
>
> $query = "INSERT INTO document (naam, size, type, bestand) " .
> "VALUES ($docname, $fileSize, $fileType, $notitie)";
> mysql_query($query) or die (mysql_error());
>
> Dit geeft dan de foutmelding:
>
> 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 'of dit
> wil)' at line 1
Strings moeten altijd gequote worden...
$query = "INSERT INTO `document` (`naam`, `size`, `type`, `bestand`)
VALUES ('{$docname}', {$fileSize}, '{$fileType}', '{$notitie}')";
Dit zal het trouwens alsnog niet opslaan als *.txt bestand natuurlijk, dit
zet het gewoon in de database.
--
Rik Wasmus
Maarten Wierda
04/01/07, 19:49
bjorri schreef:
> Hoi,
Dag,
> Ik probeer vanaf een invulformulier een tekst op te laten slaan als
> .txt bestand. Is dat überhaupt mogelijk of moet ik een heel andere
> oplossing verzinnen. In welke richting moet ik het dan zoeken.
Het is inderdaad mogelijk tekst vanuit een formulier op te slaan als
tekstbestand. Om te weten of dat de juiste oplossing is, is het
natuurlijk handig te vermelden waarom je data wil opslaan? Dan kunnen de
kenners hier, of misschien ik wel, je adviseren op welke manier je dat
het beste kunt bewerkstelligen.
> $docname="test.txt"; $fileSize= strlen($notitie);
> $fileType="text/plain"; $notitie="test of dit wil";
>
> $query = "INSERT INTO document (naam, size, type, bestand) " .
> "VALUES ($docname, $fileSize, $fileType, $notitie)";
> mysql_query($query) or die (mysql_error());
Hier probeer je bijvoorbeeld de inhoud van het tekstbestand uit te lezen
en toe te voegen aan de tabel 'document'. Dit doet me vermoeden dat je
die data uit het formulier eigenlijk gewoon direct wil opslaan in je
database, en dat je vermoedde dat de tussenkomst van een tekstbestand
daarbij noodzakelijk is, klopt dat?
--
Cheers,
Maarten Wierda
Maarten Wierda wrote:
> bjorri schreef:
>
>> Hoi,
>
> Dag,
>
>> Ik probeer vanaf een invulformulier een tekst op te laten slaan als
>> .txt bestand.
<het kan>
>
>> $docname="test.txt"; $fileSize= strlen($notitie);
>> $fileType="text/plain"; $notitie="test of dit wil";
>>
>> $query = "INSERT INTO document (naam, size, type, bestand) " . "VALUES
>> ($docname, $fileSize, $fileType, $notitie)"; mysql_query($query) or
>> die (mysql_error());
>
> Hier probeer je bijvoorbeeld de inhoud van het tekstbestand uit te lezen
> en toe te voegen aan de tabel 'document'. Dit doet me vermoeden dat je
> die data uit het formulier eigenlijk gewoon direct wil opslaan in je
> database, en dat je vermoedde dat de tussenkomst van een tekstbestand
> daarbij noodzakelijk is, klopt dat?
Zonder tussenkomst van een bestand zou ik er een text veld van maken en
dan lukt het me wel namelijk.
De bedoeling is om een lijst van word, excel en jpg bestanden te hebben
waar ook .txt en mogelijk ook nog zelf te creëren eml bestanden tussen
komen. De 'office' bestanden gaan via een bestand upload, dat gaat
prima. Tussen die lijst met bestanden wil ik dus ook tekstbestanden
kunnen zetten die ter plekke aangemaakt worden.
Ik heb de overweging gemaakt die text bestanden in een ander veld te
zetten maar dan denk ik dat ik later dan veel meer code moet kloppen om
weer als een enkele lijst te presenteren of bewerkingen op uit wil voeren.
Dank alvast.
bjorri.
Rik wrote:
> bjorri wrote:
<ander onderwerp>
> Strings moeten altijd gequote worden...
> $query = "INSERT INTO `document` (`naam`, `size`, `type`, `bestand`)
> VALUES ('{$docname}', {$fileSize}, '{$fileType}', '{$notitie}')";
>
Rik heeft het over alle strings tussen '' zetten en waarden kennelijk
ook nog eens tussen {}, dat kom ik in voorbeelden eigenlijk nooit tegen.
Nog meer haken en aanhalingstekens maakt het -voor mij- nog
onoverzichtelijker. Dus nog vaker zoeken naar dat missende cq overbodige
haakje, kommaatje of zelfs een spatie.
Als het werkelijk nut heeft ga ik dat advies natuurlijk wel opvolgen.
Mede gezien het feit dat ik die notatiewijze meer niet dan wel tegen kom
wil ik graag wat meer uitleg hebben dan 'het moet' :-) Als het moet
waarom is het dan nog niet algemeen gebruikt in tutorials?
bjorri.
bjorri wrote:
> Rik wrote:
>> bjorri wrote:
> <ander onderwerp>
>
>> Strings moeten altijd gequote worden...
>> $query = "INSERT INTO `document` (`naam`, `size`, `type`, `bestand`)
>> VALUES ('{$docname}', {$fileSize}, '{$fileType}', '{$notitie}')";
>>
>
> Rik heeft het over alle strings tussen '' zetten en waarden kennelijk
> ook nog eens tussen {}, dat kom ik in voorbeelden eigenlijk nooit
> tegen.
>
> Nog meer haken en aanhalingstekens maakt het -voor mij- nog
> onoverzichtelijker. Dus nog vaker zoeken naar dat missende cq
> overbodige haakje, kommaatje of zelfs een spatie.
>
> Als het werkelijk nut heeft ga ik dat advies natuurlijk wel opvolgen.
> Mede gezien het feit dat ik die notatiewijze meer niet dan wel tegen
> kom wil ik graag wat meer uitleg hebben dan 'het moet' :-) Als het
> moet waarom is het dan nog niet algemeen gebruikt in tutorials?
Waarom het zo te doen:
1. De `` om veldnamen:
- Op de manier forceer je dat MySQL altijd dit als (kort door de bocht)
tabel/velnaam te zien, ook als het een gereserveerde naam is. Dit houdt in
dat ook als je bijvoorbeeld een veld 'order' noemt dit met `` wel werkt.
Zonder die backticks om 'order' zou je query falen.
- Alhoewel dit enkel NODIG is bij gereserveerder namen is het een goede
gewoonte om aan te leren, in plaats van naderhand kijken waarom je query
faalt. Zeker in de meer complexe queries waarbij je je fout elders verwacht
kun je er veel tijd aan kwijt zijn. Jezelf aanleren om altijd die `` aan te
geven is makkelijker dan de hele tijd zoeken.
2. Het quoten van strings in queries:
- MySQL is vergevend, en zolang er geen whitespace-karakters in zitten
hersteld MySQL je fout wel. Het quoten van strings is echter NOOIT
optioneel geweest, en zou altijd gedaan moeten worden. De reden waarom zie
je: je query faalt nu omdat er een spatie in $notitie zit. Zelfs als je in
je code kunt garanderen dat er nooit een whitespace in zit zou ik '' nog
steeds niet weglaten.
3. Het gebruiken van accolades {} om variable in gequote strings:
- Het voordeel is dat bijvoorbeeld nu "{$notitie}en nog iets" wel
werkt, "$notitieen nog iets" faalt omdat $notitieen niet bestaat.
- Het voorkomt dus dubbelzinnigheid, en is zeker met dynamisch
samengestelde strings een manier om complexe fouten te voorkomen die anders
wellicht moeilijk te traceerbaar zijn.
- In het huidige voorbeeld zijn de accolades misschien wel overkill,
aangezien je 100% zeker kunt zeggen dat er altijd een ' na de variabel naam
komt.
- Het is andermaal een goede gewoonte om jezelf aan te leren. De kans
op fouten wordt gewoon kleiner, en op gegeven moment doe je het zo
automatisch dat zelfs wanneer het niet strikt noodzakelijk is het er gewoon
uit komt rollen, zo ook bij mij bij het herschrijven van de query.
Overzicht:
Een goede editor heeft syntax highlightinhg, die JUIST reageerd op de
verschillende quotes, backticks,accolades, etc. Hierbij zie je in 1
oogopslag of je een haakje hebt overgeslagen of niet. Dat maakt debuggen
toch een stuk makkelijker.
Om kort te gaan:
- Strings quoten in queries: noodzakelijk.
- Backticks om veldnamen: aan te raden, bij gereserveerde namen
noodzakelijk.
- Accolades om variabelen namen: optioneel, zelden noodzakelijk, maar een
goede gewoonte.
--
Rik Wasmus
Warden Dave
04/01/07, 19:49
"bjorri" <no@nl.invalid> wrote:
> Rik wrote:
>> Strings moeten altijd gequote worden...
>> $query = "INSERT INTO `document` (`naam`, `size`, `type`, `bestand`)
>> VALUES ('{$docname}', {$fileSize}, '{$fileType}', '{$notitie}')";
> Rik heeft het over alle strings tussen '' zetten en waarden kennelijk
> ook nog eens tussen {}, dat kom ik in voorbeelden eigenlijk nooit
> tegen.
Die 'curly brackets' (accolades) zijn dan ook niet nodig met die gewone
PHP variabelen binnen zo'n string met dubbele aanhalingstekens. Ook die
backtick-quoted identifiers hoeven zo niet als als de namen, zoals hier,
uit niets dan gewone lettertjes bestaan. Rik overdrijft 1 tikje.
Wel zul je strings (/stringwaarden) tussen aanhalingstekens moeten
plaatsen (bijv. '$docname') en er voor moeten zorgen dat bijv. de enkele
aanhalingstekens (en backslashes etc.) dan binnen de string ge-escaped
worden. (Zie 'addslashes'.)
WD
Warden Dave wrote:
> Die 'curly brackets' (accolades) zijn dan ook niet nodig met die
> gewone PHP variabelen binnen zo'n string met dubbele
> aanhalingstekens. Ook die backtick-quoted identifiers hoeven zo niet
> als als de namen, zoals hier, uit niets dan gewone lettertjes
> bestaan. Rik overdrijft 1 tikje.
Joah, misschien.
Rik was het zat om telkens te moeten zoeken waar het precies fout ging en
heeft zich een aantal zaken aangeleerd waardoor de meest voorkomende fouten
sowieso worden afgevangen/niet voorkomen :-).
Zeker met die backticks, het is sneller om zonder na te denken gewoon die
backticks te gebruiken dan bij elke veld/tabelnaam na te moeten denken:"Is
dit een gereserveerd woord? Ja, oh, laat ik dan maar eens backticks
gebruiken.".
> Wel zul je strings (/stringwaarden) tussen aanhalingstekens moeten
> plaatsen (bijv. '$docname') en er voor moeten zorgen dat bijv. de
> enkele aanhalingstekens (en backslashes etc.) dan binnen de string
> ge-escaped worden. (Zie 'addslashes'.)
Euhm, dat is wat onbetrouwbaar. Beter is mysql_real_escape_string()
(aangezien er MySQL gebruikt wordt). Maar dan nog zou er met kapotte
multibyte karakters door kwaadwillenden gevogeld kunnen worden... Nog een
stapje beter is het gebruik van prepared statements als de server het
ondersteund.
--
Rik Wasmus
Warden Dave
04/01/07, 19:49
"Rik" <luiheidsgoeroe@hotmail.com> wrote:
> Warden Dave wrote:
>> enkele aanhalingstekens (en backslashes etc.) dan binnen de string
>> ge-escaped worden. (Zie 'addslashes'.)
> Euhm, dat is wat onbetrouwbaar. Beter is mysql_real_escape_string()
Inderdaad iets meer aangewezen voor sommige soorten data, maar OP zal in
de handleiding wel even bij 'addslashes' mogen kijken om dat vanzelf te
ontdekken en dan i.v.m. z'n op de post gedane formulier ook
'magic_quotes_gpc'/'get_magic_quotes_gpc' en 'stripslashes' etc.
WD
Warden Dave wrote:
> "Rik" <luiheidsgoeroe@hotmail.com> wrote:
>> Warden Dave wrote:
>
>>> enkele aanhalingstekens (en backslashes etc.) dan binnen de string
>>> ge-escaped worden. (Zie 'addslashes'.)
>
>> Euhm, dat is wat onbetrouwbaar. Beter is mysql_real_escape_string()
>
> Inderdaad iets meer aangewezen voor sommige soorten data, maar OP zal
> in de handleiding wel even bij 'addslashes' mogen kijken om dat
> vanzelf te ontdekken en dan i.v.m. z'n op de post gedane formulier ook
> 'magic_quotes_gpc'/'get_magic_quotes_gpc' en 'stripslashes' etc.
Joah. Een beetje zoeken kan geen kwaad, maar aangezien addslashes() nog zo
vaak onterecht wordt gebruikt, en dus ook in vele voorbeelden staat, wilde
ik er wel even op wijzen.
Ook: nieuwe hoster, het eerste wat eventuele in de .htaccess gaat is
altijd:
php_flag magic_quotes_gpc off
Alsof PHP kan ruiken wat ik wil escapen, tssk :P.
--
Rik Wasmus
Warden Dave wrote:
> maar OP zal in
> de handleiding wel even bij 'addslashes' mogen kijken om dat vanzelf te
> ontdekken en dan i.v.m. z'n op de post gedane formulier ook
> 'magic_quotes_gpc'/'get_magic_quotes_gpc' en 'stripslashes' etc.
>
> WD
Mooi, naast wat nuttige algemene tips ook nog de richting waar ik het
antwoord op mn vraag moet zoeken. Wordt lezen vanavond.
Bedankt.
bjorri.
bjorri wrote:
> Warden Dave wrote:
> > maar OP zal in
>> de handleiding wel even bij 'addslashes' mogen kijken om dat vanzelf
>> te ontdekken en dan i.v.m. z'n op de post gedane formulier ook
>> 'magic_quotes_gpc'/'get_magic_quotes_gpc' en 'stripslashes' etc.
>>
>> WD
>
> Mooi, naast wat nuttige algemene tips ook nog de richting waar ik het
> antwoord op mn vraag moet zoeken. Wordt lezen vanavond.
>
> Bedankt.
>
> bjorri.
Rik, Warden en ook Maarten,
Ondertussen wat zitten verdiepen in het slashes verhaal, dat kwartje is
aan het vallen. Is het een bezwaar om standaard mysql_real_escape_string
te gebruiken bij het invoeren van (string)data in de database? Zijn er
situaties waarin adslashes de voorkeur verdient?
Ook realiseer ik me dat de `backticks` duidelijk te onderscheiden zijn
van 'enkele aanhalingstekens'. Dat geeft waarschijnlijk juist beter
onderscheid naar veld en tabel namen tov andere gegevens. Vanaf nu ga ik
dat dus toch gebruiken. Het mechaniek van '$strings' tussen '' zetten is
me ook iets duidelijker geworden, een twijfeltje zit er nog wat het
verschil is tussen '$getal' en '1' (Waarom niet '"1"'). Als ik queries
laat zien met echo $query lijkt daar geen verschil tussen te zitten,
kost me nu nog wat moeite maar dat begrip komt vanzelf hoop ik.
Bedankt en een prettig weekend.
bjorri.
Rik wrote:
> Overzicht:
> Een goede editor heeft syntax highlightinhg, die JUIST reageerd op de
> verschillende quotes, backticks,accolades, etc. Hierbij zie je in 1
> oogopslag of je een haakje hebt overgeslagen of niet. Dat maakt
> debuggen toch een stuk makkelijker.
Na een stuk of 15 verschillende IDE's en editors voor diverse talen en
ontwikkelomgevingen, ben ik eigenlijk nog nooit een programma tegengekomen
die dit goed kan. Vooral geneste structuren en structuren in strings worden
niet overzichtelijk gehighlight. Dus ik ben wel benieuwd:
Wat vind jij 'juiste' syntax highlighting, en welke prorgramma's bieden dat?
Je zou me erg kunnen helpen met een goeie tip,
Inca
--
There is no need for a lavalamp unless you're on drugs - Gilmore Girls
Inca wrote:
> Rik wrote:
>> Overzicht:
>> Een goede editor heeft syntax highlightinhg, die JUIST reageerd op de
>> verschillende quotes, backticks,accolades, etc. Hierbij zie je in 1
>> oogopslag of je een haakje hebt overgeslagen of niet. Dat maakt
>> debuggen toch een stuk makkelijker.
>
> Na een stuk of 15 verschillende IDE's en editors voor diverse talen en
> ontwikkelomgevingen, ben ik eigenlijk nog nooit een programma
> tegengekomen die dit goed kan. Vooral geneste structuren en
> structuren in strings worden niet overzichtelijk gehighlight. Dus ik
> ben wel benieuwd:
> Wat vind jij 'juiste' syntax highlighting, en welke prorgramma's
> bieden dat?
Mijn favoriet blijft nog wel UltraEdit. Helaas niet gratis, maar met een
geweldige 'tweakabiliy', en met wast spelen met brace-matching kom je er
wel uit. Er is geen 'juiste' syntax highlighting, er is een highlighting
die je ligt, en dat moet gewoon helemaal in te stellen zijn. Mijn
voornaamste reden om UltraEdit te gebruiken zijn toch wel de goed in te
stellen Syntax Highlighting, Key Mapping & Tools. Mijn toetsenbord is
overladen met CTRl/SHIFT/ALT/letter combinaties. Geniaal, en een enorme
tijdsbesparing. Het heeft echter wel zijn beperkingen.
Qua syntax higlighting schijnt EditPad Pro de beste te zijn, maar:
"While you can use the custom syntax coloring schemes you can download with
the trial version, the separate application for creating your own coloring
schemes is not included."
Ik ga helaas niet betalen om dat "even te proberen".
--
Rik Wasmus
Rik wrote:
> Mijn favoriet blijft nog wel UltraEdit. Helaas niet gratis, maar met
> een geweldige 'tweakabiliy', en met wast spelen met brace-matching
> kom je er wel uit.
UltraEdit heb ik inderdaad, en ben er erg blij mee, hoewel ik inmiddels een
paar versies achterloop. (De nieuwste versie werkt niet goed samen met een
touchpad driver en ik heb nog geen zin gehad om me daar in te verdiepen)
De bracematching functie is handig, maar niet perfect, zeker niet als de
haakjes over grotere afstand misgaan. Misschien dat dat in een nieuwere
versie beter is, dat weet ik dus niet :-)
Dat Editpad Pro ziet er trouwens ook wel erg goed uit. Vooral de uitgebreide
navigatiefuncties spreken me aan.
Bedankt voor de tips, ik ga er weer eens induiken!
Inca
--
There is no need for a lavalamp unless you're on drugs - Gilmore Girls
Inca wrote:
> Rik wrote:
>> Mijn favoriet blijft nog wel UltraEdit. Helaas niet gratis, maar met
>> een geweldige 'tweakabiliy', en met wast spelen met brace-matching
>> kom je er wel uit.
>
> UltraEdit heb ik inderdaad, en ben er erg blij mee, hoewel ik
> inmiddels een paar versies achterloop. (De nieuwste versie werkt niet
> goed samen met een touchpad driver en ik heb nog geen zin gehad om me
> daar in te verdiepen)
> De bracematching functie is handig, maar niet perfect, zeker niet als
> de haakjes over grotere afstand misgaan. Misschien dat dat in een
> nieuwere versie beter is, dat weet ik dus niet :-)
Dat is zeker wat verbeterd, en bovendien: bijna bij alle strings die
variabelen dragen (en ik schrijf bijna alleen maar PHP & Perl, héél af en
toe wat C++) gebruik ik heredoc(ument)-syntax, wat toch wel behoorlijk
scheelt.
> Dat Editpad Pro ziet er trouwens ook wel erg goed uit. Vooral de
> uitgebreide navigatiefuncties spreken me aan.
Dat zeker, de vraag is nog altijd wel hoe het in de praktijk werkt.
Ultraedit bevalt me wel maar heeft z'n zwakheden, maar daar is al voor
betaald. Met een kreupele versie van de EditPad trial gaat het natuurlijk
nergens over om te testen. Daar zullen we even ene mouw aan moeten passen
:P.
--
Rik Wasmus
Michiel de Roo
04/01/07, 19:49
Inca wrote:
> Rik wrote:
>
>>Overzicht:
>>Een goede editor heeft syntax highlightinhg, die JUIST reageerd op de
>>verschillende quotes, backticks,accolades, etc. Hierbij zie je in 1
>>oogopslag of je een haakje hebt overgeslagen of niet. Dat maakt
>>debuggen toch een stuk makkelijker.
>
>
> Na een stuk of 15 verschillende IDE's en editors voor diverse talen en
> ontwikkelomgevingen, ben ik eigenlijk nog nooit een programma tegengekomen
> die dit goed kan. Vooral geneste structuren en structuren in strings worden
> niet overzichtelijk gehighlight. Dus ik ben wel benieuwd:
> Wat vind jij 'juiste' syntax highlighting, en welke prorgramma's bieden dat?
>
> Je zou me erg kunnen helpen met een goeie tip,
Ik ben zeer tevreden met JEdit. Ook nog eens gratis.
www.jedit.org