PHP:
<?php
if (isset($_POST['name'])){
mysql_connect("localhost", "db", "test") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='.$_POST[name].'");
echo $tmp[0];
}
else
{
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input name="name" type="text">
<input type="submit" name="submit" value="submit" >
</form>
<?php
}
?>
MYSQL:
CREATE TABLE IF NOT EXISTS `Channels` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`commercial` tinyint(1) NOT NULL DEFAULT '0',
`usrid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Daten für Tabelle `Channels`
--
INSERT INTO `Channels` (`id`, `name`, `commercial`, `usrid`) VALUES
(2, 'TEST', 0, 0);
如果我在输入中写入TEST,则$ tmp [0]为空
请帮助
答案 0 :(得分:2)
问题在于您的查询:
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='.$_POST[name].'");
当您想要包含在字符串中的数组项时,需要将其括在花括号中:
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='{$_POST['name']}'");
然而不要这样做。
此查询非常不安全,并且对SQL注入开放。首先确保在PHP配置中将magic_quotes_gpc
设置为off(它不安全且不可靠 - 您可以使用var_dump(get_magic_quotes_gpc());
确认它是否打开)。然后执行以下操作:
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='" . mysql_real_escape_string($_POST[name]) . "'");
这有助于确保您的网站不会受到SQL注入攻击。
答案 1 :(得分:1)
你在这里有混合撇号和引号:
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='.$_POST[name].'");
应该是:
$tmp = mysql_query('SELECT commercial FROM Channels WHERE name="'.$_POST['name'].'"');
编辑:并且,正如其他人所提到的,如果Magic Quotes已启用,则关闭{{3}}并添加mysql_real_escape_string()
,这样做是谨慎的,所以:
$tmp = mysql_query('SELECT commercial FROM Channels WHERE name="'.mysql_real_escape_string($_POST['name']).'"');
另外,为了澄清,我从外引号切换到撇号的原因是变量解析(与自己做的工作相反)增加了一些开销。
答案 2 :(得分:0)
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='.$_POST[name].'");
你可能想要:
$tmp = mysql_query("SELECT commercial FROM Channels WHERE name='" . $_POST['name'] ."'");
否则,如果你的名字是“Some Thing”,你就会问mysql“.Some Thing”。 (也不要像我写的那样使用那个查询,这是一个安全问题,见下文)
$tmp
不是一个应该是结果的数组。您需要调用其中一个mysql_fetch_*
函数来获取结果。您还应该使用mysql_error()
检查错误,以确保查询成功。例如:
if(!mysql_error()){ $ row = mysql_fetch_row($ tmp); //对数据行做一些事情 }
写入的查询是一个安全问题。有人可以使用它来接管你的数据库并做任何他们想做的事情。使用mysql_real_escape_string()
来避免:
$ tmp = mysql_query(“SELECT commercial FROM Channels WHERE name ='”。mysql_real_escape_string($ _ POST ['name'])。“'”);