我刚刚更新了这个问题。每当我将变量$ecode放在 WHERE 条件下时,我似乎无法更新我的数据库。但是当我回显这个变量时,它总是回显它的正确值。
<?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>
我只是在测试在触发单选按钮时操纵我的数据库。
1(你应该使用mysql_real_escape_string($_GET[](或有人将mysql命令注入你的系统,如DROP TABLE,这将是你的数据库的终结。
2(其次,我会转向使用PHP PDO,它更安全,速度更快(很长(。
3(将您的SCOD更改为最后一行
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."'");
试试这种方式。
$sql=("update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'");
始终尝试回显您的查询,看看您的查询出了什么问题。
如果密码设置为您的DBMS,则提供第三个参数 passwrod
$conn = mysql_connect("localhost","root","<passwrod>");
或者,如果未设置密码,则可以将其留空。并尝试这个
$sql="update offset_form set Approved =$q where Employee_Code=$ecode";
或
$sql="update offset_form set Approved ='".$q."' where Employee_Code='".$ecode."'";
注意:双引号会解析PHP变量,很可能您使用的引号方式有问题。
你的查询是你想要的吗?
令人困惑的一件事是,您已经注释掉了以下内容:
"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
。也许您需要修改插入语句?无论是那个还是$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 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
来更好地防范恶意意图。
请调试 $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);