【发布时间】: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