【问题标题】:Issue of running sql query from php code从 php 代码运行 sql 查询的问题
【发布时间】:2014-01-29 21:29:22
【问题描述】:

我已经编写了这段代码来创建一个搜索表单并从 mysql 表中获取结果:

<?
$db_hostname = 'localhost';
$db_username = 'root';
$db_password = '';
$db_database = 'jatc_university_j32';

// Database Connection String
$con = mysql_connect($db_hostname, $db_username, $db_password);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db($db_database, $con);
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <form action="" method="post">
            Search: <input type="text" name="FieldValue" /><br />
            <input type="submit" value="Submit" />
        </form>
        <?
        if (!empty($_REQUEST['FieldValue'])) {

            $FieldValue = mysql_real_escape_string($_REQUEST['FieldValue']);

            $result = mysqli_query($con, "SELECT Fieldvalue from #__rsform_submission_values WHERE FieldName = 'candidatname'");

            while ($row = mysqli_fetch_array($result)) {
                echo $row;
                echo "<br>";
            }
        }
        ?>
    </body>
</html>

在我的数据库表中,我有 FieldName:candidatname、candidatsurname 和 FieldValue:John、Wayne 等。 我想搜索输入姓名并返回此候选人的其他详细信息 无论如何,当我运行代码时没有任何反应 您能否检查一下我是否做错了什么,因为我在很多试验中都得到了相同的结果

【问题讨论】:

  • 点击提交按钮后你的代码在哪里停止运行?
  • 启用 php 错误,并在脚本顶部显示错误。还要检查任何 mysql 错误。 mysql_* 函数现在已弃用。你真的应该使用 PDO 或 MySQLi。
  • 如果您在按下提交按钮后尝试搜索,那么您需要在继续之前检查 if(isset($_POST['submit'])
  • 在编辑您的问题时,我注意到您没有关闭 if 语句:if(!empty($_REQUEST['FieldValue']))。有时这类事情也会引起问题。请检查您的代码,看看新代码是否会再次出现这种情况!
  • 您是否开启了短标签&lt;??尝试使用&lt;?php

标签: php mysql database-connection field


【解决方案1】:

1.没有任何反应,因为您使用&lt;? ?&gt; 进行php,但您应该使用&lt;?php ?&gt;
2.您的表单方法是post,那么您应该在表单提交时检查这样的变量:
if (!isset($_POST['FieldValue']))
3."SELECT Fieldvalue from #__rsform_submission_values WHERE FieldName = 'candidatname'"
而不是候选人名称,请给出您从表单中获得的值:

"SELECT Fieldvalue from #__rsform_submission_values WHERE FieldName = '".$FieldValue."'" <BR>

4。 &lt;input type="submit" value="Submit" /&gt; 为它添加一个 name 属性,例如:

<input type="submit" value="Submit" name="Submit"/>



它会起作用,我在应用这些更改后进行了测试!

【讨论】:

    【解决方案2】:

    试试这个:

        <?php
    
    $formpartone = <<<EODformpartone
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <form action="{$_SERVER['PHP_SELF']}" method="get">
                Search: <input type="text" name="FieldValue" value=""/><br />
                <input type="submit" value="Submit" />
            </form>
    EODformpartone;
    
    $formparttwo = <<<EODformparttwo
        </body>
    </html>
    EODformparttwo;
    
    
    if (!isset($_GET["FieldValue"]))
    {    
    echo $formpartone;
    echo $formparttwo;
    }
    
    ELSE {
    function search_candidate(){
    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "jatc_university_j32";
    
    $searchstring =  $_GET["FieldValue"];
    
    
    $link = mysqli_connect($host, $user, $password, $database);
    
    IF(!$link){
        echo ('unable to connect to database');
    }
    
    ELSE {
    
                    $query = "SELECT candidatename, candidatesurname
    
    FROM (
    SELECT c.SubmissionID,
    
    max(CASE WHEN c.FieldName='candidatename' THEN c.Fieldvalue ELSE 0 END) AS 'candidatename',
    max(CASE WHEN c.FieldName='candidatesurname' THEN c.Fieldvalue ELSE 0 END) AS 'candidatesurname'
    
    FROM mf2sn_rsform_submission_values as c
    
    
    GROUP BY c.SubmissionID
    ) a
    WHERE a.candidatename LIKE '".$searchstring."' OR a.candidatesurname LIKE '".$searchstring."'"; 
    
    
                $result = mysqli_query($link, $query);
    
                        echo "<table>";
                        while($row = mysqli_fetch_array($result, MYSQLI_BOTH)){    
                        echo  "<tr><td>".$row['candidatename']."</td><td>".$row['candidatesurname']."</td></tr>";
    
    
                } echo  "</table>";
    }
    mysqli_close($link);
    
    
    }
    
    echo $formpartone;
    echo search_candidate();
    echo $formparttwo;
    
    }
    
    
    ?>
    

    示例表mysql

    CREATE TABLE candidates 
        (
     id int auto_increment primary key, 
     SubmissionID int,
     FieldName varchar(20), 
     Fieldvalue varchar(30)
     );
    
    INSERT INTO candidates
    (SubmissionID, FieldName, Fieldvalue)
    VALUES
    (1,'candidatename','Bob'),
    (1,'candidatesurname', 'Smith'),
    (2,'candidatename','Jack'),
    (2,'candidatesurname', 'Doe');
    

    SQLFiddle demo of the sample data

    您应该检查搜索字符串的验证和清理以避免 SQL 注入。以及当没有找到您插入的姓名的候选人时该怎么办。但是,我认为现在测试一切是否正常很重要。

    【讨论】:

    • 其实我希望将查询结果打印为表格下的表格。这可能吗?当我尝试代码时,我发现文章未找到 404 错误
    • @user1997567 404 表示找不到页面。所以,我猜你还没有尝试过我建议的两个页面。在我们继续尝试之前的两个页面。这将测试您的 mysql 查询是否正确,并且脚本在此之前有效。
    • 我不确定要在代码中更改什么。试图用 PHP_SELF 替换 POST 失败
    • @user1997567 最好不要在基本工作之前进行任何更改。
    • 是的,但问题仍然存在。请帮忙
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 2023-01-25
    • 2011-07-29
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多