【问题标题】:Ajax PHP Scope issuesAjax PHP 范围问题
【发布时间】:2015-03-15 02:18:52
【问题描述】:

我在通过表单中的 ajax 调用连接到我的函数和数据库时遇到了一些问题。

<?php require_once("../includes/session.php"); ?>
<?php require_once("../includes/db_connection.php"); ?>
<?php require_once("../includes/functions.php"); ?>
<?php require_once("../includes/validation_functions.php"); ?>
<?php include("../includes/layouts/header.php"); ?>


<form action="Assets/ajax/userdetails.php" id="ajax-user" method="post">
    <div class="well" style="border-color: #b81e1e; display: none;" id="details1">
        <div>
            <label for="FirstName">First Name:<br /></label>
            <input name="FirstName" type="text" />
        </div>
        <div>
            <label for="LastName">Last Name:<br /></label>
            <input name="LastName" type="text"  />
        </div>
        <div>
            <select name="gender">
                <option value="male">Male</option>
                <option value="female">Female</option>
            </select>
        </div>

        <input class="btn btn-hero right" type="submit">

    </div>
</form>

<?php include("../includes/layouts/footer.php"); ?>

Javascript 看起来像这样;

$(document).on("submit", "form#ajax-user", function() {

    var that = $(this),
        url = that.attr("action"),
        type = that.attr("method"),
        data = {};


    that.find('[name]').each(function(index, value) {
        var that = $(this),
            name = that.attr('name'),
            value = that.val();

        data[name] = value;

    });

    $.ajax({
        url: url,
        type: type,
        data: data,
        success: function(response) {
            console.log(response);
        }

    });

    return false;
});

我已经在提交时运行了 ajax,这很好。然后是运行php,但是一直报错;

警告:mysqli_query() 期望参数 1 为 mysqli,在 /home/public/Assets/ajax/userdetails.php 中的 12 行中给出 null

最后调用的php看起来如下,我认为这与范围有关,但我仍在学习并为此苦苦挣扎了几天,如果有人可以给我一些指示,那就太好了赞赏。

谢谢

<?php 

    if (isset($_POST['FirstName'], $_POST['LastName'], $_POST['gender'])) {

    $current_user = $_SESSION["admin_id"];
    $firstname = $_POST['FirstName'];
    $lastname = $_POST['LastName'];
    $gender = $_POST['gender'];

    $query = "UPDATE users SET FirstName = '$firstname', LastName = '$lastname', Gender = '$gender' WHERE id = $current_user";
    $result = mysqli_query($connection, $query) or die(mysqli_error($connection));
    }
?>

编辑

$connection 在 db_connection 中定义;

<?php
    define("DB_SERVER", "localhost");
    define("DB_USER", "****");
    define("DB_PASS", "****");
    define("DB_NAME", "****");
  // 1. Create a database connection
  $connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
  // Test if connection succeeded
  if(mysqli_connect_errno()) {
    die("Database connection failed: " . 
         mysqli_connect_error() . 
         " (" . mysqli_connect_errno() . ")"
    );
  }
?>

【问题讨论】:

  • 希望我在这里提供了足够的信息,如果这是一个明显的错误,我们深表歉意!
  • 你如何定义$connection
  • 根据您编辑的问题检查已编辑的答案。

标签: php jquery mysql ajax


【解决方案1】:

根据 mysqli,您的连接语法无效/没有。

像这样使用它:

$connection=mysqli_connect("localhost","Uname","PWD","DBName");
if (mysqli_connect_errno()) {
    throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
}

更新

根据您编辑的问题:

使用&lt;?php require_once("../includes/db_connection.php"); ?&gt; 在您的 userdetails.php 中。因为你需要 $connection 参数。

【讨论】:

  • 不要使用路径&lt;?php require_once("../includes/db_connection.php"); ?&gt; 原样,因为路径取决于您的文件夹结构。我的意思是根据您的文件夹路径在您的 userdetails.php 中包含 db_connection 文件。
  • 感谢您的帮助!按照建议进行的修改。我非常感谢本网站用户的所有指导和大量知识。
【解决方案2】:

正如其他人所指出的,您需要先设置连接。此外,您的查询字符串在 $current_user 变量周围缺少单引号:

$query = "UPDATE users SET FirstName = '$firstname', LastName = '$lastname', Gender = '$gender' WHERE id = '$current_user'";

【讨论】:

  • 语句周围的双引号意味着 PHP 已经在为变量解释它,因此在这种情况下单引号不会产生影响。它们可以完全被排除在外。
  • @MichaelDoye ,是的,但是您会看到单引号 (') 使变量搅拌类型,例如名字,姓氏。您可以避免单引号仅用于像 Id getting ? 这样的数值
【解决方案3】:

你忘了定义 $connection

<?php 

if (isset($_POST['FirstName'], $_POST['LastName'], $_POST['gender'])) {

$current_user = $_SESSION["admin_id"];
$firstname = $_POST['FirstName'];
$lastname = $_POST['LastName'];
$gender = $_POST['gender'];
$connection = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($connection));
$query = "UPDATE users SET FirstName = '$firstname', LastName = '$lastname', Gender = '$gender' WHERE id = $current_user";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
}

?>

【讨论】:

  • 首先:似乎 OP 使用 &lt;?php require_once("../includes/db_connection.php"); ?&gt; 定义了 $connection。下一篇:您的代码无权工作,因为您在mysqli_connect中使用纯字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2011-04-10
  • 2011-08-11
  • 2011-09-26
  • 1970-01-01
相关资源
最近更新 更多