函数名称必须是字符串错误

时间:2015-05-05 18:19:12

标签: php

我收到此错误

  

致命错误:第32行/home/an011500/www_root/nastavenia.php中的函数名必须是字符串

你可以帮我解决这个问题吗?

编辑: 整个代码

php_functions.php文件

 <?php


  function check_username($user_name)
    {
    require('PDO_DB_connect.php');
    $sql_query1= "SELECT username FROM user WHERE username=:username";
    $query1 = dbConnect()->prepare($sql_query1);
    $query1->bindParam(':username', $user_name);
    $query1->execute();
    if($query1->rowCount() == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
    }
    ?>

nastavenia.php文件

    <?php
session_start();
if(isset($_SESSION['username']))
{
    $session_set = true; 
}
elseif(!isset($_SESSION['username']))
{
    header("location: index.php");
    $session_not_set = true;
}

require('PDO_DB_connect.php');
require('php_functions.php');

$user_name = osetri_string($_POST['username']);
$email = osetri_string($_POST['email']);
$password = osetri_string($_POST['password']);
$confirm_password = osetri_string($_POST['password1']);
$actual_password = osetri_string($_POST['actual_password']);


if(isset($_POST['submit']))
{
    if(isset($_POST['actual_password']))
    {
        if(check_username($user_name) === true)
        {
           if(isset($_POST['username_radio_button']))
            {
            $prepared_username_sql_query = "UPDATE user SET username=:username WHERE username=:actual_username AND password=:actual_password";
            $username_sql_query($prepared_username_sql_query);
            $username_sql_query->bindParam('username' ,$user_name);
            $username_sql_query->bindParam('actual_username' ,$_SESSION['username']);
            $username_sql_query->bindParam('actual_password' ,$actual_password );
            if($username_sql_query->execute())
               {
                $user_info = "not a fail?";
               }
            }
        }
        else
        {
            $username_error = "fail";
        }
    }
}

?>

我的帖子主要是代码?精细。 XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

3 个答案:

答案 0 :(得分:3)

您正在尝试调用$username_sql_query此处存储的函数名称...

$username_sql_query($prepared_username_sql_query);

但是在下一行中,您将该变量称为对象......

$username_sql_query->bindParam('username' ,$user_name);

如果$username_sql_query是一个对象,那么第一行也应该是一个方法调用。

我还会在这里给出一些元建议 - 当PHP告诉你确切哪条线有问题时,你发布了很多代码。如果你研究了那一行,并且可能会抛出变量以查看它们是否包含你所期望的变量,那么你可以用更短的时间解决这个问题,而不是让我写这段:)

答案 1 :(得分:0)

好吧看起来我的评论有助于回答你的问题......这就是为那些后来想知道的人解决问题的原因。如果你接受这个作为答案,我们将不胜感激。

$username_sql_query =dbConnect()->prepare("UPDATE user SET username=:username WHERE username=:actual_username AND password=:actual_password");
$username_sql_query->bindParam(':username' ,$user_name);
$username_sql_query->bindParam(':actual_username' ,$_SESSION['username']);
$username_sql_query->bindParam(':actual_password' ,$actual_password );

当绑定参数OP时,使用'username'而不是':username'以及'actual_username'和'actual_password',而不是在它们之前加上冒号。

答案 2 :(得分:0)

现在它可以工作了,我在代码中遇到了很多错误,比如不包括:bindParam中的用户名

所以..现在我的代码看起来像这样,它可以工作......

if(isset($_POST['submit']))
{
    if(isset($_POST['actual_password']))
    {
        if(check_username($user_name) === true)
        {
           if(isset($_POST['username_radio_button']))
            {
            $username_sql_query =dbConnect()->prepare("UPDATE user SET username=:username WHERE username=:actual_username AND password=:actual_password");
            $username_sql_query->bindParam(':username' ,$user_name);
            $username_sql_query->bindParam(':actual_username' ,$_SESSION['username']);
            $username_sql_query->bindParam(':actual_password' ,$actual_password );
            if($username_sql_query->execute())
               {
                $user_info = "not a fail?";
               }
            }
        }
        else
        {
            $username_error = "fail";
        }
    }
}