【问题标题】:Need to throw the user an error if a case is true如果案例为真,需要向用户抛出错误
【发布时间】:2014-12-08 17:47:55
【问题描述】:

我有一个按周运行的体育比赛选择应用程序。现在,如果您选择已经选择的一周,我会收到一个 php 错误。而不是这样,我只想向用户显示一条消息,说您已经选择了本周。

这是我选择同一周时遇到的错误

  ERROR: duplicate key value violates unique constraint "user_record_pkey" 
  DETAIL: Key (username, week_no)=(john, 1) already exists

这是我的代码

 <?php
            session_start();
            require_once("dbconnect.php");
            $flag = 0;
            $row = 1;
           // $weekest = $_POST['weekNum'];    

            $result3 = pg_query($conn, 'INSERT INTO demo.user_record VALUES (\''.$_SESSION['username'].'\','.$_POST['weekNum'].',0,0)') or die(pg_last_error());
            //echo $_POST['picks0'];
            //echo $_POST['picks1'];
            for($row=1;$row<=$_POST['numPicks'];$row++){


                    $pickName = "picks" . $row;
                    echo $pickName;
                    if($_POST[$pickName] == "picks$row")
                    {
                    $pick = $_POST['Tname'.$flag];
                    $flag+=2;
                    }
                    else
                    {
                    $flag++;
                    $pick = $_POST['Tname' . $flag];
                    $flag++;
                    }
                    //echo "error2";        

            $result2 = pg_prepare($conn, "myquery".$row, 'INSERT INTO demo.user_picks VALUES ($1,$2,$3,$4)') or die(pg_last_error());
            $result2 = pg_execute($conn, "myquery".$row, array($_SESSION['username'],$_POST['weekNum'], $row, $pick)) or die(pg_last_error());
                     echo "finished";
        }
   ?>

【问题讨论】:

  • 什么是表描述user_recor
  • 将值插入到 user_record 表中
  • 我觉得你是初学者?在 mysql 终端中运行以下查询并将输出粘贴到此处。 desc user_record
  • 我想我只需要在某处添加一个 if 语句
  • 您需要首先运行 SELECT 查询以查看用户/周的条目是否已存在。如果它返回结果,则显示您的消息;否则,运行您的 INSERT 查询。

标签: php postgresql error-handling subquery


【解决方案1】:

首先,函数pg_query() returns FALSE on error。你需要检查一下。链接文档中有代码示例。

其次,您的代码容易受到 SQL 注入的影响。你不应该使用 pg_query() 来解决这类问题。您应该改用 pg_query_params()。 (同一个链接。搜索“用户提供数据的字符串插值非常危险”。)

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 2016-11-08
    • 2011-04-18
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多