【问题标题】:How do stop form posting to mysql if database contains a specific ID?如果数据库包含特定 ID,如何停止向 mysql 发布表单?
【发布时间】:2010-05-27 16:31:02
【问题描述】:

我有一个表单,用于将数据发布到 mysql。

在提交表单之前,我想检查数据库并查看“customerid”列中是否有任何字段等于“userid”,如果有,则不要发布表单。

基本上,我试图限制我的用户多次发帖。用户将能够登录我的系统并发表一篇文章。他们将能够删除和修改他们的帖子,但仅限于一篇帖子。

我该怎么做???到目前为止的代码:

<?php

include '../login/dbc.php';
page_protect();

$userid = $_SESSION['user_id'];

$sql="INSERT INTO content (customerid, weburl, title, description)
VALUES
('$_POST[userid]','$_POST[webaddress]','$_POST[pagetitle]','$_POST[pagedescription]')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

?>

【问题讨论】:

标签: php mysql


【解决方案1】:

您应该使用两个查询。第一个,SELECT customerid FROM content WHERE customerid = @ID 将返回一行,如果已经存在具有该 ID 的记录。从那里,if 语句将告诉您的用户他们已经有一个帖子,或者继续使用您现有的代码来插入记录。

【讨论】:

    【解决方案2】:

    使用您要检查的参数执行 SELECT 语句 - 如果它返回任何行,则不要执行插入。

    伪代码 -

    $query = "SELECT customerid FROM content WHERE customerid = $_POST['userid']";
    

    【讨论】:

    • 显然,这不是生产代码有几个原因 - 1:我将其标记为伪代码。 2:这是原始问题使用的格式。
    【解决方案3】:

    1) 您可以使用MySQL Procedures -- 您可以将过程视为一种 MySQL 函数,您可以在其中完全按照您想要的规则编写规则,然后从您的 PHP 文件中直接使用call 它们。

    【讨论】:

      【解决方案4】:

      你可以这样做:

      <?php
      
      session_start(); // this is important if you are missing one
      
      include '../login/dbc.php';
      page_protect();
      
      $userid = mysql_real_escape_string($_SESSION['user_id']);
      
      $check_query = "select userid from content where userid = $userid";
      $result = mysql_query($check_query) or die(mysql_error());
      
      if (mysql_num_rows($result))
      {
        exit('User is already their for a post !!');
        // or redirect using header function.
      }
      
      $sql="INSERT INTO content (customerid, weburl, title, description)
      VALUES
      ('$_POST[userid]','$_POST[webaddress]','$_POST[pagetitle]','$_POST[pagedescription]')";
      
      if (!mysql_query($sql))
        {
        die('Error: ' . mysql_error());
        }
      echo "1 record added";
      
      ?>
      

      【讨论】:

      • SQL注入也很好吃。
      • 如果您使用此代码,我希望小 Bobby Tables 不会在您的网站上注册。
      • @Typeoneerror, @Jeff:完全错过了,假设userid 是一个字符串,我现在使用了正确的函数,尽管前置语句会是更好的路径。
      【解决方案5】:

      您很容易受到 SQL 注入

      $sql="INSERT INTO content (customerid, ...) VALUES ('$_POST[customerid]', ...)";
                                                           ^
      

      This article 解释 SQL 注入以及如何避免 PHP 中的漏洞。

      【讨论】:

        猜你喜欢
        • 2021-11-15
        • 2011-06-12
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多