[PHP] textarea werkt niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben bezig in PHP-nuke, nu is dat niet zo spannend, wellicht wel relevante info.

achtergrondinfo
Ik heb het namelijk mogelijk gemaakt dat mensen, fotos , teksten e.d.
in hun profiel kunnen opslaan en bewerken. 1 van de velden is een textarea, hierin kun je wat over jezelf kwijt wat niet in de andere velden kon.

probleem
Sommige mensen vullen braaf wat in de textarea maar dit wordt niet in de database opgeslagen. Bij mij werkt het onder 3 browsers probleemloos (IE, mozilla en Netscape) De mensen die hiermee problemen hebben hebben 1 van deze 3 browsers, het is ook zo dat niet iedereen dit probleem heeft.

code
(Voor php-nuke kenners het is in de index.php van Your_account module, de functie edit_user en save_user) Onderstaande code geven een beeld hoe het is opgebouwd en hoe het werkt.

Dit is uit edituser (alleen het deel waar het om gaat, de rest maakt het te groot en te onoverzichtelijk)
code:
1
2
3
$addtextBBCode = html2bb($userinfo[user_advertentietext]); 
            echo "<tr><td bgcolor='$bgcolor2'><b>"._ADVERTENTIETEXT.":</b><br><br></td>"
                ."<td bgcolor='$bgcolor3'><A HREF=\"JavaScript:openHelp('advertentie.html')\">[img]\"modules/Your_Account/images/uitroep.jpg\"[/img]</A>&nbsp;&nbsp;<textarea wrap=\"soft\" cols=\"50\" rows=\"15\" name=\"user_addtext\">$addtextBBCode</textarea><br></td></tr>";

Dan is dit van saveuser, wel helemaal omdat er misschien ergens iets fout zit in het opslaan van het veld, het rare is ook dat andere velden van edituser wel opgeslagen worden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function saveuser($realname, $user_email, $femail, $user_website, $user_icq, $user_aim, $user_yim, $user_msnm, $user_from, $user_occ, $user_interests, $newsletter, $user_viewemail, $user_allow_viewonline, $user_notify, $user_notify_pm, $user_popup_pm, $user_attachsig, $user_allowbbcode, $user_allowhtml, $user_allowsmile, $user_timezone, $user_dateformat, $user_sig, $bio, $user_password, $vpass, $username, $user_id,$chng_user_samenstelling, $chng_provincie, $user_addtext, $chng_user_plaats, $chng_user_phone) {
    global $user, $cookie, $userinfo, $EditedMessage, $user_prefix, $db, $module_name, $minpass;
    cookiedecode($user);
    $check = $cookie[1];
    $check2 = $cookie[2];
    $sql = "SELECT user_id, user_password FROM ".$user_prefix."_users WHERE username='$check'";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $vuid = intval($row[user_id]);
    $ccpass = $row[user_password];
    $user_sig = htmlspecialchars($user_sig);
    $user_email = check_html($user_email, nohtml);
    $femail = check_html($femail, nohtml);
    $user_website = check_html($user_website, nohtml);
    $bio = check_html($bio, nohtml);
    $user_icq = check_html($user_icq, nohtml);
    $user_aim = check_html($user_aim, nohtml);
    $user_yim = check_html($user_yim, nohtml);
    $user_msnm = check_html($user_msnm, nohtml);
    $user_occ = check_html($user_occ, nohtml);
    $user_from = check_html($user_from, nohtml);
    $user_interests = check_html($user_interests, nohtml);
    $realname = check_html($realname, nohtml);   
     
    //$add_text = check_html($user_addtext, nohtml);
    $add_text = bb2html($user_addtext);
    
    $user_samenstelling = $chng_user_samenstelling;
    $provincie = $chng_provincie;        
    $user_plaats = check_html($chng_user_plaats, nohtml);
    $user_phone = check_html($chng_user_phone, nohtml);
    $user_avatar = "$user_avatar";
    if (($user_id == $vuid) AND ($check2 == $ccpass)) {
    if (!eregi("http://", $user_website)) {
        $user_website = "http://$user_website";
    }
    if ((isset($user_password)) && ("$user_password" != "$vpass")) {
        echo "<center>"._PASSDIFFERENT."</center>";
    } elseif (($user_password != "") && (strlen($user_password) < $minpass)) {
        echo "<center>"._YOUPASSMUSTBE." <b>$minpass</b> "._CHARLONG."</center>";
    } else {
        if ($bio) { filter_text($bio); $bio = $EditedMessage; $bio = FixQuotes($bio); }
        if ($user_password != "") {
        cookiedecode($user);
        $db->sql_query("LOCK TABLES ".$user_prefix."_users WRITE");
        $user_password = md5($user_password);
        $newsletter = intval($newsletter);
        $user_allow_viewonline = intval($user_allow_viewonline);
        $user_notify = intval($user_notify);
        $user_notify_pm = intval($user_notify_pm);
        $user_popup_pm = intval($user_popup_pm);
        $user_allowbbcode = intval($user_allowbbcode);
        $user_allowhtml = intval($user_allowhtml);
        $user_allowsmile = intval($user_allowsmile);
        $user_id = intval($user_id);
//EXTRA VELDEN HIER VOOR OPSLAAN GEBRUIKER      
//EXTRA VELDEN HIER VOOR OPSLAAN GEBRUIKER
        $db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', user_password='$user_password', bio='$bio', user_avatar='$user_avatar', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' ,user_advertentietext='$add_text',  user_samenstelling='$user_samenstelling', user_plaats='$user_plaats', user_phone='$user_phone' ,user_update_add='1',provincie='$provincie' WHERE user_id='$user_id'");
//      $db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', user_password='$user_password', bio='$bio', user_avatar='$user_avatar', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' WHERE user_id='$user_id'");
        $sql = "SELECT user_id, username, user_password, storynum, umode, uorder, thold, noscore, ublockon, theme FROM ".$user_prefix."_users WHERE username='$username' AND user_password='$user_password'";
        $result = $db->sql_query($sql);
        if ($db->sql_numrows($result) == 1) {
            $userinfo = $db->sql_fetchrow($result);
            docookie($userinfo[user_id],$userinfo[username],$userinfo[user_password],$userinfo[storynum],$userinfo[umode],$userinfo[uorder],$userinfo[thold],$userinfo[noscore],$userinfo[ublockon],$userinfo[theme],$userinfo[commentmax]);
        } else {
            echo "<center>"._SOMETHINGWRONG."</center><br>";
        }
        $db->sql_query("UNLOCK TABLES");
        } else {              
              $db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', bio='$bio', user_avatar='$user_avatar', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' ,user_advertentietext='$add_text',  user_samenstelling='$user_samenstelling', user_plaats='$user_plaats', user_phone='$user_phone' ,user_update_add='1',provincie='$provincie' WHERE user_id='$user_id'");
        //$db->sql_query("UPDATE ".$user_prefix."_users SET name='$realname', user_email='$user_email', femail='$femail', user_website='$user_website', bio='$bio', user_icq='$user_icq', user_occ='$user_occ', user_from='$user_from', user_interests='$user_interests', user_sig='$user_sig', user_aim='$user_aim', user_yim='$user_yim', user_msnm='$user_msnm', newsletter='$newsletter', user_viewemail='$user_viewemail', user_allow_viewonline='$user_allow_viewonline', user_notify='$user_notify', user_notify_pm='$user_notify_pm', user_popup_pm='$user_popup_pm', user_attachsig='$user_attachsig', user_allowbbcode='$user_allowbbcode', user_allowhtml='$user_allowhtml', user_allowsmile='$user_allowsmile', user_timezone='$user_timezone', user_dateformat='$user_dateformat' WHERE user_id='$user_id'");
        }
        echo $user_phone."<BR>".$user_plaats;
        Header("Location: modules.php?name=$module_name");
    }
    }
}

Dit is dan het onderdeel van die switchcode
code:
1
2
3
 case "saveuser":      
    saveuser($realname, $user_email, $femail, $user_website, $user_icq, $user_aim, $user_yim, $user_msnm, $user_from, $user_occ, $user_interests, $newsletter, $user_viewemail, $user_allow_viewonline, $user_notify, $user_notify_pm, $user_popup_pm, $user_attachsig, $user_allowbbcode, $user_allowhtml, $user_allowsmile, $user_timezone, $user_dateformat, $user_sig, $bio, $user_password, $vpass, $username, $user_id,$chng_user_samenstelling, $chng_provincie, $user_addtext , $chng_user_plaats, $chng_user_phone);
    break;


Is er iemand die wel eens eerder met dit bijltje gehakt heeft of zie ik iets over het hoofd wat ik had moeten doen. Nogmaals bij gaat het in 3 browser versies gewoon goed 8)7 , bij sommige anderen helemaal niet. Dat is het grote probleem dat ik zelf niet kan debuggen of nakijken wat er misgaat, ik kan het niet reproduceren ;(

Bedankt alvast voor de hulp / tips. :)

[ Voor 108% gewijzigd door Verwijderd op 01-09-2004 08:07 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Variablen eens buiten quotes halen misschien?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
je bedoelt deze:
code:
1
$db->sql_query("INSERT INTO nuke_users advertentie_tekst VALUES '$advertentie '");

Kan het proberen, maar zal dat veel uitmaken is de vraag, aan de andere kant is het ook niet iets structureels....

[ Voor 9% gewijzigd door Verwijderd op 24-08-2004 17:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas werkt het buiten de quotes zetten ook niet :(

Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
Waarschijnlijk vullen zij een appostrove ' of " in, het advertentie tekstvak. Daar kan (my)sql niet tegen, behalve als je dat speciaal hebt ingesteld.

[ Voor 9% gewijzigd door djexplo op 24-08-2004 18:59 ]

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
djexplo schreef op 24 augustus 2004 @ 18:59:
Waarschijnlijk vullen zij een appostrove ' of " in, het advertentie tekstvak. Daar kan (my)sql niet tegen, behalve als je dat speciaal hebt ingesteld.
Die worden er tussen uit gehaald.... kan 1000X ' of "" invullen maar die zie je dan
niet meer terug.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik post even de code zoals ik hem nu heb, wellicht dat mensen dan wat zien
-aangepast in openingspost-
Hopelijk helpt dit alle hulp is welkom, het lek is helaas nog steeds niet boven :(

[ Voor 99% gewijzigd door Verwijderd op 01-09-2004 08:06 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

wordt het als GET of als POST verstuurd? En wat is de reden dat je quotes stripped? Die kan je toch gewoon escapen voordat je wegschrijft naar de database?

doe dit trouwens nooit:
code:
1
<textarea name="advertentie_tekst">$row['advertentie_tekst']</textarea>
haal altijd minimaal htmlspecialchars over je content heen als je het terugschrijft naar een value van een input of een textarea.

[ Voor 46% gewijzigd door crisp op 25-08-2004 23:17 ]

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 25 augustus 2004 @ 23:14:
wordt het als GET of als POST verstuurd? En wat is de reden dat je quotes stripped? Die kan je toch gewoon escapen voordat je wegschrijft naar de database?

doe dit trouwens nooit:
code:
1
<textarea name="advertentie_tekst">$row['advertentie_tekst']
haal altijd minimaal htmlspecialchars over je content heen als je het terugschrijft naar een value van een input of een textarea.
Het wordt als POST verstuurd, en het strippen van de quotes is functionaliteit wat al in PHP-nuke (het script wat als basis dient voor dit) zit.

Wat ik in eerste instantie liet zien wat ik nooit mag doen, is er al uit gehaald en er gaat nog een functie overheen die eventuele "verkeerde HTML code" eruit danwel javascripts. Zoals je kan zien in mijn laatste post gebruik ik ook een functie die de HTML omzet in BBcode.

Zou er een verklaring zijn waarom de andere velden wel gepakt worden en deze textarea niet ? Is het iets wat nog "speciale" behandeling nodig heeft of iets dergelijks?

offtopic:
Bij het automatisch quoten van dit bericht in deze thread zie ik dat de helft van de tekst buiten het tekstvak verschijnt waar je een post kan schrijven. Is dit bekend? (Het viel me op heb er verder niet naar gezocht of er topics over waren)

[ Voor 4% gewijzigd door Verwijderd op 26-08-2004 00:41 . Reden: onafgemaakte regel te veel ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 14:52

crisp

Devver

Pixelated

Verwijderd schreef op 26 augustus 2004 @ 00:40:
[...]
offtopic:
Bij het automatisch quoten van dit bericht in deze thread zie ik dat de helft van de tekst buiten het tekstvak verschijnt waar je een post kan schrijven. Is dit bekend? (Het viel me op heb er verder niet naar gezocht of er topics over waren)
Dat komt door de </textarea> - ook een geval van geen htmlspecialchars gebruiken; is gefixed in 1.9.3 ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat komt door de </textarea> - ook een geval van geen htmlspecialchars gebruiken; is gefixed in 1.9.3
duidelijk ;)
Alleen ik heb het probleem dat sommige gebruikers hun teksten (alleen dus van de textarea)helemaal niet terugzien. Bij mij kan ik in 3 verschillende browsers wel teksten bekijken en rare tekens e.d. worden allemaal goed weergegeven.
Ik heb het idee dat ik waarschijnlijk iets over het hoofd heb gezien maar zou niet weten wat.
Het lijkt wel of het niet de database in wil op 1 of andere manier, het probleem is gewoon balen omdat ik het niet kan reproduceren (Ik merk dat ik in herhaling val ;) )
Maar is er nog iemand met een ingeving of helder idee?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is er dan niemand die hier iets zinnigs op kan zeggen ? :'(

Ja ik weet het ben een huillie, maar ik heb al zoooo veel geprobeerd maar zie het
even niet meer...

Acties:
  • 0 Henk 'm!

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 19-09 15:33
ik weet niet of je het al gefixed hebt of dat het een type fout is maar

code:
1
$advertentie = nohtml(html2bbcode($advertentie_tekst);


mist volgens mij een ) je opent namelijk nohtml en daarna html2bbcode en je sluit deze laatste ook maar nohtml sluit je nergens hij zouw zo moeten zijn lijkt mij

code:
1
$advertentie = nohtml(html2bbcode($advertentie_tekst));

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lordgandalf schreef op 31 augustus 2004 @ 21:55:
ik weet niet of je het al gefixed hebt of dat het een type fout is maar

code:
1
$advertentie = nohtml(html2bbcode($advertentie_tekst);


mist volgens mij een ) je opent namelijk nohtml en daarna html2bbcode en je sluit deze laatste ook maar nohtml sluit je nergens hij zouw zo moeten zijn lijkt mij

code:
1
$advertentie = nohtml(html2bbcode($advertentie_tekst));
Dat is een stuk code die ik uit mijn blote tenen heb geschreven eigenlijk moet je kijken naar een post een paar plaatsen naar beneden. Op regel 26 aldaar staat het goed namelijk.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 24 augustus 2004 @ 17:24:
code:
1
$db->sql_query("INSERT INTO nuke_users advertentie_tekst VALUES '$advertentie '");
Ik heb nog niet het hele topic doorgelezen maar volgens de MySql-syntax moet het dit zijn (zag je toevallig deze code posten):

code:
1
$db->sql_query("INSERT INTO nuke_users [advertentie_tekst] VALUES ('$advertentie')");


en heeft dit er iets mee te maken:

$text = stripslashes(Fixquotes(urldecode(check_html($text, "")))); > gevonden met Google

ipv

$add_text = check_html($user_addtext, nohtml);

[ Voor 23% gewijzigd door Verwijderd op 01-09-2004 08:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 01 september 2004 @ 08:20:
[...]

Ik heb nog niet het hele topic doorgelezen maar volgens de MySql-syntax moet het dit zijn (zag je toevallig deze code posten):

code:
1
$db->sql_query("INSERT INTO nuke_users [advertentie_tekst] VALUES ('$advertentie')");


en heeft dit er iets mee te maken:

$text = stripslashes(Fixquotes(urldecode(check_html($text, "")))); > gevonden met Google

ipv

$add_text = check_html($user_addtext, nohtml);
Klopt ik had inderdaad eerst INSERT statement gebruikt, echter is het een UPDATE statement. De eerste post had ik op mijn werk geplaatst, dit omdat ik er al zo lang mee bezig was, dat ik het uit mijn hoofd opschreef (Maar ja dat klopte niet) Dus heb niet lang daarna de orginele code geplaatst. Deze staat nu in de openingspost.

Wat betreft die laatste opmerking, ik zag in de database niks staan, de rest was wel gevuld. Ik zal het vanavond testen, en vragen aan de andere gebruikers of ze nu wel hun teksten kunnen plaatsen.
Pagina: 1