【问题标题】:PHP form on function with SQL request带有 SQL 请求的函数的 PHP 表单
【发布时间】:2014-03-13 09:14:18
【问题描述】:

我的 php 上有这个功能:

function getLastMatchs($nb) {
    try
    {
    $db = new PDO(DBHOST, DBUSER, DBPASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        die('connexion failed: '.$e->getMessage());
    }
    $i=0;
        $get5tmatchs = $db->query('SELECT wid, lid, date, cwid, clid FROM `match`');
        while ($nb<$i)
        {
            $data5matchs = $get5tmatchs->fetch();
            echo '<tr>
                    <td>'.$data5matchs['wid'].'</td>';
                    echo '<td>'.$data5matchs['lid'].'</td>';
                    echo '<td>'.$data5matchs['cwid'].'</td>';
                    echo '<td>'.$data5matchs['clid'].'</td>';
                    echo '<td>'.$data5matchs['date'].'</td>
                    <br>
                </tr>';
        $i++;
        }
}

我的表格是:

echo '<form action="index.php" method="post">
                <h3>My question......</h3>
                <p>
                    <input type="text" name="nbmatchs" />
                    <input type="submit" value="ok" />
                </p>
                </form>';
        echo getLastMatchs('nbmatchs');

我该怎么做才能显示 nbmatch 时间这些家伙想要我的桌子? 当我现在这样做时,什么都没有发生。 感谢您的帮助

PS:例如我的磁带 5,我可以看到我在函数中放入的磁带的 5 次。

【问题讨论】:

  • 我该怎么做才能显示 nb 伙计们想要我的桌子?这是什么意思?

标签: php sql forms request


【解决方案1】:

您打算完成的(据我所知)允许访问者输入一个数字,然后在它显示的一些“匹配”数据之后提交它。输入的访客人数起到限制作用。

1. 你从哪里得到你的 POST 变量?您在表单下方放置了一个函数,其输入值为字符串“nbmatchs”。我猜您想提交表单并获取“nbmatches”值,然后将其应用于 SQL 查询进行过滤。你这样做的方式是行不通的。您的表单元素上的 action 属性设置为 index.php。这就是我们要提交表单数据的地方。所以我们需要有一种方法来获取提交的 POST 变量。我们这样做:

$nbmatchs = $_POST['nbmatchs'];

永远不要相信客户给你的数据。我们知道它必须是一个数字,让我们对其进行检查:

$nbmatches = is_numeric(trim($_POST['nbmatchs'])) ? $_POST['nbmatchs'] : 1;

上面我们检查了客户端给出的数据是否真的是一个数字。如果是,我们将把这个数字分配给变量 $nbmatches。如果客户端提供的数据不是数字(例如,某个字符串),我们将数字 1 分配给变量。此时,我们可以结束脚本执行,让访问者知道他必须输入一个数字,但如果有任何可疑之处,我们只需将 1 分配给变量。之后,我们可以将此变量提交给函数 getLastMatchs,该函数获取变量并将其分配给 SQL 查询作为结果限制器。假设所有代码都在一个文件'index.php'中,你应该有以下代码:

<?php

function getLastMatchs($nbmatches) {

    try{
        $db = new PDO(DBHOST, DBUSER, DBPASS);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        die('connexion failed: '.$e->getMessage());
    }

    try {
        $select = $db->prepare('SELECT wid, lid, date, cwid, clid FROM `match` LIMIT '.$nbmatches.';');  
        $select->execute();
        $results = $select->fetchAll(PDO::FETCH_ASSOC);
    } catch(PDOException $ex) {
        echo "<span style='color:red'>".$ex->getMessage()."</span></p>";  
    }

    echo '<table>';

    foreach($results as $result){
        $output = '<tr>';
        $output .= '<td>'.$result['wid'].'</td>';
        $output .= '<td>'.$result['lid'].'</td>';
        $output .= '<td>'.$result['cwid'].'</td>';
        $output .= '<td>'.$result['clid'].'</td>';
        $output .= '<td>'.$result['date'].'</td>';
        $output = '</tr>';

        echo $output;
    }

    echo '</table>';

}

if(isset($_POST['nbmatchs'])){
    $nbmatches = is_numeric(trim($_POST['nbmatchs'])) ? $_POST['nbmatchs'] : 1;
    getLastMatchs($nbmatches);
}

?>

<form action="index.php" method="post">
    <h3>My question......</h3>
    <p>
        <input type="text" name="nbmatchs" />
        <input type="submit" value="ok" />
    </p>
</form>

让我知道这是否如您所愿。

【讨论】:

  • 收到此错误:调用未定义函数 isNumeric() in
  • 对不起,我的错。我把 PHP 的函数名写错了。而不是isNumeric,它应该是is_numeric。我将修复应用于上面的代码。
  • 如果您有解决问题的方法,请点击相应按钮接受帖子作为答案。
  • 我有这个:未定义的变量:data5matchs in
  • 再次确定我的错误。解决它。在 foreach 循环中,我将当前循环的变量留给$data5matchs。相反,它应该是 $result,正如 foreach 括号中所声明的那样。现在它应该工作了。如果您对此有任何问题,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多