2012-02-02 13 views
0
<tr> 
    <td> 
     <b>Escalation: 
    </td></b> 
    <td> 
     <TextArea name='escalation' onKeyDown=\"limitText(this.form.escalation,this.form.countdown,100);\"  
onKeyUp=\"limitText(this.form.escalation,this.form.countdown,100);\">$Text</textarea>You have <input readonly type=\"text\" name=\"countdown\" size=\"3\" value=\"100\"> characters left. 
    </td> 
</tr> 

これは、使用しようとしているコードの抜粋です。基本的に私はSQLデータベースから来るphp変数に格納された値でテキスト領域を埋めることを試みています。 Javascript関数は、ブロック内のテキストの量を100Charsに制限します。使用時の末尾のスペース<textarea>

問題は、初期値にスペースが使用されていないスペースをすべて空白で埋めてしまうことです。私は2つの引用符の間に$ Textを表示したので、データベースにスペースがないという事実を知っていました。また、私は他のポスターを参照してください問題ではないので、私はtextareaタグの間にすべてのスペースを持っていないことを明確に見ることができます。

アイデア?

+2

ほとんどの場合、問題はlimitText() – alfasin

+0

にあります。なぜJavaScriptが渡されるか、渡されるときに値をトリミングしないのですか? –

+0

実際にスペースが表示されている場合は、そこに置く 'limitText()'関数です - javascriptコードを見る必要があります。 – DaveRandom

答えて

1

はい、以前の動作を見ています。データベース内の値を読み取っている列のタイプが「CHAR」か「VARCHAR」であるかどうかを確認してください。可変長(VARCHAR)フィールド型より常に固定長(CHAR)型を使用する方が効率的です。そのため、データベースはそのように設計されることがあります。欠点は、これらのフィールドに格納される短いデータには常にスペースが埋め込まれていることです。

ソリューション:

$Text = $row['text']; 

変更し、次へのライン:

$Text = trim($row['text']); 

「トリム」機能が大手を取り除くことができますあなたは、おそらく次のようになりますあなたのPHPの行を持っています後続のスペース。固定長フィールドを使用している場合は、データベースに書き込む値を埋め込む必要があることに注意してください。つまり、固定幅フィールドの適切な長さにするために、データベースに書き込まれる文字列に先頭のスペースを追加する必要があります。

+0

BのS!それだった!ありがとう! DBに書き戻すことについて:前にデータベースに書き込んだら、いつでもこれを行う必要はありませんでした。どうしてそれらを埋め込む必要がありますか?そのvarchar – user1186164

+0

データベースのフィールド型がVARCHARではなくCHARであるため、値をパディングする必要があります。 VARCHAR(5)型のフィールドを持つ場合は、最大5文字を含めることができます。フィールドタイプがCHAR(5)の場合は、正確に5文字でなければなりません。したがって、VARCHARフィールドに 'car'という値を割り当てることができますが、CHAR(5)フィールドには 'car'の値を設定する必要があります。 なぜ、誰がVARCHARではなく固定CHARフィールド型を使用するのですか?非常に簡単です。すべてのフィールドが固定サイズの場合、レコードはすべて固定長であり、より効率的です。しかし、可変長は使いやすいです。 –

+0

ああ、フィールドがVARCHARの場合、値は先頭のスペースで保存されている可能性があります。 DBに書き込む前に、常に文字列をTRIMする必要があります。 –

関連する問題