在输入/回显行中标记PHP表单字段

时间:2013-01-03 01:13:35

标签: php html mysql

我的网站http://www3.londonmet.ac.uk:8008/~iia0014/userdetails.php

中有此代码

我想知道如何正确地格式化表单,很好地为同一行中的字段命名,我回显数据库行,所以很明显是什么。 例如,我试过:

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

我应该添加或删除哪些内容才能使上面的代码正常显示:ID:这里有一些ID吗?

但这会将ID字与行ID本身连接起来,在表单中插入“ID:”,我希望它在外面很好。我可以在表格中添加一个表格并给出一个名字......但这是唯一的方法吗?我可以轻松地完成这一切,只需一行就可以使我的代码更清晰吗?另外,我是否可以更简单地合并删除和更新按钮,而不是单独编写功能,也许是同一行上的新功能?我正在寻找一个行数最少的更干净的代码。

<?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 
}
?>

2 个答案:

答案 0 :(得分:0)

你可以做一些事情:

对于初始查询,

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

这不适用于生产环境,但由于您正在学习它,因此将事物分开以便您可以更好地了解正在发生的事情。

如果用户编辑他们的信息(更新数据库),您可以在其中创建一个包含单个按钮的表单,method = post和action = database.php?action = edit。在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。在database.php里面,

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

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

} 

答案 1 :(得分: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属性的按钮:

<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))));
}

而不是一个一个地消毒,你可以:

$data = array_map('sanitize', $_POST);