标签为 ‘mysql’
再次出现SB问题。。。郁闷。。。加上心情不是很好,导致这个问题让我想杀人。。。
在写一个HTML表单,想实现提交表单修改数据库的功能,但是出现表单可以提交,而数据却无法被修改的现象。
1、写一个表单。
<form name=”edit” action=”edit.php” method=”post” >
修改你的名字:
<input type=”text” name=”name” size=”11″ /><br />
修改你的密码:
<input type=”password” name=”pwd” size=”11″ /><br />
<input type=”submit” name=”submit” value=”点此修改”/>
2、在edit.php文件中调用$_POST[]数据。
$name = $_POST[name];
$pwd = $_POST[pwd];
3、建立SQL语句,进行数据修改,并用if判断表单是否已经提交。
if($_POST[submit]){
$sql = “UPDATE user SET name=’$name’,pwd=’$pwd’ WHERE id=’$id’;”;
$result =mysql_query(“$sql”);}
if($result){
echo “<br/>资料修改成功”;
}
4、当点击HTML表单的提交按钮后,跳转到edit.php页面,并显示“资料修改成功”!这就说明$sql语句已经被成功执行,但是在数据库中却未发现数据被修改。
5、又瞎整了两个多小时,发现一个很弱智的地方,在WHERE后面有一句id=’$id’,但是这个edit.php页面并没有$id变量,这就是问题的关键所在。
6、返回文件顶部,将$id=$_COOKIE[id];加入,再次测试,成功。
在昨天那篇《MySQL在PHP的简单应用》中,说到可以用mysql_fetch_array()来返回下一行所有的值域,然后再通过变量数组下标进行调用。
今天又google了一下,发现mysql_fetch_row()函数可以只返回某一个字段的值而不必返回整行的值,所以我们可以只查询匹配的单个字段,并将值用mysql_fetch_row()来返回。
1、$sql = “SELECT name FROM user WHERE id=$_POST[id]“; //查找与提交表单id相同的数据的姓名字段
2、执行查询并将查询结果赋给变量$result = @mysql_query($sql);
3、$segment = mysql_fetch_row($result); //返回查询结果的字段值,并赋给$segment变量
4、if($_POST[id]==”$row[id]“)
{ if($_POST[psw]==$row[psw])
{ echo “Welcome,$segment[0].”;
}
} //判断提交表单的id号是否存在于数据库中,如果存在再判断密码是否正确,如果正确,显示“Welcome 姓名”。
跟上一篇相比,只是纯粹的把mysql_fetch_array()替换成了mysql_fetch_row()函数,值得注意的是,虽然mysql_fetch_row()函数返回的是单个字段的值,但是在调用该值的时候还是需要用下标[0]来调用,否则显示的将是”Array”。
今晚瞎折腾了两个多小时,把一个巨简单的问题给复杂化了,做了许多无用功。在这里记下来,希望其他朋友如果遇到相同问题不要重蹈覆辙。
在写一个登录入口的时候,想要在登陆成功后提示登陆者者的姓名,而登录名使用的是id号,所以想到可以利用查找数据库中与id号匹配的那条记录的姓名。
1、建立数据库查询$sql = “SELECT * FROM user”;
2、执行查询并将查询结果赋给变量$result = @mysql_query($sql);
3、$row = mysql_fetch_array($result); //mysql_fetch_array()函数返回查询结果下一行的所有值域,并将其保存至$row变量中,如果没有行时,mysql_fetch_array()则返回FALSE。
4、if($_POST[id]==”$row[id]“)
{ if($_POST[psw]==$row[psw])
{ echo “Welcome,$row[name].”;
}
} //判断提交表单的id号是否存在于数据库中,如果存在再判断密码是否正确,如果正确,显示“Welcome 姓名”。
其实核心问题就在于mysql_fetch_array()这个函数,因为它保存了整一行的值域而不是单个字段的值,所以当我试图用mysql_fetch_array来返回单个字段时候,提示出错。









