【问题标题】:I can not find an error in php (It all starts here: http://stackoverflow.com/questions/30393024/)我在 php 中找不到错误(一切从这里开始:http://stackoverflow.com/questions/30393024/)
【发布时间】:2015-05-22 19:44:00
【问题描述】:

我在 php.ini 中找不到错误。有时会出现这样的错误:

警告:array_walk() 期望参数 2 是有效的回调, 找不到函数“array_sanitize”或函数名无效 Z:\home\site.kz\www\core\functions\users.php 在第 3 行

警告:mysqli_query() 期望参数 1 为 mysqli,给定 null 在 Z:\home\site.kz\www\core\functions\users.php 第 10 行

警告:mysqli_insert_id() 期望参数 1 为 mysqli,null 在第 11 行的 Z:\home\site.kz\www\core\functions\users.php 中给出

警告:mysqli_query() 期望参数 1 为 mysqli,给定 null 在 Z:\home\site.kz\www\core\functions\users.php 第 13 行

<?php
function register_user($register_data) {
    array_walk($register_data, 'array_sanitize');
    $register_data['password'] = md5($register_data['password']);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $insert = "INSERT INTO users($fields) VALUES ($data) ";
    mysqli_query($con,$insert);
    $last_id = mysqli_insert_id($con);
    $update = "UPDATE users SET url = '".$last_id."' WHERE id = ".$last_id." ";
    mysqli_query($con,$update );
}
?>

更新

完整代码:

init.php

<?php
session_start();
error_reporting(0);

require 'database/connect.php';
require 'functions/languages.php';
require 'functions/general.php';
require 'functions/users.php';

if (logged_in() === true) {
    $session_id = $_SESSION['id'];
    $user_data = user_data($session_id, 'id', 'username', 'password', 'first_name', 'last_name', 'email');
}

$errors = array();
?>

users.php
旧代码:

function register_user($register_data) {
    array_walk($register_data, 'array_sanitize');
    $register_data['password'] = md5($register_data['password']);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    mysql_query("INSERT INTO `users` ($fields) VALUES ($data)"); 
}
<?php
function register_user($register_data) {
    array_walk($register_data, 'array_sanitize');
    $register_data['password'] = md5($register_data['password']);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $insert = "INSERT INTO users($fields) VALUES ($data) ";
    mysqli_query($con,$insert);
    $last_id = mysqli_insert_id($con);
    $update = "UPDATE users SET url = '".$last_id."' WHERE id = ".$last_id." ";
    mysqli_query($con,$update );
}

function user_count() {
    return mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `active` = 1"), 0);
}

function user_data($id) {
    $data = array();
    $id = (int)$id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `id` = $id"));

        return $data;
    }
}

function logged_in() {
    return (isset($_SESSION['id'])) ? true : false;
}

function user_exists($username) {
    $username = sanitize($username);
    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}
function email_exists($email) {
    $email = sanitize($email);
    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `email` = '$email'"), 0) == 1) ? true : false;
}

function user_active($username) {
    $username = sanitize($username);
    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `username` = '$username' AND `active` = 1"), 0) == 1) ? true : false;
}

function id_from_username($username) {
    $username = sanitize($username);
    return mysql_result(mysql_query("SELECT `id` FROM `users` WHERE `username` = '$username'"), 0, 'id');
}

function login($username, $password) {
    $id = id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $id : false;
}
?>

general.php

<?php
function protect_page() {
    if (logged_in() === false) {
        header('Location: protected.php');
    }
}

function aray_sanitize(&$item) {
    $item = mysql_real_escape_string($item);
}

function sanitize($data) {
    return mysql_real_escape_string($data);
}

function output_errors($errors) {
    return '<ul><li>' . implode('</li><li>', $errors) . '</li></ul>';
}
?>

connect.php

<?php
$host="Localhost";
$db="social";
$user="social";
$password="social";
$connect_error = 'Sorry, we\'re experiencing connection problems.';
mysql_connect($host, $user, $password) or die($connect_error);
mysql_select_db($db) or die($connect_error);
?>

【问题讨论】:

  • 这些是警告,但不是错误。
  • Variable scope 是一个问题; $con 未在您的 register_user() 函数中定义
  • array_sanitize 函数在哪里???
  • $con 将在函数 register_user 中全局化
  • 看起来你在玩数据库扩展的挑选和混合.. MySQL !== MySQLi.... 始终如一地使用 MySQLi,你会遇到更少的问题.. .. 学会使用绑定变量,你不需要转义你的值

标签: php


【解决方案1】:

试试这个:

function register_user($register_data) {
    global $con;
    array_walk($register_data, 'array_sanitize');
    $register_data['password'] = md5($register_data['password']);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    $insert = "INSERT INTO users($fields) VALUES ($data) ";
    mysqli_query($con,$insert);
    $last_id = mysqli_insert_id($con);
    $update = "UPDATE users SET url = '".$last_id."' WHERE id = ".$last_id." ";
    mysqli_query($con,$update );  
}
function aray_sanitize(&$item) { 
    $item = mysql_real_escape_string($item); 
} 

【讨论】:

  • 修复了mysqli错误,但不是关于array_sanitize的错误。
  • 重新定义函数会消除警告,但不会清理数据。
  • 有时会出现此错误:警告:mysqli_query() 期望参数 1 为 mysqli,Z:\home\site.kz\www\core\functions\users.php 第 11 行中给出的 null 警告: mysqli_insert_id() 期望参数 1 为 mysqli,Z:\home\site.kz\www\core\functions\users.php 第 12 行给出的 null 警告:mysqli_query() 期望参数 1 为 mysqli,Z 中给出的 null :\home\site.kz\www\core\functions\users.php 第 14 行
  • 从哪里得到 $con 是一个有效的连接吗?请粘贴如何初始化 $con 的代码
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多