未定义索引 ajax php

Undefined Index ajax php

提问人:user3498098 提问时间:8/17/2017 最后编辑:Ivanuser3498098 更新时间:8/17/2017 访问量:194

问:

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

我在这里尝试做的是进行 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

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

php ajax 未定义索引

评论

2赞 Script47 8/17/2017
未来的注意事项:验证/清理以确保它被通过。然后,当它没有被传递时,错误不会显示。$_POST
2赞 Quentin 8/17/2017
危险:您容易受到 SQL 注入攻击,需要保护自己免受这些攻击。
1赞 ADyson 8/17/2017
检查浏览器中的“网络”选项卡,并检查 AJAX 请求,以查看搜索值是否实际传递到请求中的服务器。
0赞 Barmar 8/17/2017
你确定你在打电话吗?我没有看到任何称呼它的东西。callAjax()
0赞 Masivuye Cokile 8/17/2017
我看不出你在哪里提交表格

答:

1赞 IsThisJavascript 8/17/2017 #1

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

<?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

评论

2赞 Barmar 8/17/2017
这恰恰掩盖了问题所在。 应始终在他进行 AJAX 调用时设置。$_POST['search']
1赞 Script47 8/17/2017
理想情况下,您将整个代码包装在 中,并有一个条件,即您将向用户返回一条消息以填充字段,并在前端阻止他们发送空字段。issetelse
1赞 IsThisJavascript 8/17/2017
无论是否在客户端上检查空输入。您仍然需要在服务器上使用它,否则 php 将抛出此问题。在使用 _GET 美元和 _POST 美元时,它总是如此。请在您的环境中进行测试。
1赞 ADyson 8/17/2017
@Barmar你说“检查空输入最好在客户端中完成,所以你根本不会发出 ajax 请求。在改善用户体验方面确实如此,但为了安全性/健壮性,也应始终在服务器上进行检查,以防恶意用户绕过 UI。服务器端应该是要实现的序列的第一部分,因为它是最重要的。UX的好坏可以稍后添加。
1赞 Barmar 8/17/2017
@WillParky93 当输入无效时,正确的做法是报告错误,而不仅仅是将其替换为空字符串。
1赞 JYoThI 8/17/2017 #2

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

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

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

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

第四:如果要返回更多行作为 json 数据,则需要将 dataType 设置为 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;
      });
  });

评论

1赞 JYoThI 8/17/2017
我正在处理这个问题,你有没有注意到@WillParky93!empty()
0赞 JYoThI 8/17/2017
没关系,@Script47无论如何,好的答案会得到一些好心人的认可
0赞 Masivuye Cokile 8/17/2017 #3

在您的一个按钮中,单击该函数时调用该函数,因为您没有键入 Submit 按钮: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 注入问题。