0

まとめているサイトに問題があります。

問題が何であるかは理解していますが、修正方法がわかりません。

私が持っているのはプロフィールサイトで、サイトに写真を追加しています。

ここで、プロファイルの編集に入るときに、プロファイルの画像を指定しない場合、$ FILE []配列は空であるため、データベースに空白の値が入力され、基本的に写真が削除されます。

私は次のようなことをしたい:

if $uploadfile = " " DO NOT WRITE ANYTHING TO THE DB.

ご存知のとおり、$ uploadfile = $ _FILES ['upload'] ['tmp_name'];

私のコードは次のようになります:

if (isset($_POST['action']) and $_POST['action'] == 'upload')
{
  $uploadfile = $_FILES['upload']['tmp_name'];
  $uploadname = $_FILES['upload']['name'];
  $uploadtype = $_FILES['upload']['type'];
  $uploaddata = file_get_contents($uploadfile);
}

そして編集コードはこのように見えます

    // EDIT A PLAYER PROFILE

    if (isset($_POST['action']) and $_POST['action'] == 'Edit' )
    {
        include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
        try
        {
            // $sql = 'SELECT id, name, age, position, height, weight, satscore, gpa FROM player WHERE id = :id';
            $sql = 'SELECT player.id, player.name AS name, age, position, height, weight, previousclubs.id AS previousclubsid, GROUP_CONCAT(distinct previousclubs.name) previousclubs, 
                satscore, gpa, GROUP_CONCAT(distinct link) link, email, filename, mimetype, filedata
                FROM player INNER JOIN playerpreviousclubs
                    ON player.id = playerid
                INNER JOIN previousclubs
                    ON previousclubid = previousclubs.id
                INNER JOIN links
                    ON links.playerid = player.id
                WHERE player.id = :id';
            $s = $pdo->prepare($sql);
            $s->bindValue(':id', $_POST['id']);
            $s->execute();
        }
        catch (PDOException $e)
        {
            $error = 'Error fetching profile details.' . $e->getMessage();
            include 'error.html.php';
            exit();
        }

        $row = $s->fetch();
        $pageTitle = 'Edit Profile';
        $action = 'editform';
        $name = $row['name'];
        $age = $row['age']; 
        $position = $row['position'];
        $height = $row['height'];
        $weight = $row['weight'];
        $satscore = $row['satscore'];
        $gpa = $row['gpa'];
        $previousclubs = $row['previousclubs'];
        $previousclubsid = $row['previousclubsid'];
        $link = $row['link'];
        $email = $row['email'];
        $filename = $row['filename'];
        $mimetype = $row['mimetype'];
        $filedata = $row['filedata'];
        $id = $row['id'];
        $button = 'Update Profile';

        include 'addplayerprofile.html.php';
        exit();
    }

    if (isset($_GET['editform']))
    {
        include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';

        // UPDATE MAIN PLAYER PROFILE DETAILS
        try
        {
            $sql = "UPDATE player SET
                name = :name,
                age = :age,
                position = :position,
                height = :height,
                weight = :weight,
                satscore = :satscore,
                gpa = :gpa,
                email = :email,
                    filename = :filename,
                    mimetype = :mimetype,
                    filedata = :filedata
                WHERE id = :id";
            $s = $pdo->prepare($sql);
            $s->bindValue(':id', $_POST['id']);
            $s->bindValue(':name', $_POST['name']);
            $s->bindValue(':age', $_POST['age']);
            $s->bindValue(':position', $_POST['position']);
            $s->bindValue(':height', $_POST['height']);
            $s->bindValue(':weight', $_POST['weight']);
            $s->bindValue(':satscore', $_POST['satscore']);
            $s->bindValue(':gpa', $_POST['gpa']);
            $s->bindValue(':email', $_POST['email']);
                    $s->bindValue(':filename',  $uploadname);
                    $s->bindValue(':mimetype',   $uploadtype);
                    $s->bindValue(':filedata',   $uploaddata);
            $s->execute();
        }
        catch (PDOException $e)
        {
            $error = 'Error editing player profile main details.' . $e->getMessage();
            include 'error.html.php';
            exit();
        }

        // UPDATE PREVIOUS CLUBS
        try
        {
            $sql = 'UPDATE previousclubs SET
                name = :previousclubs
                WHERE id = :previousclubsid';
            $s = $pdo->prepare($sql);
            $s->bindValue(':previousclubs', $_POST['previousclubs']);
            $s->bindValue(':previousclubsid', $_POST['previousclubsid']);
            $s->execute();
        }
        catch (PDOException $e)
        {
            $error = 'Error editing player previous clubs.' . $e->getMessage();
            include 'error.html.php';
            exit();
        }   

header('Location: .');
exit();
}

ヘルプやガイダンスをありがとう。

4

2 に答える 2

0

確かではありませんが、ファイルがアップロードされたことを確認したい場合は、最初の行を次のように置き換えることができます。

if (isset($_POST['action']) && $_POST['action'] == 'upload' && isset($_FILES['upload']))

または、DB の更新とは別に通常どおりコードを実行する場合は、次のようにします。

if (isset($_POST['action']) && $_POST['action'] == 'upload') {
    // Some code
    if (isset($_FILES['upload'])) {
        // Database Update
    }
}
于 2012-09-01T22:52:51.250 に答える
0

ifそこに簡単なステートメントを入れるだけです:

try
    {
        $photo_string = (isset($uploadfile)) ? ",
                filename = :filename,
                mimetype = :mimetype,
                filedata = :filedata" : null;

        $sql = "UPDATE player SET
            name = :name,
            age = :age,
            position = :position,
            height = :height,
            weight = :weight,
            satscore = :satscore,
            gpa = :gpa,
            email = :email
            WHERE id = :id $photo_string";
        $s = $pdo->prepare($sql);
        $s->bindValue(':id', $_POST['id']);
        $s->bindValue(':name', $_POST['name']);
        $s->bindValue(':age', $_POST['age']);
        $s->bindValue(':position', $_POST['position']);
        $s->bindValue(':height', $_POST['height']);
        $s->bindValue(':weight', $_POST['weight']);
        $s->bindValue(':satscore', $_POST['satscore']);
        $s->bindValue(':gpa', $_POST['gpa']);
        $s->bindValue(':email', $_POST['email']);
        if (isset($uploadfile)) {
                $s->bindValue(':filename',  $uploadname);
                $s->bindValue(':mimetype',   $uploadtype);
                $s->bindValue(':filedata',   $uploaddata);
        }
        $s->execute();
    }
于 2012-09-01T22:49:08.823 に答える