php
  • html
  • 2009-04-20 9 views 1 likes 
    1

    ユーザー情報を編集するページがあります。既存の情報を上書きしないように、現在の情報を表示して編集できるようにしたいと考えています。現時点で既存のデータでテキストエリア/フィールドにデータを入力する

    、私はデータをフェッチし、そのようにテキスト領域にそれを表示しています:

    $usernameQuery = "select username, firstname from USERS where username = '" . $con->escape_string($username) . "'";  
    
    $xblah = $con->query($usernameQuery); 
        while ($row = mysqli_fetch_assoc($xblah)) 
        { 
        $checkUsername = $row['username']; 
        $checkFirstName = $row['firstname']; 
        } 
    
    
    echo "<form name=\"userForm\"> 
    <h1>Editing information for: ".$username."</h1> 
    <p> 
    First name: 
    <textarea rows=\"1\" id=\"firstname\">".$checkFirstName."</textarea> 
    <br /> 
    </form>" 
    

    このテキスト領域が原因とき、1〜2行を表示するbugに、Firefoxで正しく表示されません指定されています。 input type = textで同じことを行う方法はありますか?

    また、データベースのfirstnameの内容はtestrecordのjohnですが、var_dump($ checkFirstName)はちょうどsを示しています。フィールドの実際の内容を取得するにはどうすればよいですか?

    答えて

    2

    は、入力タイプ=テキストと同じことを行うための方法はありますか?あなたの他の問題については

    <input type="text" name="firstname" value="<?= $checkFirstName ?>" /> 
    

    、「S」の最初の名前を持っていますが、また「ジョンの最初の名前のユーザーと同じユーザー名を持つ別のユーザーはありますか?私がこれを言っている理由は、whileループを使用してデータを取得するため、複数の一致がある場合は、クエリに一致する最後の行が残ることになります。

    この問題を解決するには、whileループ(データの複数の行をフェッチ/処理することを意味します)を使用せず、すべてのユーザー名が一意であることを確認します。

    それ以外の理由で、'firstname'から取得された値がデータベース内の値と一致しない理由はわかりません。

    0

    入力タグの 'value'属性を使用します。

    First name: <input type=\"text\" name=\"name\" value=\"$checkFirstName\"/><br /> 
    
    0

    入力タイプ=テキスト入力を使用すると、デフォルトでvalue属性に指定したものがすべて表示されます。

    echo '<input type="text" value="' . $checkFirstName . '">'; 
    

    もちろん、$ checkFirstNameでそのフィールドに出力する前に、いくつかの衛生管理を行ってください。

    フィールドの値を取得するには、whileループの前にvar_dumping $ rowを試してみて、問題の原因を突き止めることができるかどうかを確認してください。何も役に立たない場合は、whileループの中にvar_dumpを入れておいてください。< hr>を各繰り返しの間に入れますか?これは、クエリから完全に返されているものを正確に表示します。 var_dumpがあなたのために少しあまりにも多くの情報である場合にも、チェックアウト:

    print_r($var) 
    

    print_r documentation

    0

    textareasは改行で複数行のテキストを表示するためのものです。あなたのエンコーディングがUnicodeであるか、はhtmlspecialcharsは十分なものでなければならない - USER-と最初の名前は、通常input要素

    <?php 
        echo '<input type="text" name="name" value="' . htmlentities($checkFirstName) . '">'; 
    ?> 
    

    は、エンコーディングに依存(約htmlentitiesまたはhtmlspecialcharsを忘れないように使用しそう良く、それらを含むように意図されていません、そうでなければそのhtmlentities)。フォームフィールドにはhtmlentitiesを使用しないでください。ただし、ユーザーが提供するデータを印刷するときは必ず指定してください。そう誰かがXSS(cross site scripting)攻撃を注入あるいは少なくともその代わり、完全な文字列の1文字を表示するよう

    <script type="text/javascript">execute_evil_code();</script> 
    

    のようにユーザー名を提供することで、障害のあるHTMLを生成することができます:あなたは、あなたが作業していると思われる場合、通常、これは起こります配列で置き換え、代わりに文字列を指定します。変数のタイプを確認するにはvar_dump($variable);を使用してください。

    また、htwは、$usernameが本当にユニークで、正しい行を取得しているかどうかを確認します。 phpmyadmin(または使用しているツール)で結果のクエリ(echo $usernameQuery;)を実行します。複数の行が返された場合、あなたのユーザ名は一意ではなく(たぶんバグかもしれません)、取得した行も最初の行でも最後の行でもありません。 's'は "john"の一部ではないので、奇妙なので、おそらくmysqlの結果セットはまったく異なるものです。より高いレベルでデバッグし、$行全体をvar_dumpに置き換えます。

    0

    こっちすべてのPHPコードを入れて試してみてください。

    <textarea id="firstname" rows="1"> 
         <?php 
           //connect to database 
           //Select data 
          if(mysql_num_rows($sql)) { 
           $row = mysql_fetch_row($sql); 
            echo nl2br($row['0']); 
          } 
         ?> 
        </textarea> 
    
    関連する問題