我一直在尝试使用变量作为列名来更新mysql
表中列的值,但它不起作用。当我没有使用列名作为变量时,它起作用了。但我希望列名称是动态的。以下是我的代码。提前致谢
$type = $_POST['message_type'];
$message_id = $_POST["message_id"];
$txtmessage = $_POST["txtmessage"];
if(!empty($_POST["message_id"]) && !empty($_POST["txtmessage"]) && !empty($_POST["message_type"])) {
$result = mysqli_query($conn,"UPDATE form SET $type = '$txtmessage' WHERE id='$message_id'");
}
以下是完整的代码,以便您了解我正在尝试做什么并帮助我做得更好。
Html
代码:
<tr>
<td><label>Surname:</label></td>
<td>
<div class="message-box" id="message_<?php echo $formdata["regformid"];?>">
<span class="message-content"><?php echo $formdata["surname"]; ?></span>
<button class="btnEditAction" name="edit" onClick="showEditBox(this,<?php echo $formdata["regformid"]; ?>,'surname')">
Edit
</button>
</div>
</td>
</tr>
脚本:
function showEditBox(editobj,id,type) {
$('#frmAdd').hide();
$(editobj).prop('disabled','true');
var currentMessage = $("#message_" + id + " .message-content").html();
var editMarkUp = '<input size="10" id="txtmessage_'+id+'" placeholder="'+currentMessage+'" /><button name="save" onClick="callCrudAction('+id+','+type+')">Save</button><button name="cancel" onClick="cancelEdit(\''+currentMessage+'\','+id+')">Cancel</button>';
$("#message_" + id + " .message-content").html(editMarkUp);
}
function cancelEdit(message,id) {
$("#message_" + id + " .message-content").html(message);
$('#frmAdd').show();
}
function callCrudAction(id,type) {
var queryString;
queryString = 'message_id='+id+'&message_type='+type+'&txtmessage='+ $("#txtmessage_"+id).val();
jQuery.ajax({
url: "action.php",
data:queryString,
type: "POST",
success:function(data){
$("#message_" + id + " .message-content").html(data);
$('#frmAdd').show();
$("#message_"+id+" .btnEditAction").prop('disabled','');
$("#txtmessage").val('');
$("#loaderIcon").hide();
},
error:function (){}
});
}
action.php的:
$type = $_POST['message_type'];
$message_id = $_POST["message_id"];
$txtmessage = $_POST["txtmessage"];
if(!empty($_POST["message_id"]) && !empty($_POST["txtmessage"]) && !empty($_POST["message_type"])) {
//$result = mysqli_query($conn,"UPDATE regform SET `$type` = '$txtmessage' WHERE regformid='$message_id'");
$result = mysqli_query($conn, 'UPDATE regform SET `' . $type . '` = "' . $txtmessage . '" WHERE regformid=' . $message_id. '');
//$result = mysqli_query($conn,"UPDATE regform SET " . mysqli_real_escape_string($conn, $type) . ' = ' . mysqli_real_escape_string($conn, $txtmessage) . " WHERE regformid='$message_id'");
if($result){
echo $_POST["txtmessage"];
}
if (!$result) {echo mysqli_error($conn);}
}
MySQL的:
CREATE TABLE IF NOT EXISTS `regform` (
`regformid` int(11) NOT NULL AUTO_INCREMENT,
`surname` varchar(200) NOT NULL,
`firstname` varchar(200) NOT NULL,
`middlename` varchar(200) NOT NULL,
`reg_no` varchar(20) NOT NULL,
PRIMARY KEY (`regformid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ;
答案 0 :(得分:0)
我会使用以下代码来执行sql语句。 mysqli_real_escape_string($ conn,...)调用确保变量1)的内容不会损害您的数据库,2)防止由message和messageid引起的意外语法错误。由于您使用用户输入来确定列名称,因此您必须小心$ type varia中的内容。我要么不直接从用户输入中获取列名(使用let&#39; s说出用户输入中的数字,并使用php中的数组将数字与字段名称匹配),或者我将验证名称使用information_schema.columns表的列。
$result = mysqli_query($conn, "UPDATE regform SET `" . mysqli_real_escape_string($conn,$type) . "` = '" . mysqli_real_escape_string($conn,$txtmessage) . "' WHERE regformid='" . mysqli_real_escape_string($conn,$message_id). "'");