我有(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);
答案 0 :(得分:3)
您在插入的值周围缺少引号。使用
input='$input'
您没有在查询中进行任何错误检查,因此在这种情况下,事情会无声地破坏。要进行正确的错误检查并获取详细消息,请查看manual on mysql_query()
或此reference question.
此外,您展示的代码容易受到SQL injection的攻击。对于您插入的所有字符串数据,使用库的正确卫生方法(在本例中为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();
}
答案 1 :(得分:2)
有很多问题。
首先,您的表可能不会被称为table
,而是其他内容。如果实际上由于某种原因称为table
,则需要将其包围在反引号中,因为table
是保留字。但是将名称更改为reserved word会更好 。
其次,您也无法正确转义用户输入数据。您可以考虑将mysql_real_escape_string
用于此目的。
$input = mysql_real_escape_string($_POST['input']);
最后,您应引用SQL字符串中的用户文本:
$select = mysql_query("SELECT first_name FROM `table` WHERE input='$input'");
或者,您可以使用参数化查询。
答案 2 :(得分: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>";
答案 3 :(得分: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);
尝试在字符串中连接变量,因为它比替换更快。