在我的程序中,我试图获取表单提交的值并在sql查询中使用以检索结果,然后再次使用$ _GET [“name”]值将数据提供给数据库。 以下代码不会在循环$ _GET [“name”]
中传播值 <?php
session_start();
$id = $_GET["name"];
echo "<h2> Hello ".$id." </h2>" ;
if((isset( $_POST['dept'])))
{
echo "<h2><center>You have sected ". $_POST['dept'] ." !!</center></h2>";
$dept_ = $_POST['dept'];
$options = $_POST['course'];
foreach($options as $option) //loop through the checkboxes
{
$uid="root";
$pass="root";
$db = mysql_connect("localhost:3036",$uid,$pass);
if(!$db) die("Error connecting to MySQL database.");
mysql_select_db("sync" ,$db);
$result = mysql_query("SELECT DISTINCT `name`,`password`,INET_NTOA( `ip` ) FROM detail Where id = '$_GET["name"]' ;") or die(mysql_error());
if(mysql_num_rows($result) > 0):
while($row = mysql_fetch_assoc($result)):
$name = $row['name'];
$password = $row['password'];
$ip = $row['INET_NTOA( `ip` )'];
echo $name ; // NOT PRINTING ANYTHING
echo $password ; // NOT PRINTING ANYTHING
echo $_GET["name"] ; // NOT PRINTING ANYTHING
$sql1_Qu = "INSERT INTO registration (id,password,ip,name,course) VALUES ('$_GET["name"]','$password',INET_ATON('$ip'),'$name','$option')";
//$sql1_Qu = "INSERT INTO registration (id,password,ip,name,course) VALUES ('$id','$password',INET_ATON('$ip'),'$name','$option')";
$resu = mysql_query($sql1_Qu) or die('Could not connect: ' . mysql_error());
endwhile;
endif;
}
}
?>
这只是在第4行打印,但是在循环中没有传播值,包含数据库查询。
请提出一些解决问题的方法...... 提前致谢
答案 0 :(得分:2)
我认为您在转发$_GET["name"]
的双重报价时遇到问题。如果您使用$_GET
或$_POST
表单,我也不清楚,因为您使用它们,这可能是一个错误。
$result = mysql_query("SELECT DISTINCT `name`,`password`,INET_NTOA( `ip` ) FROM detail Where id = '".$id."' ;") or die(mysql_error());
此外,您的代码对于sql注入非常难以理解,请查看this post
答案 1 :(得分:1)
这一行:
$result = mysql_query("SELECT DISTINCT `name`,`password`,INET_NTOA( `ip` ) FROM detail Where id = '$_GET["name"]' ;") or die(mysql_error());
错误逃脱,易受注射。同时修复转义和使用安全功能:
$result = mysql_query(
sprintf("
SELECT
DISTINCT `name`,
`password`,
INET_NTOA( `ip` )
FROM
detail
WHERE
id = '%s'
", mysql_real_escape_string($id))
) or die(mysql_error());
答案 2 :(得分:0)
变化:
FROM detail Where id = '$_GET["name"]' ;")
到
FROM detail Where id = '" . $id . "';")
答案 3 :(得分:0)
您应该对此感到高兴,因为您的网站对人们称之为SQL注入的内容感到尖叫。 http://en.wikipedia.org/wiki/SQL_injection
基本上,您网站的用户只需将?name=<some sql code>
添加到您的网址并操纵您的数据库(即更改密码)。始终有效输入!绝对不要在SQL查询中使用$ _GET或$ _POST。
在此处阅读更多内容以了解如何防止SQL注入:http://php.net/manual/en/security.database.sql-injection.php
至于你的答案。你正在错误地连接你的字符串(或者实际上......根本没有)。
尝试以这种方式构建字符串:
"INSERT INTO registration (id,password,ip,name,course) VALUES ('" . $_GET["name"] . "','$password',INET_ATON('$ip'),'$name','$option')"