0

我有(html)

input type="text" name="input"
textarea name="output"

接下来,我有一些表,名字和姓氏。当我在输入区域中插入名字时,我想在输出区域中显示姓氏。下面的 PHP 查询不起作用。

$input = $_POST['input'];
$select = mysql_query("SELECT first_name FROM table WHERE input=$input");
$req = mysql_fetch_array($select);
4

4 回答 4

3

您在插入的值周围缺少引号。利用

 input='$input'

您没有在查询中进行任何错误检查,因此在这种情况下,事情会悄无声息地中断。要进行正确的错误检查并获取详细消息,请查看 此参考问题上或中的手册。mysql_query()

此外,您展示的代码容易受到SQL 注入的影响。对您插入的所有字符串数据使用库的正确清理方法(在本例中mysql_real_escape_string()为 ),或切换到 PDO 和准备好的语句。

使用当前代码的示例:

# Escape string input
$input = mysql_real_escape_string($_POST['input']);

# Run query
$select = mysql_query("SELECT first_name FROM table WHERE input='$input'");

# Check for errors  
if (!$select)
 { trigger_error("mySQL error: ".mysql_error()); 
   die();
 }
于 2012-02-28T10:36:24.230 回答
2

有很多问题。

首先,您的表可能没有被调用table,而是被调用了其他东西。如果它实际上是由于某种原因被调用table,那么你需要用反引号括起来,因为它table是一个保留字。但最好将名称更改为不是保留

其次,您也没有正确转义用户输入数据。您可以考虑mysql_real_escape_string用于此目的。

$input = mysql_real_escape_string($_POST['input']);

最后,您应该在 SQL 字符串中引用用户文本:

$select = mysql_query("SELECT first_name FROM `table` WHERE input='$input'");

或者,您可以使用参数化查询。

于 2012-02-28T10:35:41.717 回答
1

希望这可以帮助

//PHP
$firstname='';
$lastname='';

if(isset($_POST['go']))
{
   $firstname=$_POST['firstname'];
   $records = mysql_query("SELECT last_name FROM
   table WHERE firstname='$firstname'");

   if(mysql_num_rows ==1)
   {
       while($row=mysql_fetch_array($records))
       {
          $lastname=$row['last_name'];
       }
    }
}

//HTML
echo"<form method='post' >
echo" <input type='text' name='firstname' value='$firstname' />";
echo"<input type='submit' value='Go' /> ";
echo" <input type="text" name='lastname' value='$lastname' />";
echo"</form>";
于 2012-02-28T11:09:44.153 回答
1

正如您所说,您想根据 first_name 获取 last_name 您的查询应该类似于

$input = $_POST['input'];
$select = mysql_query("SELECT last_name FROM table WHERE first_name = '".$input."'");
$req = mysql_fetch_array($select);

尝试连接字符串中的变量,因为它比替换更快。

于 2012-02-29T10:31:27.730 回答