在PHP函数中更改全局变量

问题描述 投票:-1回答:1

我想使用选择选项“选择”来更改值。我尝试将值“ Selected”从ajax发布到php Function,但是我无法在函数中获取它。这是我的Ajax代码:

$('#Id_Kund').change(function() {
        var selected = this.value;
        }
        $.ajax({
            url: "locations.php",
            method: "POST",
            data: {
                selected: selected
            },
            success: function(data) {
                initMap();
            }
        });
    });

PHP代码:

if(isset($_POST["selected"])){
  $F_Selected = $_POST['selected'];
  }else{$F_Selected ="%";}

同一PHP文件中的功能:

function get_all_locations($con){
global $F_Selected;
$sqldata = mysqli_query($con,'select * from locations WHERE gewerk LIKE "'.$F_Selected.'"');
$rows = array();
while($r = mysqli_fetch_assoc($sqldata)) {
    $rows[] = $r;}
$indexed = array_map('array_values', $rows);
echo json_encode($indexed);
if (!$rows) {
    return null;
}  
}

所以我通常会得到我的json数据:

var locations = <?php get_all_locations($con) ?>;
javascript php jquery mysql mysqli
1个回答
0
投票

首先,您的代码容易受到SQL注入

在查询中使用变量之前,应先对其进行转义

$F_Selected = mysqli_real_escape_string($con, $F_Selected);

另一个选择是使用mysqli准备好的语句https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

或PDOhttps://www.php.net/manual/en/book.pdo.php

如果您不这样做,则很容易受到SQL注入和潜在的系统危害

现在有关您的全局变量,因为您不提供完整的代码,所以我不确定,但是似乎在调用get_all_locations($con) $F_selected时未分配值。

此php代码似乎在包含javascript和php的html文件中,因此可能在您的页面加载时执行,我猜只有一次。此代码在哪里?在initMap()里面吗?如果是这种情况,那么它将无法从AJAX调用中获得结果...

var locations = <?php get_all_locations($con) ?>;

然后您似乎从ajax POST调用此文件

 $.ajax({
            url: "locations.php",

但是不对返回的数据做任何事情

success: function(data) {
                initMap();
            }

您可能想从ajax调用中获取json编码的数据,并在您的函数中使用它……类似这样:

success: function(data) {
                initMap(data);
            }

无论如何,最好不要使用全局变量在函数中使用额外的参数

function get_all_locations($con,$selected) 

另一个问题(可能会导致javascript SyntaxError的问题是您在这里关闭函数的时间过早...

$('#Id_Kund').change(function() {
        var selected = this.value;
        }

如果您发布有关代码的更多详细信息,我可以为您提供更多帮助。

© www.soinside.com 2019 - 2024. All rights reserved.