【问题标题】:PHP and MySQL error & Updating [closed]PHP 和 MySQL 错误和更新 [关闭]
【发布时间】:2016-01-20 21:18:25
【问题描述】:

我在两件事上寻求帮助。所以基本上我为我和我的朋友制作了一个消息传递网站,但我遇到了两件事:

  1. 我的消息传递网站会告诉您消息发送的时间,但每次您点击刷新时,时间都会更改为当前时间

  2. 在您必须刷新才能查看新消息的那一刻,我想知道如何使其自动化,我听说过 Ajax,但我不明白它是如何工作的,所以您需要解释一下给我

代码如下:

<?php
  $username = "";
  $password = "";
  $server = "";
  $database = "";
  mysql_connect($server, $username, $password);
  @mysql_select_db($database) or die("Unable to select database");
?>

<!DOCTYPE HTML>
<html lang="en">

  <head>
    <meta charset="UTF-8"/>
    <title>b!ip</title>
  </head>

  <body bgcolor="#0000FF">

    <?php
      date_default_timezone_set('Europe/London');

      $searchQuery = "SELECT * FROM messages";
      $searchResults = mysql_query($searchQuery);

      $firstnameData = mysql_result($searchResults, 0, 'forename'); 
      $lastnameData = mysql_result($searchResults, 0, 'surname');
      $messageData = mysql_result($searchResults, 0, 'message');
      $datetimeData = mysql_result($searchResults, 0, 'datetime');

      if(isset($_POST["submit"]))
      {
        $firstname = $_POST["forename"];
        $surname = $_POST["surname"];
        $message = $_POST["message"];
        $datetime = date('Y-m-d H:i:s');

        mysql_query("UPDATE messages SET `forename` = '$firstname' WHERE `id` = '1'");
        mysql_query("UPDATE messages SET `surname` = '$surname' WHERE `id` = '1'");
        mysql_query("UPDATE messages SET `message` = '$message' WHERE `id` = '1'");
        mysql_query("UPDATE messages SET `datetime` = '$datetime' WHERE `id` = '1'");

      }

      // date_default_timezone_set('Europe/London');
      // echo date('Y-m-d H:i:s');
    ?>

    <center>
      <table cellpadding="0" cellspacing="0" width="100%" height="50">
        <!-- MSCellFormattingTableID="12" -->
        <tr>
            <td height="50" width="100%">
            <!-- MSCellFormattingType="content" -->
            <p align="center"><font face="Comic Sans MS" color="#FFFFFF">
            <span style="font-size: 60pt">b!ip</span></font></td>
        </tr>
        </table>
    </center>
        <table cellpadding="50" cellspacing="0" width="100%" height="50%">
            <tr>
                <td height="50" width="100%">
                    <form action="#" method="POST">
                        <center><p><font color="#FFFFFF">First name: <input type="text" name="forename"/>&nbsp;&nbsp;&nbsp;
                        Last name: <input type="text" name="surname"/>&nbsp;&nbsp;&nbsp;
                        Message: <input type="text" name="message"/>&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="submit" value="Send" name="submit"/></font></p></center>
                    </form>
                </td>
            </td>
        </table>
        <table cellpadding="50" cellspacing="0" width="100%" height="50%">
            <tr>
                <td height="50" width="100%">
                    <center><h1><font color="#FFFFFF" face="Comic Sans MS"><?php echo "$messageData <strong>by $firstnameData $lastnameData at $datetimeData</strong>"; ?></font></h1></center>
                </td>
            </td>
        </table>
  </body>
</html>

【问题讨论】:

  • 1 - 您正在使用$datetime = date('Y-m-d H:i:s');,这将始终返回当前时间。你什么时候保存它所以它不会改变?您可能正在存储message,为什么不存储date/time?。您也应该将其插入数据库。 2 - 我认为教程不适合这里。
  • 您可以一次更新多个列。你对 SQL 注入持开放态度。
  • 我是这种事情的初学者,而且我 14 岁,所以你能解释一下吗,谢谢
  • 你可以做UPDATE messages SET `forename` = '$firstname', `surname` = '$surname' WHERE `id` = '1'等,用逗号分隔列和它的新值。用户输入应该分开或至少转义php.net/manual/en/function.mysql-real-escape-string.php。首选且更安全的方法是使用带有mysqlipdo 驱动程序的准备好的语句。 mysql_ 函数不支持准备好的语句并且已经过时。 dev.mysql.com/doc/refman/5.0/en/update.htmlstackoverflow.com/questions/60174/…
  • 如何解决日期/时间问题

标签: php mysql ajax database


【解决方案1】:

您可能应该切换到 PDO 或 MySQLi,因为 MySQL 已经过时并且将来会被删除。按下,您将遇到的未来错误是您不能使用引号(也容易受到 SQL 注入的影响),这是因为您没有采取任何措施来防止这种情况发生。要解决此问题,请确保 $_POST 或 $_GET 中的任何内容都用 mysql_real_escape_string 包装

解决您的时间问题,您可以使用 MySQL 函数 now()

解决您的 AJAX 问题,您可以从这个方便的 YouTube 教程播放列表中学习:https://www.youtube.com/watch?v=tp3Gw-oWs2k&list=PL6gx4Cwl9DGDiJSXfsJTASx9eMq_HlenQ

修补提到的所有内容后,您的代码应如下所示:

if(isset($_POST["submit"]))
{
    $firstname = mysql_real_escape_string($_POST["forename"]);
    $surname = mysql_real_escape_string($_POST["surname"]);
    $message = mysql_real_escape_string($_POST["message"]);

    mysql_query(
        "UPDATE messages SET 
            `forename` = '$firstname',
            `surname` = '$surname',
            `message` = '$message',
            `datetime` = now() 
        WHERE `id` = '1'"
    ); 

}

需要注意的是我留下了 id = '1' 因为我不熟悉你的数据库;不管看起来您只是在更改一条消息的值。

希望这会有所帮助!

【讨论】:

  • 日期还是到当前日期,我以为是因为我的数据库中有CURRENT_TIMESTAMP,所以我删除了它,但它仍然不起作用
  • 您是否刷新了您发送消息的页面?如果是这样,那么 $_POST 数据仍然存在并且会再次更新消息。
  • 是的,我在同一个页面上
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多