0

我今天已经调整并打破了这一百万次!我基本上是在尝试检查数据库中的用户名和激活,如果用户被激活,则显示祝贺消息,如果用户是用户但没有激活显示激活消息,如果他们不是记录匹配用户,则显示无效消息。 任何有关重新编码和纠正我的错误的帮助将不胜感激,我觉得我只是在兜圈子!

string(74) "更新成员 SET Check_Activation='' WHERE Username='' AND Activation=''"

<form name="form1" method="post" action="check-activation.php">
  <div align="center">
    <table width="35%" border="0">
      <tr>
        <td>Members Number</td>
        <td>:</td>
        <td><label>
          <input name="username" type="text" id="username" value="<?php echo $username; ?>">
        </label></td>
      </tr>
      <tr>
        <td>Activation Code</td>
        <td><label>:</label></td>
        <td><input name="activation_code" type="text" id="activation_code" value="<?php echo $activation_code; ?>"></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td><label>
          <input type="submit" name="Submit" value="Submit">
          <input type="reset" name="Submit2" value="Cancel">
        </label></td>
      </tr>
    </table>
  </div>
  </form>

这是表格

<?php
$db_host = "*******";
$db_name = "*******";
$db_use = "*******";
$db_pass = "*******";
$link = mysql_connect($db_host, $db_use, $db_pass);
mysql_select_db($db_name, $link);
$command = "UPDATE members SET Check_Activation='$activation_code' WHERE Username='$username' AND Activation='$activation_code'";
$result = mysql_query($command);
if ($result) {
echo "Congratulations. Your membership has been activated ...";
}else{
echo ("You've entered an invalid username / activation code - please retry");
}
?>

这是检查数据库并显示结果

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

2

不再支持功能mysql_*,它们已正式弃用不再维护,将来将被删除您应该使用PDOMySQLi更新您的代码,以确保您的项目在未来的功能。


正如您在下面看到的,在每个步骤中,我们都会验证我们是否能够连接到数据库,SQL 查询是否正常,您要提供的参数是否正常,我们还借此机会防止注入准备好的语句,我们最终执行它。

现在请注意,在我们执行它之后,我会验证有多少行受到影响,$update->affected_rows以了解它是否正常。

受影响的行,可以返回:

  • -1 表示查询返回错误
  • 0 表示没有记录被更新
  • 和大于 0 的数字,表示受影响的行数

代码:

$db_host = "*******";
$db_name = "*******";
$db_use = "*******";
$db_pass = "*******";

// Read the form values you just submitted
$username = $_POST['username'];
$activation_code = $_POST['activation_code'];

$con = mysqli_connect($db_host,$db_use,$db_pass,$db_name);
// Output an error message if it fails to connect
if($con->connect_error)
        die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

// Here we prepare your query and make sure it is alright
$sql = "UPDATE members SET Check_Activation = ? WHERE Username = ? AND Activation = ?";
if (!$update = $con->prepare($sql))
    die('Query failed: (' . $con->errno . ') ' . $con->error);

// Here we define the field types with 'sss' which means string, string, string
// and also set the fields values
if (!$update->bind_param('sss', $activation_code, $username, $activation_code))
    die('Binding parameters failed: (' . $update->errno . ') ' . $update->error);

// Now we finally execute the data to update it to the database
// and if it fails we will know
if (!$update->execute())
    die('Execute failed: (' . $update->errno . ') ' . $update->error);

if ($update->affected_rows > 0)
{
    echo "Congratulations. Your membership has been activated ...";
}
else
{
    echo ("You've entered an invalid username / activation code - please retry");
}
// And finally we close the connection
$update->close();
$con->close();

请注意查询上的询问标志和bind_param,s表示字符串和i整数,您可以在此处阅读更多信息

于 2013-06-25T15:05:01.637 回答
1

如果插入/更新了任何行,要获得答案,您应该使用mysql_affected_rows()

if (mysql_affected_rows()) {
echo "Congratulations. Your membership has been activated ...";
}else{
echo ("You've entered an invalid username / activation code - please retry");
}

此代码也可以简化为

echo mysql_affected_rows() ? "Congratulations. Your membership has been activated ..." : "You've entered an invalid username / activation code - please retry";

该函数在成功时返回受影响的行数,如果最后一个查询失败则返回 -1。

但是,当您手动操作时,会出现一个大红色框,其中显示mysql_* 函数已弃用,这就是您应该考虑使用 PDO 或 Mysqli 的原因。

于 2013-06-25T15:09:04.020 回答