0

我正在尝试从函数返回一个变量。我有下面的函数,它将一个 postid 插入到数据库中。我需要将 postid 的值返回到另一个页面。

forum.php - 函数在哪里。

function newTopic(){
    // Get the POST data
    global $ir;

    $postid = mysql_insert_id();

    mysql_query("UPDATE forum_topics SET post_id='$postid' WHERE topic_id='$topicid'");

    // No error found and the update was succesful - Return success!            
    return 100;
    return $postid;
}

newtopic.php - 我需要$postid变量的地方。

if($_POST)
{     
    $newTopic = $forum->newTopic();    

        /*
         * Return codes:
         * 100: Success
         */       
    switch($newTopic)
    {
        //If no error = success.    
        case 100:
            $success = 'You have successfully created the topic.';
            $issuccess = 1;
            $stop = true;
        break;
    }

    $checkerror = $error; 
    $checksuccess = $success;

} 

if($checksuccess){ 
    $contents.="
    ".alert("success","$success")."";
    refresh("3","/forum/t$id-$postid");
}

如您所见,我正在尝试使用函数 newTopic() 中的 $postid 变量。虽然, $postid 变量是空的。

如何从位于 forum.php 的函数 newTopic.php 中获取值到 newtopic.php?

4

4 回答 4

4

当您使用过

return 100;

你的代码永远不会看到

return $postid;

您可以使用此代码返回

return array("code"=>"100","postid"=>$postid);

现在在 new_topic.php 中使用如图所示的代码

if($_POST)
{

    $newTopic = $forum->newTopic();


        /*
         * Return codes:
         * 100: Success
         */

    switch($newTopic['code'])
    {

            //If no error = success.    
            case 100:
                $success = 'You have successfully created the topic.';
                $issuccess = 1;
                $stop = true;
            break;
    }

    $checkerror = $error; 
    $checksuccess = $success;

} 

        if($checksuccess){ 
        $contents.="
        ".alert("success","$success")."";
        refresh("3","/forum/t$id-$newTopic['postid']");
        }
于 2013-09-07T10:05:40.030 回答
1

您的代码看起来在返回 $postid 变量之前返回值 100。错了。您的代码将在第一次返回时退出该函数。

注释 "//return 100;"行

或返回一个数组。你不能像你一样返回两个值。而不是做

 return 100;
 return $postid;

 //return 100;
 return array("successs"=>100,"id"=>$postid);

然后使用您的 $newTopic 变量如下:

switch($newTopic['success'])

在其他任何地方使用 postId

$newTopic['id']
于 2013-09-07T10:02:48.527 回答
1

尝试参考下面的代码

function newTopic(&$postid){
    // Get the POST data
    global $ir;

    $postid = mysql_insert_id();

    mysql_query("UPDATE forum_topics SET post_id='$postid' WHERE topic_id='$topicid'");

    // No error found and the update was succesful - Return success!            
    return 100;
}

....... //some codes
$postid = null;
newTopic($postid);
$my_postId = $postid; //Now you have your post ID 

或者在你存在的代码像

if($_POST)
{ 
    $last_postid = null;    
    $newTopic = $forum->newTopic($last_postid );    

        /*
         * Return codes:
         * 100: Success
         */       
    switch($newTopic)
    {
        //If no error = success.    
        case 100:
            $success = 'You have successfully created the topic.';
            $issuccess = 1;
            $stop = true;
            $postid = $last_postid;
        break;
    }

    $checkerror = $error; 
    $checksuccess = $success;

} 

if($checksuccess){ 
    $contents.="
    ".alert("success","$success")."";
    refresh("3","/forum/t$id-$postid");
}

编辑:调用时间传递引用固定。

于 2013-09-07T10:08:56.117 回答
0

如果你想返回两个值,你不能只写两个返回。

有几个选项可以返回更多值。一种是使用数组:

return array(100, $postId);

list($status, $postId) = $forum->newTopic();

您还可以按照 sd 的建议使用关联数组。

但是,由于您的一个变量仅包含状态,因此您也可以在操作失败的情况下使用异常。

于 2013-09-07T10:09:03.220 回答