【问题标题】:PHP - Mysql QueryPHP - Mysql 查询
【发布时间】:2014-02-13 16:32:49
【问题描述】:

我对正确的查询脚本有疑问..

我在 page1.php 中创建了一个表单,用户必须在其中输入 fname、mname 和 lname。

page1.php

<form action = "page2.php" method="post" target="<?php $_SERVER['PHP_SELF']?>">

First Name:<input type="text" name="fname"/>
Middle Name:<input type="text" name="mname"/>
Last Name:<input class = "type="text" name="lname"/>

<input type="submit" name="submit" value="NEXT" />              
</form>

条目被发送到 page2.php 以插入到数据库中。处理成功后。我在成功插入值后放置了一个条件,它会自动转到 page3.php。

page2.php

<?php

    include('config.php');

    if(isset($_POST['submit']))
    {
        $fname = ucwords(strtolower($_POST['fname']));
        $lname = ucwords(strtolower($_POST['lname']));
        $mname = ucwords(strtolower($_POST['mname']));



        $submit=$_POST['submit'];

        if(empty($fname) || empty($lname) || empty($mname))
        {
            echo '<b>Please fill out the form completely.</b>';
        }

        else
        {
            $dup = mysql_query("SELECT * 
                                FROM 
                                tbl 
                                WHERE 
                                fname = '$fname' 
                                AND 
                                lname = '$lname'
                                AND
                                mname = '$mname'
                                ");

            if(mysql_num_rows($dup) >0)
            {
                echo "<br/>";
                echo '<b>Already Registered.</b>';
                echo "<br/>";
            }

            else 
            {   
                $sql = mysql_query("INSERT INTO tbl(fname,lname,mname) VALUES('$fname','$lname','$mname')");
                if($sql)
                {
                    echo "<br/>";
                    echo "You have successfully added your new name!";
                    echo "<br/>";
                    header("Location: page3.php?fname= $fname&mname= $mname &lname= $lname");   
                }
                    else
                    {
                        echo "Error Registration";
                        header("Location: index.php");
                    }
            }
            }

            }

            ?>

这些值也将由:

header("Location: page3.php?fname= $fname&mname= $mname &lname= $lname");

紧跟在:

之后
$sql = mysql_query("INSERT INTO tbl(fname,lname,mname)VALUES('$fname','$lname','$mname')");

然后转到下一页。

在page3.php中,为了验证我是否还有我使用的值:

echo '<pre>' . print_r($_GET,true) . '</pre>';

我还有它们。

现在,在 page3.php 中,我想调用从 page2.php 成功插入值后创建的 auto_incremented ID。

<?php

    echo '<pre>' . print_r($_GET,true) . '</pre>';     

    include('config.php');

    $fname = $_GET['fname'];
    $mname = $_GET['mname'];
    $lname = $_GET['lname'];

    $sql = mysql_query("SELECT * FROM tbl WHERE fname = '$fname' AND mname = '$mname' AND lname = '$lname'");

    while ($row = mysql_fetch_array($sql))
    {
    echo $row['id'];
    }
?>

现在,问题是我的查询没有结果。当我尝试这是脚本时:

$sql = mysql_query("SELECT * FROM tbl");

我有结果显示出来了。

我想做的是这个,我希望条件完全满足,即fname,mname,lname。必须满足 3 个字段,以便我可以从具有这些字段的表中获取指定的 ID。就像您查询全名并为您获取 ID 一样。您应该插入所有 3 个字段以获得该给定名称的确切 ID。

我的问题可能出在这里:

$sql = mysql_query("SELECT * FROM tbl WHERE fname = '$fname' AND mname = '$mname' AND lname = '$lname'");

    while ($row = mysql_fetch_array($sql))
    {
    echo $row['id'];
    }

就像你让 John Rogers Smith 从数据库中找出你的 ID。

你能帮帮我吗?我不明白为什么它不起作用。

Tnx 伙计们提前。

【问题讨论】:

  • 这里有语法错误:Last Name:&lt;input class = "type="text" name="lname"/&gt;
  • 忠告,使用 mysqli 扩展而不是 mysql 扩展。 mysql 扩展在 PHP 的最新版本 5.5.x 中被弃用。 php.net/manual/en/intro.mysql.php
  • 你也可能在 url 参数中有错误的值。所以尝试只打印 $_GET 变量并检查你是否有正确的值
  • arkascha class= 将被忽略,因为它仅用于 css 目的。 tnx 反正
  • Lex,我知道 mysql 扩展已贬值,但同时我正在练习旧扩展。我迟早会使用 mysqli 扩展 tnx

标签: php mysql sql


【解决方案1】:

请检查您所做的每一步,因为表单已经有错误

Last Name:<input class = "type="text" name="lname"/>

需要

Last Name:<input class="" type="text" name="lname"/>

而且你做查询的方式不安全,很容易做sql注入。

另外我建议你使用sprintf(),例如:

$s_query = sprintf("SELECT * FROM `x` WHERE `x`.`x_name` = '%s'", $x_name);

你应该选择mysqli而不是mysql。

下次总是打印出每个步骤,使用print_r() 来打印像 $_GET 和 $_POST 这样的数组

【讨论】:

    【解决方案2】:
    may i ask to all it may work without give error or warning
    
     echo "Error Registration";
     header("Location: index.php");
    

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多