Php 如何解决未定义索引问题
我有一个这样的表单,如果我选择管理级别,则组合框部门被禁用,然后在选择员工级别时,组合框部门将处于活动状态并显示部门的选项,此方法有效,但在保存过程中选择管理级别时遇到错误,而且表单部门不活跃, 这是我的密码Php 如何解决未定义索引问题,php,mysql,web,Php,Mysql,Web,我有一个这样的表单,如果我选择管理级别,则组合框部门被禁用,然后在选择员工级别时,组合框部门将处于活动状态并显示部门的选项,此方法有效,但在保存过程中选择管理级别时遇到错误,而且表单部门不活跃, 这是我的密码 <div class="form-group"> <label class="control-label col-sm-4" for="level">Level</label> <div c
<div class="form-group">
<label class="control-label col-sm-4" for="level">Level</label>
<div class="col-sm-4">
<select name="level" id="level" class="form-control">
<option value="null">-- Level --</option>
<option value="admin">Admin</option>
<option value="staff">Staff</option>
<option value="client">Client</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" for="department">Department</label>
<div class="col-sm-4">
<select name="department" id="department" class="form-control">
</select>
</div>
</div>
$("#level").change(function(){
// variabel dari nilai combo box provinsi
var id = $("#level").val();
// mengirim dan mengambil data
$.ajax({
type: "POST",
dataType: "html",
url: "search_level.php",
data: "level="+id,
success: function(msg){
// jika tidak ada data
if(msg == ''){
var x=document.getElementById("department")
x.value=""
x.disabled=true
}
// jika dapat mengambil data,, tampilkan di combo box kota
else{
var x=document.getElementById("department")
x.disabled=false
$("#department").html(msg);
}
}
});
});
数量
--水平仪--
管理
工作人员
客户
部门
$(“#级别”).更改(函数(){
//variabel dari nilai组合盒提供
var id=$(“#level”).val();
//Mengrim和Mengabil数据
$.ajax({
类型:“POST”,
数据类型:“html”,
url:“search_level.php”,
数据:“level=“+id,
成功:功能(msg){
//jika tidak ada数据
如果(消息=“”){
var x=document.getElementById(“部门”)
x、 value=“”
x、 禁用=真
}
//jika dapat提供数据,tampilkan di combo box kota
否则{
var x=document.getElementById(“部门”)
x、 禁用=错误
$(“#部门”).html(msg);
}
}
});
});
代码保存散文
<?php
include "../config/koneksi.php";
$name = $_POST['name'];
$user = $_POST['username'];
$password = md5($_POST['password']);
$level = $_POST['level'];
$deparment = $_POST['department'];
$status = '1';
$tgl_dibuat = date("Y-m-d h:i:s");
$query = mysqli_query($con, "INSERT INTO user (nama,user,password,level,department,tgl_dibuat,status) VALUES ('$name','$user',
'$password','$level','$deparment','$tgl_dibuat','$status')");
if ($query) {
?>
<script language="JavaScript">
alert('User Saved');
</script>
<?php
} else {
?>
<script language="JavaScript">
alert('Failed');
document.location='user';
</script>
<?php
}
?>
如果该字段被禁用,您将不会发送$\u POST['department']代码>so:
$deparment = $_POST['department'];
无法加载您的post请求的“部门”
索引。你可以做:
$department = isset($_POST['department']) ? $_POST['department'] : "Default value";
请注意,您的代码是非常不安全的,因为您没有对值进行任何检查,也没有转义字符串,有人可能很容易在表单中插入一些SQL。看
我至少要摆脱你的束缚:
$name = mysqli_real_escape_string($_POST['name']);
$user = mysqli_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
$level = mysqli_real_escape_string($_POST['level']);
$deparment = isset($_POST['department']) ? mysqli_real_escape_string($_POST['department']) : "Default value";
此外,正如@alexis所观察到的,使用它会更好。基本上,这个错误告诉您,在第9行的文件“add_user.php”中,您试图打印实际上不存在的索引。
下面给出了这行代码
数据库表“department”中有哪些列?请不要使用md5()
进行密码加密,有更好的调用。出于安全原因,您还应该使用准备好的语句。上述代码可能存在多个问题:如前所述,不要使用md5
对密码进行散列,而是使用password\u hash
/password\u verify
。代码易受sql注入攻击-请改用prepared语句
,并且在分配变量之前,您没有检查变量是否已设置-请使用isset()
您的代码极易受到sql注入攻击!使用事先准备好的声明来完全保护您的数据免受这些攻击,并在您遇到这些攻击之前解决一系列其他潜在问题;但是不要用mysqli_real_escape_string
手动引用,而是使用准备好的查询——它更健壮,使用起来也更简单:
$name = mysqli_real_escape_string($_POST['name']);
$user = mysqli_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
$level = mysqli_real_escape_string($_POST['level']);
$deparment = isset($_POST['department']) ? mysqli_real_escape_string($_POST['department']) : "Default value";
<option value="<?php echo $data_prov["column_name"] ?>"><?php echo $data_prov["column_name"] ?></option><br`>