Toon posts:

[MySQL] size text

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een eenvoudige form gemaakt. Daarin kan een gebruiker een text in de database stoppen. Het form bevat dus een textbox. Deze gaat via post naar de pagina (waar de verwerking plaatsvindt)

de verwerking:
stop de text in de database.

Ik kan korte teksten in de database stoppen, maar lange teksten gaan niet. Uiteraard een probleem met het type van veld dat je voorzien hebt in je DB. Niet dus. Dat staat netjes op LONGTEXT. daar moet ik in princiepe toch een tekst van 64kb (dus toch 64 000 tekens) opslaan?
en daar ga ik echt niet over...

de tekst komt overigens wel goed aan op de pagina, want als ik die laat weergeven, komt de hele tekst tevoorschijn. Maar in de DB plaatsen doet hij dus niet. Toch niet bij een lang tekst. Bij een korte doet hij het wel...
wie weet raad?
mijn dank is groot...

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 17:58
Hoeveel tekens staan er dan wel in?

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Een longtext is 4.3 miljard tekens, dus nog wel iets meer dan 64000 :). Maar dat verklaart natuurlijk niet waarom hij niet werkt. Kan je misschien wat relevante code posten?

Sole survivor of the Chicxulub asteroid impact.


  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

de tekst komt overigens wel goed aan op de pagina, want als ik die laat weergeven, komt de hele tekst tevoorschijn. Maar in de DB plaatsen doet hij dus niet.
Dit begrijp ik dus niet. Als je de pagina toont, die informatie uit de database haalt, dan is het wel goed?

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


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

NMe

Quia Ego Sic Dico.

Gokje: iets met addslashes? Post inderdaad eens wat relevante (dus niet alle) code, want dit is raadwerk.

'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.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 17:58
-Rob- schreef op donderdag 25 augustus 2005 @ 19:00:
[...]

Dit begrijp ik dus niet. Als je de pagina toont, die informatie uit de database haalt, dan is het wel goed?
Als je een print_r($_POST) doet denk ik Rob.

  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

djluc schreef op donderdag 25 augustus 2005 @ 19:05:
[...]

Als je een print_r($_POST) doet denk ik Rob.
aha, dan gaat er dus iets mis tussen de POST en de INSERT. Zoals hier al boven vermeld is, is extra code dan wel nodig, want we weten niet wat hier tussen gebeurt.

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


Verwijderd

Topicstarter
PHP:
1
2
3
4
5
<tr><td width=100><pre>text </td><td width=600><textarea name=bericht cols=80 rows=15></textarea></td></tr>

<tr><td colspan=2 align=right><input type="submit" name="verzenden" value="Toevoegen"></td></tr>

</form>

en bovenaan staat in mijn pagina staat:
PHP:
1
2
3
$text=$_POST["bericht"];

$text=nl2br($text);


ik doe:
PHP:
1
echo "dit is de tekst: $text <br>";

en dit gaat goed. De hele tekst verschijnt op mijn pagina waar ik die echo doe. Dus tot hier gaat het goed.

verder doe ik ook nog:
PHP:
1
mysql_query ("insert into posts (onderwerp,ID,link,text) values ('$ond','$ID','$url','$text')");

Het spreekt vanzelf dat de variabelen $ond, $ID en $url ook ingevuld zijn.
Hier gaat het dus fout.
Als de tekst te lang is, wordt hij gewoon niet in de DB geplaatst. Er wordt geen nieuwe entry aangemaakt in tabel 'posts'. Bij een korte tekst gebeurd dat wel.

de tabel ziet er als volgt uit:
PHP:
1
2
3
4
5
6
7
8
9
CREATE TABLE `posts` (
  `prim` int(11) NOT NULL auto_increment,
  `date` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `onderwerp` varchar(100) NOT NULL default '',
  `ID` varchar(20) NOT NULL default '',
  `link` varchar(250) NOT NULL default '',
  `text` longtext NOT NULL,
  PRIMARY KEY  (`prim`)
)


ik hoop dat ik voldoende info gegeven heb? :)

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verschijnt er wat met mysql_error?

Verwijderd

Topicstarter
PHP:
1
2
3
mysql_query ("insert into posts (onderwerp,ID,link,text) values ('$ond','$ID','$url','$text')");

echo "error mysql: $mysql_error";


geeft op m'n webpagina:" error mysql: " met niet erachter dus... dus geen error lijkt me... :s

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 17:58
mysql_query(jequery) || die(mysql_error());
probeer dit eens even met je query.

  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 29-04 09:06

  • Scott
  • Registratie: December 2004
  • Laatst online: 29-04 10:34

Scott

Ik ben, dus ik tweak

Nee, of er een mysql error ontstaan is, check je zo:

PHP:
1
2
3
mysql_query ("insert into posts (onderwerp,ID,link,text) values ('$ond','$ID','$url','$text')");

echo "error mysql: ".mysql_error();


edit: spuit 11 :+

[ Voor 21% gewijzigd door Scott op 25-08-2005 19:51 ]


Verwijderd

Topicstarter
dit kan je gewoon niet menen...
ik neem een willekeurige lange tekst (een nieuwsartiekel)
en dit werkt wel!
ik neem de tekst die ik wilde invoegen, en wat geeft de error:
code:
1
error mysql: 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 't rond.

blijkbaar geeft hij de eroor op [afkappingsteken]
want als ik 1 zin invoeg met een afkappingsteken erin, geeft hij ook een error. Verder neemt hij alle lange teksten aan, als ze maar zonder afkappingsteken zijn...
hoe los ik dat op?
afkappingstekens moeten toch kunnen?
anders een grote BOE voor MySQL...
:p:p:p

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Stel je hebt een string:
PHP:
1
$string='blaat blaat blaat';

En dan komt er een single quote in:
PHP:
1
$string='blaat 't maar verder';


Zie je het verschil in de kleuren? Bij die single quote is de string afgelopen, en klopt je query dus van geen kant meer. Dat kan je oplossen door addslashes() over je string te halen :).

[ Voor 5% gewijzigd door AtleX op 25-08-2005 20:24 ]

Sole survivor of the Chicxulub asteroid impact.


Verwijderd

Topicstarter
zo stom van me....
dat vergeet ik nooit meer!
bedankt!!!

Verwijderd

Topicstarter
[verontschuldig-mode]
ik gebruik altijd double quotes voor strings, daarom dat je aan zoiets niet denkt :)
[/verontschuldigmode]

Verwijderd

Verwijderd schreef op donderdag 25 augustus 2005 @ 20:28:
[verontschuldig-mode]
ik gebruik altijd double quotes voor strings, daarom dat je aan zoiets niet denkt :)
[/verontschuldigmode]
Dan zou ik maar eens na gaan denken over hoe ik SQL injection tegen zou gaan.

Verwijderd

Topicstarter
daar heb je gelijk in...
ik weet dat er functies bestaan zoals striptags enz, maar dat moet ik nog uitzoeken...
de website waar het hier over ging, wordt slechts in zeer beperkte kring gebruikt, door mensen die ik persoonlijk ken, en daar wel in vertrouw (mede omdat ze niks van php afweten :p)
en je kan zomaar niet bij die website, eerst moet je inloggen :)

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
In plaats van addslashes kun je beter gebruik maken van mysql_escape_string of mysql_real_escape_string, deze zijn bedoeld voor strings die je in een query zet, en mysql_real_escape_string houdt ook nog eens rekening met de charset van de huidige verbinding.

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Verwijderd schreef op donderdag 25 augustus 2005 @ 21:04:
daar heb je gelijk in...
ik weet dat er functies bestaan zoals striptags enz, maar dat moet ik nog uitzoeken...
de website waar het hier over ging, wordt slechts in zeer beperkte kring gebruikt, door mensen die ik persoonlijk ken, en daar wel in vertrouw (mede omdat ze niks van php afweten :p)
en je kan zomaar niet bij die website, eerst moet je inloggen :)
Maar als jíj dat inlogsysteem hebt gemaakt met MySQL; dan zal dat ook wel niet zo moeilijk zijn :P

Verwijderd

Topicstarter
? wel bedankt... :s
doe eens een voorstel van een veilig inlogsysteem dan?

het mijne is als volgt:
form met naam en passwoordveld.
wordt (welsiswaar niet beveiligd) verstuurd.
wordt md5 van gedaan
controle in DB of md5 klopt.
dan $_session[valid] = 1
en telkens controlleren of de session valid is of niet voor een pagina geserveerd wordt...

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:45

TeeDee

CQB 241

Zoals Cheatah zegt: denk aan SQL Injection.

stel jij heb een veld om de username in te voeren.

Je hebt een query van deze orde:
"select * from t_Users where Username = '<phpusername'>"

Iemand komt door een foutmelding achter de namen van je tabellen.
Die persoon voert in het username veld "username;delete from t_Users" in.

3 x raden wat er gebeurt.

Je "inlogsysteem" werkt misschien wel, maar het is nog niet veilig. Dus: lees je in wat betreft SQL injection.

Mooie uitleg met voorbeelden: http://www.securiteam.com/securityreviews/5DP0N1P76E.html

[ Voor 15% gewijzigd door TeeDee op 26-08-2005 13:15 ]

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1