1

私は次のようなphpスクリプトを持っています:

function addPost(BlogPost $item, $tags) {
        $connection = mysql_connect('localhost', '***', '***') or die(mysql_error());
        mysql_select_db('jschaible1') or die(mysql_error());

        $queryString = "insert into BlogPost values ( null, '" . $item->Title . "', '" . $item->Body . "', " . "now());";

        $result = mysql_query($queryString) or die(mysql_error());

        $dbResult = mysql_query('select * from blogpost where Title = "' . $item->Title . '";') or die(mysql_error());
        while ($row = mysql_fetch_array($dbResult)) {
            $tableID = $row['BlogPostID'];
        }

        foreach($tags as $t) {
            $queryString = "insert ignore into Tag values('" . strtolower($t) . "');";
            mysql_query($queryString) or die(mysql_error());

            $queryString = "insert into blogposttag values (" . $tableID . ", '" . strtolower($t) . "');";
            mysql_query($queryString) or die(mysql_error());
        }

        echo $connection;
        mysql_close($connection) or die(mysql_error());
    }

関数は次のように呼び出されます。

<?php
    session_start();

    $errors = '';

    if (!isset($_SESSION['dadfg6d5f6df54']))
        header('Location:admin.php');
    else {
        include('Classes.php');
        include('mySql.php');
        include('utils.php');

        if(isset($_POST['Submit'])) {
            if ($_POST['Title'] == '') {
                $errors = 'Post must have a title!';
            }
            else if ($_POST['PostBody'] == '') {
                $errors = 'Post must be something!';
            }
            else if (strlen($_POST['PostBody']) < 10) {
                $errors = "Write something substantial, c'mon!";
            }
            else if ($_POST['Tags'] == '') {
                $errors = "At least one tag must be entered";
            }
            else {
                $newPost = new BlogPost(NULL, sanitize($_POST['Title']), sanitize($_POST['PostBody']), NULL);

                $newPost->Title = addEmoticons($newPost->Title);
                $newPost->Body = addEmoticons($newPost->Body);

                $tags = str_replace(',', '', $_POST['Tags']);
                $tags = str_replace(';', '', $tags);
                $tags = explode(' ', $tags);

                error_reporting(E_ALL); ini_set('display_errors', 1);
                addPost($newPost, $tags) or die();

                $errors = 'Post added successfully';
            }
        }
    }
?>

mysql_close()に到達すると、ページの実行が停止し、空白のページが表示されます。これは本当にイライラします。なぜそれが起こっているのか、特に前の行のエコーが「リソースID#6」をどのように出力するかを見ると、まったくわかりません。エラーメッセージは表示されず、空白のページだけが表示されます。助けてください!

4

1 に答える 1

2

関数には戻り値がありません。したがって、NULLどちらが「偽の」値として評価されるかを返します。それに続いてor die()呼び出しを行うため、誤った評価によってor die()スクリプトがトリガーされ、終了します。

// Don't do this:
addPost($newPost, $tags) or die();

// Do this:
addPost($newPost, $tags);

関数の最後にできますがreturn TRUE、追加後の成功または失敗に基づいて値を返したい場合を除いて、これは完全に不要です。あなたがそれを持っている方法では、それdie()はただ過度の害を引き起こしています。関数内の潜在的な障害ポイントはすべて、エラー時にスクリプトをすでに終了しているため、を返す大きな目的はありませんTRUEdie()関数呼び出しの後に削除するだけです。

于 2012-10-31T00:07:05.503 に答える