代码之家  ›  专栏  ›  技术社区  ›  gametaker1985

致命错误:无法在/home/claymati/public_html/login中的写入上下文中使用函数返回值。php第28行

  •  0
  • gametaker1985  · 技术社区  · 2 年前

    直到一两天前,这段代码才正常工作。我是php新手,正在学习php 5(完成课程后,我打算重新学习所有内容)我现在一直遇到的错误是:致命错误:无法在/home/claymati/public\u html/login中的write context中使用函数返回值。php第28行

    <!doctype html>
        <?php
        ini_set( "display_errors", "on" );
        error_reporting( E_ALL | E_STRICT );
        ini_set( "include_path", "./includes" );
        include( "dbinfo.inc" );
        $cxn = mysqli_connect($host,$user,$passwd,$dbname)
                 or die ("couldn't connect to server");
        ?>
        
        <?php
        
         
        // Check if the user is already logged in, if yes then redirect him to welcome page
        if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
            header("location: stored.inc");
            exit;
        }
         
        // Define variables and initialize with empty values
        $username = $password = "";
        $username_err = $password_err = $login_err = "";
         
        // Processing form data when form is submitted
        if($_SERVER["REQUEST_METHOD"] == "POST"){
         
            // Check if username is empty
            if(empty(trim($_POST["username"]))){
                $username_err = "Please enter username.";
            } else{
                $username = trim($_POST["username"]);
            }
            
            // Check if password is empty
            if(empty(trim($_POST["password"]))){
                $password_err = "Please enter your password.";
            } else{
                $password = trim($_POST["password"]);
            }
            
            // Validate credentials
            if(empty($username_err) && empty($password_err)){
                // Prepare a select statement
                $sql = "SELECT id, username, password FROM users_login WHERE username = ?";
                
                if($stmt = mysqli_prepare($cxn, $sql)){
                    // Bind variables to the prepared statement as parameters
                    mysqli_stmt_bind_param($stmt, "s", $param_username);
                    
                    // Set parameters
                    $param_username = $username;
                    
                    // Attempt to execute the prepared statement
                    if(mysqli_stmt_execute($stmt)){
                        // Store result
                        mysqli_stmt_store_result($stmt);
                        
                        // Check if username exists, if yes then verify password
                        if(mysqli_stmt_num_rows($stmt) == 1){                    
                            // Bind result variables
                            mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
                            if(mysqli_stmt_fetch($stmt)){
                                if(password_verify($password, $hashed_password)){
                                    // Password is correct, so start a new session
                                    session_start();
                                    
                                    // Store data in session variables
                                    $_SESSION["loggedin"] = true;
                                    $_SESSION["id"] = $id;
                                    $_SESSION["username"] = $username;                            
                                    
                                    // Redirect user to welcome page
                                    header("location: stored.inc");
                                } else{
                                    // Password is not valid, display a generic error message
                                    $login_err = "Invalid username or password.";
                                }
                            }
                        } else{
                            // Username doesn't exist, display a generic error message
                            $login_err = "Invalid username or password.";
                        }
                    } else{
                        echo "Oops! Something went wrong. Please try again later.";
                    }
        
                    // Close statement
                    mysqli_stmt_close($stmt);
                }
            }
            
            // Close connection
            mysqli_close($cxn);
        }
        ?>
         
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Login</title>
            <link href="style.css" rel="stylesheet" type="text/css">
            <style>
                body{ font: 14px sans-serif; }
                .wrapper{ width: 360px; padding: 20px; }
            </style>
        </head>
        <body>
            <div class="wrapper">
                <h1>Login</h1><br>
                <p>Please fill in your credentials to login.</p><br>
        
                <?php 
                if(!empty($login_err)){
                    echo '<div class="alert alert-danger">' . $login_err . '</div>';
                }        
                ?>
        
                <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                    <div class="form-group">
                        <label>Username</label>
                        <input type="text" name="username" class="form-control <?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $username; ?>">
                        <span class="invalid-feedback"><?php echo $username_err; ?></span>
                    </div><br>  
                    <div class="form-group">
                        <label>Password</label>
                        <input type="password" name="password" class="form-control <?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?>">
                        <span class="invalid-feedback"><?php echo $password_err; ?></span>
                    </div>
                    <div class="form-group">
                        <input type="submit" class="btn btn-primary" value="Login">
                    </div>
                    <br>
                    <p>Don't have an account? Register Now </a>.</p>
                </form>
            </div>
        </body>
        </html>
    

    代码的受影响部分:

    <?php
    
    
    // Check if the user is already logged in, if yes then redirect him to welcome page
    if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
        header("location: stored.inc");
        exit;
    }
    
    // Define variables and initialize with empty values
    $username = $password = "";
    $username_err = $password_err = $login_err = "";
    
    // Processing form data when form is submitted
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    
        // Check if username is empty
        if(empty(trim($_POST["username"]))){
            $username_err = "Please enter username.";
        } else{
            $username = trim($_POST["username"]);
        }
    
        // Check if password is empty
        if(empty(trim($_POST["password"]))){
            $password_err = "Please enter your password.";
        } else{
            $password = trim($_POST["password"]);
        }
    

    我不确定如何修复这个错误,因为我还是个新手。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Ibrahim Esseddyq    2 年前

    我不确定您是否正在使用低于5.5的PHP版本,但如果您正在使用,您不能只是这样做,而是应该这样做:

    $username = trim($_POST["username"]);
    if(empty($username)){
    ...your code
    }
    

    if(trim($_POST["username"]) == false){
    ...your code
    }
    

    因为5.5以下版本中的空函数只支持变量