【问题标题】:Cannot redeclare my function php无法重新声明我的函数 php
【发布时间】:2015-06-30 17:57:03
【问题描述】:

我使用 Linux Debian

本地灯服务器

我试图在数据库和 php 之间建立连接并制作 API:

db.php(连接文件!):

<?php
$tf_host = 'localhost' ; 
$tf_dbname = 'tinyforum' ; 
$tf_username = 'root';
$tf_password = '976431' ;

$tf_handle = mysqli_connect($tf_host , $tf_username , $tf_password,$tf_dbname);



if (!$tf_handle){   
    die('connection problem ..');
}

$tf_db_result = mysqli_select_db($tf_handle,$tf_dbname);


mysqli_query($tf_handle, "SET NAMES 'utf8'") ;

function tinyf_db_close() {
    global $tf_handle;
    mysqli_close($tf_handle);


}

?>

我试图运行这个文件 ===>

<?php


error_reporting(E_ALL);
ini_set('display_errors', 1);

if(!isset($_POST['username']) or (!isset($_POST['password'])) or (!isset($_POST['email']))) {
    die('bye');
}


require_once('db.php');
require_once ('usersAPI.php');

$result = tinyf_users_add($_POST['username'],$_POST['password'],$_POST['email'], 0);
tinyf_db_close();
if($result) {
    die('yes');
}
else {
    die('no');
}

我得到错误:

致命错误:无法在第 21 行的 /var/www/html/tinyforum/db.php 中重新声明 tinyf_db_close()(之前在 /var/www/html/tinyforum/db.php:21 中声明)

usersAPI.php 代码

<?php 
//Users APIs
function tinyf_users_get($extra ='')
{
    global $tf_handle;
    $query = sprintf("SELECT * FROM `users` %s",$extra );
    $qresult = mysqli_query($tf_handle, $query);

    if (!$qresult)
        return NULL;
    $recount = mysqli_num_rows($qresult);
    if ($recount == 0)
        return NULL ;
    $users = array();
    for($i = 0 ; $i < $recount ; $i++)
        $users[count($users)] = mysqli_fetch_object($qresult);
    //mysql_free_result($qresult);

    return $users;
}

function tinyf_users_get_by_id($uid)
{
    $id = (int)$uid;
    if($id == 0 )
        return NULL ;
    $result = tinyf_users_get('WHERE id ='.$id);
    if($result == NULL)
        return NULL;
    $user = $result[0];
    return $user;
}

function tinyf_users_add($name,$password,$email,$isadmin)
{
    global $tf_handle;
    if ((empty($name)) || (empty($password)) || (empty($email)))
            return false;

    $n_email = mysqli_real_escape_string($tf_handle, strip_tags($email));
    if(!filter_var($n_email,FILTER_VALIDATE_EMAIL))
        return false;   

    $n_name = mysqli_real_escape_string($tf_handle, strip_tags($name));
    $n_pass = md5(mysqli_real_escape_string($tf_handle, strip_tags($password)));
    $n_isadmin = (int)$isadmin;
    if(($n_isadmin != 0) && ($n_isadmin != 1))
        $n_isadmin = 0 ; 
    $query = sprintf("INSERT INTO `users` VALUE(NULL,'%s','%s','%s','%d')",$n_name,$n_pass,$n_email,$n_isadmin);

    $qresult = mysqli_query($tf_handle, $query);
    if(!$qresult)
        return false;
    return true;
}

function tinyf_users_delete($uid)
{
    global $tf_handle;
    $id =  (int)$uid;
    if($id == 0 )
        return false ;  

    $query   = sprintf ("DELETE FROM `users` WHERE `id`= %d",$id);

    $qresult = mysqli_query($tf_handle, $query);
    if(!$qresult)
        return false;

    return true;

}

function tinyf_users_update($uid,$name = NULL,$password = NULL ,$email = NULL,$isadmin = -1)
{
    global $tf_handle;
    $id =  (int)$uid;
    if($id == 0 )
        return false ;
    $n_isadmin = (int)$isadmin ; // if 0 = FALSE not int ,,, if int  = 1 
    $user = tinyf_users_get_by_id($id);
    if(!$user)  
        return false;
    if ((empty($name)) && (empty($password)) && (empty($email)) && ($user -> isadmin == $n_isadmin))
        return false;   
    $fields = array() ;
    $query = 'UPDATE `users` SET ' ;

    if(!empty($email))
        {
            $n_email = mysqli_real_escape_string($tf_handle, strip_tags($email));
            if(!filter_var($n_email,FILTER_VALIDATE_EMAIL))
                return false;

            $fields[count($fields)] = "`email` = '$n_email'";
        }   

    if(!empty($name))
        {
            $n_name = mysqli_real_escape_string($tf_handle,strip_tags($name));
            $fields[count($fields)] = "`name` = '$n_name'";
        }
    if(!empty($password))
        {
            $n_pass = md5(mysqli_real_escape_string($tf_handle, strip_tags($password)));
            $fields[count($fields)] = "`password` = '$n_pass'";
        }       

    if($n_isadmin == -1)
    {
        $n_isadmin = $user -> isadmin  ;
    }
    elseif ($n_isadmin > 1)
    {
        $n_isadmin = $user -> isadmin ;
    }

    $fields[count($fields)] = "`isadmin` = $n_isadmin";

    $fcount = count($fields);

    if($fcount == 1)
     {
        $query .= $fields[0].'WHERE `id`= ' .$id ; //   $query = 'UPDATE `users` SET '
        $qresult = mysqli_query($tf_handle, $query);
        if(!qresult)
            return false;     
        else
            return true;


     }  
    for($i = 0; $i < $fcount ; $i++)
     {
        $query .= $fields[$i];
        if($i != ($fcount - 1)) // i = 0 that the first element in the array .. 2 will be - 1 last 3shan hwa by3ed el array mn wa7ed :D
            $query .=' , ';
     }

     $query .= ' WHERE `id` = '.$id;

     $qresult = mysqli_query($tf_handle, $query);
     if(!$qresult)
        return false;
     else
        return true;

}



include ('db.php') ;
error_reporting(E_ALL);
ini_set('display_errors', 1);
$result = tinyf_users_update(6,'ggrgrgr','123456',NULL,0);
if($result) //($uid,$name = NULL,$password = NULL ,$email = NULL,$isadmin = 0)
    echo 'success';


?>

【问题讨论】:

  • 改个名字就行了,叫close_db()什么的。
  • 您包含了多次定义函数的文件。将定义放入 ONE 文件中,并且只包含一次,或者将其放在include_once 屏障后面,这样它只会被加载一次。
  • 删除tinyf_db_close()的重复函数声明
  • 更好的是,将所有函数写入一个类
  • include_once('db.php'); include_once ('usersAPI.php');同样的问题

标签: php function mysqli


【解决方案1】:

你有两个选择

  1. 从您的主文件中删除require_once('db.php');,因为您已经将它包含在usersAPI.php
  2. 如果您打算同时包含 db.phpusersAPI.php,请从您的 usersAPI.php 中删除 require_once('db.php');

【讨论】:

  • so include_once ('usersAPI.php');只有??
  • 它可以工作,但为什么会这样,我看到一些像我的代码一样的东西,但他使用 mysql 并且工作了
  • 很高兴听到它正在工作,至于为什么会发生这种情况,其余的......这超出了我的能力:)
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2011-09-12
  • 2013-08-07
  • 2013-05-02
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多