我收到此错误
你可以帮我解决这个问题吗?致命错误:第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
答案 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";
}
}
}