我刚刚更新了这个问题。 每当我在我的WHERE条件上放置变量$ ecode时,我似乎无法更新我的数据库。但是,当我回应这个变量时,它总是回应它的正确价值。
<?php
require 'sqlicon.php';
$q=$_GET['q'];
$ecode= $_GET['ecode'];
echo"".$ecode;
$result=$db->query("UPDATE offset_form SET Approved='".$q."' WHERE Employee_Code='".$ecode."'");
?>
这是sqlicon.php的内容:
<?php
$db=new mysqli('localhost','root','',dbuser'); //localhost,username,password, dbname
?>
这是我获取$ q和$ ecode日期的地方:对不起,如果它还没有在mysqli中。
testingjava.php:
<html>
<title> Offset Requests </title>
<head><link rel="stylesheet" type="text/css" href="up.css"/></head>
<script>
function Approval() {
var name;
name=document.getElementById('ename').textContent;
if(document.form1.approval[0].checked true) {
alert(name);
window.location.href = "sqli.php?q=Yes" + "&ecode=" + name;
}
}
</script>
<body>
<form id="form1" name="form1" method="post" action="testingjava.php">
<?php
$conn = mysql_connect("localhost","root","");
if(!$conn)
echo ("Could not connect");
mysql_select_db("dbuser",$conn);
$query=mysql_query("Select * from offset_form where Approved=''");
while($fetch=mysql_fetch_array($query)) {
$ecode=$fetch['Employee_Code'];
//$_SESSION['ecode']=$ecode;
$ename=$fetch['Employee_Name'];
$epos=$fetch['Employee_Position'];
$edpt=$fetch['Employee_Department'];
$dleave=$fetch['Date_Leave'];
$dreturn=$fetch['Date_Return'];
$reason=$fetch['Offset_Reason'];
echo "".$ecode ."".$ename." ".$epos." ".$edpt." ".$dleave." ".$dreturn." ".$reason;
echo "<input type='radio' name='approval' onChange='Approval()'>Yes";
echo "<input type='radio' name='approval'>No";
echo "<input type='text' name='remarks' size='30'>";
echo"<hr id='br'></hr>";
echo"<input type='submit' value='Submit' name='send' onClick='Approval()'>";
}
?>
</form>
</body>
</html>
我只是在触发单选按钮时测试操作数据库。
答案 0 :(得分:3)
1)你应该使用mysql_real_escape_string($ _ GET [])或者向你的系统注入一个mysql命令的人,比如DROP TABLE,这将是你数据库的结尾。
2)其次,我会转而使用PHP PDO,它更安全,速度更快(很长一段时间)。
3)从
改变你的第二行到最后一行mysql_query($sql,$conn);
到
mysql_query($sql,$conn) or die(mysql_error()." _____is the string correct? ".$sql);
然后应该回显任何错误,如果你发布回应错误,我们可以解决它
看了之后我猜测问题是你错过了$ q周围的..所以$ sql包含字符串“$ q”而不是分配给变量$ q的字符串
试试这个
$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");
答案 1 :(得分:0)
试试这个..
$sql=("update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");
总是尝试回应您的查询,看看您的查询出了什么问题..
答案 2 :(得分:0)
如果密码设置为dbms,则提供第三个param passwrod
$conn = mysql_connect("localhost","root","<passwrod>");
或者如果未设置passwrod,则可以将其留空。 并尝试这个
$sql="update offset_form set Approved =$q where Employee_Code=$ecode";
或
$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'";
注意:双引号将解析php变量, 最有可能的是你所使用的报价方式存在问题。
答案 3 :(得分:0)
令人困惑的一件事是你注释掉了这个:
"INSERT INTO offset_form (Approved) VALUES ('".$ecode."')"
然后你将此作为更新:
"UPDATE offset_form SET Approved = '$q' WHERE Employee_Code = '".$ecode."'"
您使用的值不符合要求。当然你应该:
"UPDATE offset_form SET Approved = '$q' where Approved = '".$ecode."'"
这是因为您要将$ecode
插入到列Approved
中,然后在名为$ecode
的另一列中搜索Employee_Code
。也许您需要修改insert语句?那个或$ecode
可能只是在不同的时间代表两个不同的值?
如果您的嵌入值本身包含引号,则切换引号的唯一方法就会产生影响。在这种情况下,使用正确的escape函数将对问题进行排序。所以你可以自由使用:
"UPDATE offset_form SET Approved = '$q' where Approved='$ecode'"
或:
"UPDATE offset_form SET Approved = '".$q."' where Approved = '".$ecode."'"
或:
'UPDATE offset_form SET Approved = "'.$q.'" where Approved = "'.$ecode.'"'
但不是:
'UPDATE offset_form SET Approved = "$q" where Approved = "$ecode"'
前三个中的任何一个都不应该有所作为。
作为一项规则,我总是使用反引号编写查询转义表名和列名,以确保我不会意外地使用保留字:
"UPDATE `offset_form` SET `Approved`='$q' WHERE `Employee_Code`='".$ecode."'"
仔细检查数据集
确保您尝试在PHP中运行的同一查询在您的dbms中运行。这包括在PHP中回显查询,然后通过PHPMyAdmin,Navicat或您在编码之外访问数据库时使用的任何内容执行它。例如,具有硬编码值的查询,如果这不起作用,则在查询或数据库设计中存在与PHP无关的逻辑问题:
"UPDATE offset_form SET Approved='13' WHERE Employee_Code='12'"
检查空白区域
有时候看起来应该正常运行的查询存在问题,因为列值包含意外的不可见空格。如果是这样,他们只能使用以下内容进行选择:
"UPDATE offset_form SET Approved='$q' WHERE Employee_Code LIKE '%".$ecode."%'"
检查用户权限
确保您的MySQL用户能够执行您正在尝试的查询类型,这意味着允许SELECT,INSERT和UPDATE查询。
正如其他人已经说过的那样,您应该升级到非弃用的数据库访问方法。如果没有,您至少应该使用mysql_real_escape_string
来更好地防范恶意。
答案 4 :(得分:0)
请调试$ q的值并尝试运行此代码:
session_start();
$q=$_GET['q'];
$ecode=$_GET['ecode'];
$conn = mysql_connect("localhost","root","");
if(!$conn)
echo ("Could not connect");
mysql_select_db("asiantech",$conn);
echo"".$ecode;
echo"<br>".$q;
$sql="update offset_form set Approved ='".mysql_real_escape_string($q)."' where Employee_Code='".$ecode."'";
//$sql = "INSERT INTO offset_form (Approved) VALUES ('".$ecode."')";
mysql_query($sql,$conn);