未定义的索引 ajax php.



>我有一个问题。我尝试了所有可能的解决方案,但总是得到未定义的索引。我以前试过这个,它工作正常。我不知道今天发生了什么,我只是复制粘贴它。

我在这里要做的是进行 AJAX 搜索。

prod_stocks_add.php

<?php
include("headerindex.php");
include("sidebar.php");
?>
<div class="right_col" role="main">
<div class="">
<div class="col-md-12 col-sm-12 col-xs-12">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="prod_info.php">Product Stocks</a></li>
<li class="breadcrumb-item active">Add Stocks</li>
<a href="prod_stocks.php" class="btn btn-warning btn-lg pull-right"><i class="fa fa-history"></i>&nbsp;Back</a>
</ol>
<div class="x_panel">
<div class="x_title">
<h4><b>Add Stocks<b></h4>
<div class="clearfix"></div>
</div>
<div class="x_content">
<div class="row">
<div class="col-sm-12">
<div class="card-box table-responsive">
<form role="form" method="post" action="#" class="form-horizontal form-label-left" novalidate enctype="multipart/form-data">
<div class="item form-group">
<div class="control-label col-md-12 col-sm-12 col-xs-6 form-group top_search" style="margin-left: 90px;">
<div class="input-group">
<input type="text" name="search" id="search" placeholder="Search for...">
<div id="back_result"></div>
<!--   <span class="input-group-btn">
<select class="btn btn-primary" name="searchfilter" id="searchfilter">
<option value="Barcode">Barcode</option>
<option value="Item">Item</option>
</select>
</span> -->
<div class="col-md-3 col-sm-3 col-xs-6" style="margin-bottom: -500px;">
<!-- <button type="button" class="btn btn-success"><i class="fa fa-check"></i><span>Go</button> -->
</div>
</div>
</div>
</div>
<br>
<div class="item form-group">
<label class="control-label col-md-6 col-sm-6 col-xs-12" for="category" name="lbl_category">Item <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<label></label>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-6 col-sm-6 col-xs-12" for="barcode" name="lbl_barcode">Barcode <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<label></label>
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-6 col-sm-6 col-xs-12" for="batch" name="lbl_batch">Batch Stock <span></span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="int" id="batch" name="txt_batch" class="form-control col-md-7 col-xs-12" style="width:200px;">
</div>
</div>
<div class="item form-group">
<label class="control-label col-md-6 col-sm-6 col-xs-12" for="total" name="lbl_total">Total Stock <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12 form-group">
<label></label>
</div>
</div>
<div class="item form-group" style="margin-top:-300px">
<label class="control-label col-md-1 col-sm-1 col-xs-6" for="image" name="lbl_img">Image <span class="required"></span>
</label>
<div class="col-md-1 col-sm-1 col-xs-6">  
<!--  <a tabindex="-1" href="#myModal" data-toggle="modal"><b><i class="fa fa-file-image-o" aria-hidden="true"></i>  PICTURE</b></a><br></br>
<a tabindex="-1" href="#myModal" data-toggle="modal" role="button"><i class="fa fa-file-image-o fa-5x" aria-hidden="true"></i></a><br></br>
--> 
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-md-offset-3">
<button type="submit" class="btn btn-primary">Cancel</button>
<button class="btn btn-success" name="btnsubmit">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
var callAjax = (function(){
var search = $('#search').val();
$.ajax({
url: 'get_users.php',
dataType: "text",
type: 'POST',
data: {search: search},
success: function(output){
alert(output);
}
});
}
});
</script>
<?php
include("footerindex.php");
?>

这是我的get_users.php

<?php
include("../db/conn.php");
$name = $_POST['search'];
$sql = "select * from product_info where prod_name like '%".$name."%'";
$array = mysqli_query($conn, $sql) or die(mysqli_error($conn));
$row = mysqli_fetch_array($array);
echo $row['prod_name'];

?>

这是错误:

注意:未定义的索引:在第 3 行的 C:\xampps\htdocs\josephine\admin\get_users.php 中搜索 滴

它从数据库中返回"ddddd"的数据。我没有得到的是来自 AJAX 的未定义的搜索索引

要消除错误,您需要执行以下操作:

<?php
include("../db/conn.php");
$name = (isset($_POST['search'])) ? $_POST['search'] : ""; // see this line
$sql = "select * from product_info where prod_name like '%".$name."%'";
$array = mysqli_query($conn, $sql) or die(mysqli_error($conn));
$row = mysqli_fetch_array($array);
echo $row['prod_name'];

?>

PHP 7 解决了这个问题;请参阅:http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

但是你应该改变你的sql东西,因为你很容易被注入。

编辑: -1?!?!我实际上被触发了。这是处理此问题的正确方法。它不是像拥有超过 300k 代表的人所说的那样"掩盖"它。
阅读这个 : PHP:"注意:未定义的变量","注意:未定义的索引"和"注意:未定义的偏移量">

上述通知在使用$_POST$_GET$_SESSION.对于$_POST$_GET,您只需要检查索引是否 在使用它们之前存在与否。

1st :如果用户提交空字符串意味着您必须通知用户不应该为空。

第二:尽量使用预准备语句来避免SQL注入。

第三:你需要在按钮点击时调用 AJAX 函数。

<button  type="button" id="button_submit" class="btn btn-success" name="btnsubmit">Submit</button>

第四:如果要返回更多行作为 JSON 数据,则需要将数据类型设置为 json

dataType: "json",

.PHP:

<?php
include("../db/conn.php");
if(!empty($_POST['search'])){
$sql = "select * from product_info where prod_name like '%?%'";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s',$_POST['search']);
$res=$stmt->execute();
if(!$res){ echo $stmt->error; }
$result = $stmt->get_result();
$row = $result->fetch_assoc();
//here you can use while loop to fetch all the record and do the json_encode() and return all the rows.
echo $row['prod_name'];
}else{
echo "Product search string should not empty ";
}
?>

阿贾克斯 :

$(document).ready(function(){
$(document).on('click','#button_submit',function(){
var search = $('#search').val();
$.ajax({
url: 'get_users.php',
dataType: "text",
type: 'POST',
data: {search: search},
success: function(output){
alert(output);
}
});
return false;
});
});

在其中一个按钮中,单击时调用callAjax()函数,因为您没有类型提交按钮:

<button type="button" class="btn btn-success" onclick="callAjax();"><i class="fa fa-check"></i><span>Go</button>

然后删除文档就绪函数中的 ajax 函数,因为它在某些浏览器中可能未定义:

<script>
var callAjax = (function(){
var search = $('#search').val();
$.ajax({
url: 'get_users.php',
dataType: "text",
type: 'POST',
data: {search: search},
success: function(output){
alert(output);
}
});
});
</script>

然后按照上面的注释处理SQL注入问题。

最新更新