繁体   English   中英

什么在我的PHP中导致内部服务器错误?

[英]What in my PHP is causing an internal server error?

我是PHP新手,需要一些帮助来找出我的member_update脚本出了什么问题。 我在一小时前就开始工作了,那是一团意大利面。 一旦我尝试通过使用类使其更紧凑和可维护,它便停止工作。 因此,我可以保证信息( $_POST['memberAction']$_FILES['pic']等)已正确提交给服务器,但是我对它的处理存在某种缺陷。 请帮助我弄清楚我在做什么错。

member_update.php

<?php

include "../classes.php";

$message = ''; 

$message .=  'Action: ' . $_POST['memberAction'] . '\n';
$message .=  'Name: ' . $_POST['fullname'] . '\n';
$message .=  'Title: ' . $_POST['title'] . '\n';
$message .=  'Biography: ' . $_POST['bio'] . '\n';
$message .=  'Sort order: ' . $_POST['sord'] . '\n';
$targetFileName = basename($_FILES['pic']['name']);
$targetFileNameAndPath = 'assets/' . $targetFileName;
$message .= 'Target file: ' . $targetFile . '\n';

TeamManager tm = new TeamManager();

$thisAction = $_POST['memberAction']; 

if ($thisAction == 'add')
{

    $addMemberResult = tm.addMember(new TeamManager::TeamMember ($_POST['fullname'], $_POST['title'], $_POST['bio'], $targetFileName) )

    if ($addMemberResult->succeeded)
    {
        $message .= "Successfully added member to list\n";

        if (move_uploaded_file($_FILES['pic']['tmp_name'], $targetFileNameAndPath))
        {
            $message .= "Successfully added " . $targetFileName . " to assets folder\n";        
        }
        else
        {
            $message .= "Encountered problem when trying to add " . $targetFileName . " to assets folder\n";
        }
    }
    else
    {
        $message .= ""
    }
}
elseif ($thisAction == 'update')
{
    // ... 
}
elseif ($thisAction == 'delete')
{
    // ...      
}
else 
{
    $message .= 'Didn\'t recognize action';
}

echo json_encode($message);

?>

classes.php

<?php

final class MySqlInfo
{
    const DBNAME = 'mydb';
    const USER = 'myuser';
    const PSSWD = 'something';
    const TEAMTABLENAME = 'somename';

    public getUser ( )
    {
        return self::USER;
    }

    public getPassword ( ) 
    {
        return self::PSSWD; 
    }
}

final class MethodResult
{

    public $succeeded; 
    public $message; 

    public MethodResult()
    {
        $succeeded = NULL; 
        $message = NULL;
    }
    public MethodResult ( $succeededInit, $messageInit )
    {
            $succeeded = $succeededInit;
            $message = $messageInit;
    }   

}

final class AllySite 
{

    const ROOTURL = 'http://mysite/mysubsite';

    function getRootUrl()
    {
        return self::ROOTURL;
    }


}

final class TeamManager
{

    private $dbcon;

    public function TeamManager ( )
    {
        $dbcon = mysqli_connect('localhost', MySqlInfo.getUser(), MySqlInfo::getPassword());
        $dbcon->select_db(MySqlInfo::DBNAME);
        // need to add error handling here later
    }

    final public class TeamMember 
    {
        public $name; // team member name
        public $title; // team member title
        public $bio; // team member bio
        public $sord; // team member sort order
        public $picfn; // team member profile picture file name
    }

    public function addMember ( TeamMember M )
    {
        if (self::$dbcon->connect_error)
        {
            return new MethodResult(false, 'Not connected to database');
        }

        $q = "INSERT INTO" . MySqlInfo::TEAMTABLENAME . "( " . implode( ',' array(M->name, M->title, M->bio, M->sord, M->picfn) ) . ") VALUES ('" . implode('\',\'', array($_POST['fullname'], $_POST['title'], $_POST['bio'], $_POST['sord'], $targetFileName)) . "')";
        // ^ query for inserting member M to the database

        if (!mysqli_query($con, $q))
        {
            return new MethodResult(false, 'Query to insert new team member failed');
        }

        return new MethodResult(true, 'Successfully added new member' . M->name);
    }
}

?>

这两个文件都有语法问题,请参见代码中的内联注释。 我尝试修复大多数问题,但这并不意味着它将成为有效的代码。

classes.php

<?php

final class MySqlInfo
{
    const DBNAME = 'mydb';
    const USER = 'myuser';
    const PSSWD = 'something';
    const TEAMTABLENAME = 'somename';

    //missing "function"
    public function getUser ( )
    {
        return self::USER;
    }
    // missing "function"
    public function getPassword ( ) 
    {
        return self::PSSWD; 
    }
}

final class MethodResult
{

    public $succeeded; 
    public $message; 

    // you are declaring the same function below again
    /*
    public function MethodResult()
    {
        $succeeded = NULL; 
        $message = NULL;
    }
    */
    public function MethodResult ( $succeededInit, $messageInit )
    {
            $succeeded = $succeededInit;
            $message = $messageInit;
            // if you are trying to set the public properties then do this
            // $this->message = $messageInit;
    }   

}

final class AllySite 
{

    const ROOTURL = 'http://mysite/mysubsite';

    function getRootUrl()
    {
        return self::ROOTURL;
    }


}

final class TeamManager
{

    private $dbcon;

    public function TeamManager ( )
    {
        $dbcon = mysqli_connect('localhost', MySqlInfo.getUser(), MySqlInfo::getPassword());
        $dbcon->select_db(MySqlInfo::DBNAME);
        // need to add error handling here later
    }

    // final public class ? plus you can't define a class inside another class

    /*
    final public class TeamMember 
    {
        public $name; // team member name
        public $title; // team member title
        public $bio; // team member bio
        public $sord; // team member sort order
        public $picfn; // team member profile picture file name
    }
    */

    // missing $ operator for the M parameter
    public function addMember ( TeamMember $M )
    {
        if (self::$dbcon->connect_error)
        {
            return new MethodResult(false, 'Not connected to database');
        }

        //added a comma before array, also M-> all need $
        $q = "INSERT INTO" . MySqlInfo::TEAMTABLENAME . "( " . implode( ',', array($M->name, $M->title, $M->bio, $M->sord, $M->picfn) ) . ") VALUES ('" . implode('\',\'', array($_POST['fullname'], $_POST['title'], $_POST['bio'], $_POST['sord'], $targetFileName)) . "')";
        // ^ query for inserting member M to the database

        if (!mysqli_query($con, $q))
        {
            return new MethodResult(false, 'Query to insert new team member failed');
        }

        //added $M
        return new MethodResult(true, 'Successfully added new member' . $M->name);
    }
}

?>

member_update.php

<?php

include "../classes.php";

$message = ''; 

$message .=  'Action: ' . $_POST['memberAction'] . '\n';
$message .=  'Name: ' . $_POST['fullname'] . '\n';
$message .=  'Title: ' . $_POST['title'] . '\n';
$message .=  'Biography: ' . $_POST['bio'] . '\n';
$message .=  'Sort order: ' . $_POST['sord'] . '\n';
$targetFileName = basename($_FILES['pic']['name']);
$targetFileNameAndPath = 'assets/' . $targetFileName;
$message .= 'Target file: ' . $targetFile . '\n';

$tm = new TeamManager();

$thisAction = $_POST['memberAction']; 

if ($thisAction == 'add')
{

    // is TeamMember a private property, a method ..., also missing ;
    $addMemberResult = $tm->addMember(new TeamManager::$TeamMember ($_POST['fullname'], $_POST['title'], $_POST['bio'], $targetFileName) );

    if ($addMemberResult->succeeded)
    {
        $message .= "Successfully added member to list\n";

        if (move_uploaded_file($_FILES['pic']['tmp_name'], $targetFileNameAndPath))
        {
            $message .= "Successfully added " . $targetFileName . " to assets folder\n";        
        }
        else
        {
            $message .= "Encountered problem when trying to add " . $targetFileName . " to assets folder\n";
        }
    }
    else
    {
        //missing ;
        $message .= "";
    }
}
elseif ($thisAction == 'update')
{
    // ... 
}
elseif ($thisAction == 'delete')
{
    // ...      
}
else 
{
    $message .= 'Didn\'t recognize action';
}

echo json_encode($message);

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM