Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的PHP中,什么导致了内部服务器错误?_Php_Ajax_Oop_Post - Fatal编程技术网

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

在我的PHP中,什么导致了内部服务器错误?,php,ajax,oop,post,Php,Ajax,Oop,Post,我是PHP新手,需要一些帮助来找出我的member\u update脚本有什么问题。我一小时前就让它工作了,当时它是一团意大利面条。当我试图通过使用类使它更加紧凑和可维护时,它就停止工作了。因此,我可以保证信息($\u POST['memberAction'],$\u文件['pic'],等等)正确地提交到服务器,但我对它的处理存在某种缺陷。请帮我找出我做错了什么 member_update.php <?php include "../classes.php"; $message = '

我是PHP新手,需要一些帮助来找出我的
member\u update
脚本有什么问题。我一小时前就让它工作了,当时它是一团意大利面条。当我试图通过使用类使它更加紧凑和可维护时,它就停止工作了。因此,我可以保证信息(
$\u POST['memberAction']
$\u文件['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);
    }
}

?>
<?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);

?>

“停止工作”作为诊断是无用的。如果它起作用,你就不会在这里了。您需要解释这是如何工作的。@MarcB正在调用我的AJAX对象的
failure
回调函数。方法
member\u update
在我的浏览器的网络预览部分显示为红色,它表示
此请求没有可用的预览
。我不能重载
MethodResult
的构造函数。首先确保在所有语句的末尾都放上分号,然后在变量前面添加
$
符号,然后正确声明函数,依此类推。。然后查看是否可以重载内容:))如果希望函数获得可选数量的参数或使用默认值执行,请执行此操作
public function MethodResult($succeededInit=NULL,$messageInit=NULL)
还可以查看我对类属性和
$this->属性的编辑