0

私は自分のサイトhttp://www3.londonmet.ac.uk:8008/~iia0014/userdetails.phpからこのコードを持っています

同じ行のフィールドに名前を付けてフォームを正しくフォーマットする方法を知りたかったので、データベースの行をエコーし​​て、何が何であるかを明確にします。たとえば、私は試しました:

<input value="<?php echo "ID: " . $row["id"]; ?>"><br>

上記の行が正しく表示されるようにするには、何を追加または削除する必要がありますか: ID: Some id here?

しかし、これはIDワードを行ID自体と連結し、「ID:」をフォーム内に挿入し、それをうまく外側にしたかったのです。フォームにテーブルを追加して、th に名前を付けることができます...しかし、それが唯一の方法ですか? コードをわかりやすくするために、すべてを 1 行で簡単に実行できますか? さらに、関数を個別に、おそらく同じ行に新しい関数を記述する代わりに、削除ボタンと更新ボタンを簡単な方法で組み込むことはできますか? 行数が最も少ない、よりクリーンなコードを探しています。

<?php session_start(); ?>
<?php include "includes/connection.php"; ?>

<?php

$query = mysql_query("SELECT id, username, password, email, name, aim, admin, time,          phone, address
FROM users 
WHERE username = '".$_SESSION['myusername']."' ");


while($row = mysql_fetch_array($query) ) 
{ 

?>

<input value="<?php echo $row["id"]; ?>"><br>
<input value="<?php echo $row["username"];  ?> "><br>
<input value="<?php echo $row['password'];  ?> "><br>
<input value="<?php echo $row['email'];  ?> "><br>
<input value="<?php echo $row['name'];  ?> "><br>
<input value="<?php echo $row['aim'];  ?> "><br>
<input value="<?php echo $row['admin'];  ?> "><br>
<input value="<?php echo $row['time'];  ?> "><br>
<input value="<?php echo $row['phone'];  ?> "><br>
<input value="<?php echo $row['address'];  ?> "><br>

<?php 
}
?>
4

2 に答える 2

0

すべてを同じ行に入れる必要はありません。行数が少ないほど良いとは限りません。
入力フィールドについては、コードは次のようになります。

<label>ID</label>
<input type="text" name="id" value="<?php echo $row['id']; ?>">

ところで、php では、一重引用符は文字列を表し、二重引用符は文字列と変数を表します (技術的な定義が正しくない可能性があります)。したがって、連結するときは、 'string '.$var;の代わりに: を実行する必要があり"string ".$varます。
また、エコーしている場合は、コンマを使用して文字列と変数を「結合」する必要があるためecho、連結する代わりにパラメーターを関数に解析しています。これは、データを直接出力するため高速です。最初に文字列を結合してから出力する連結とは異なります。ですecho 'string ', $var。また、二重引用符を使用している場合は、変数
に使用する方が高速です。{$var}例えば:

mysql_query("SELECT `name` FROM `table` WHERE `id`='{$_SESSION['id']}'");

mysql クエリでは、フィールドとテーブルはアクサングラーブ ( ` )で囲まれ、値は一重引用符 ( ' )で囲まれていることに注意してください。

コードに戻ります。すべての入力フィールドが同じタイプになる場合、たとえばtype="text"、次のようにすることができます。

while ($row = mysql_fetch_array($query)) {
    foreach ($row as $key => $value) {
        echo
       "<div>
            <label>{ucfirst($key)}</label>
            <input type="text" name="{$key}" value="{$value}">
        </div>";
    }
}

ucfirst()

文字がアルファベットの場合、str の最初の文字を大文字にした文字列を返します。

name更新ボタンと削除ボタンには、異なる属性 を持つ 2 つのボタンを配置できます。

<input type="submit" name="update" value="Update">
<input type="submit" name="delete" value="Delete">

そして、かどうかを確認してくださいisset()

if (isset($_POST['update'])) {
    //update data
} else if (isset($_POST['delete'])) {
    //delete data
}

そして、常にユーザー入力をサニタイズすることを忘れないでください:

function sanitize($str) {
    return mysql_real_escape_string(htmlspecialchars(trim(stripslashes($str))));
}

1 つずつサニタイズする代わりに、次のことができます。

$data = array_map('sanitize', $_POST);
于 2013-01-03T03:00:41.550 に答える
0

いくつかのことができます:

最初のクエリについては、

$myusername = $_SESSION['myusername'];
$query = mysql_query("SELECT id, username, password, email, name, aim, admin, time,          phone, address FROM users WHERE username = '$myusername' ");

これは実稼働環境向けではありませんが、学習しているので、何が起こっているのかをよりよく理解できるように、物事を分離することは常に良いことです.

ユーザーが自分の情報を編集する (db を更新する) 場合、メソッド=post とアクション=database.php?action=edit という 1 つのボタンを内部に持つフォームを作成できます。また、database.php 内では、

if(isset($_GET['action']) == 'edit') { 

// set all posted values to variables
// run the update query... UPDATE ... WHERE username = '$myusername'

} 

削除の場合、同様に、action=database.php?action=delete のように、別の 1 つのボタンで別のフォームを作成します。また、database.php 内では、

if(isset($_GET['action']) == 'delete') { 

// run the delete query... DELETE FROM $tbl WHERE username = '$myusername'

} 
于 2013-01-03T01:25:40.220 に答える