0

プロファイルを編集しようとしていますが、画像に問題があります。

プロファイルを作成すると、画像を正常にアップロードでき、プロファイルを表示したときに画像を表示できます。

ただし、プロファイルを編集するときに、名前、年齢などの値を変更しない場合、これらは変更されていない/元の値でデータベースに書き戻されます。

残念ながら、画像が変更されていない場合、編集ボタンをクリックすると、空白の値で上書きされます。

私が求めているのは、次のように言う方法です。

$FILES[]が空の場合{

画像の詳細を更新しない

}

そうしないと

{{

画像の詳細を更新

}

私の現在のコードは次のようになります。

    // 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();
        }

私はこのようなことをすることができると思いましたが、それは機能していません:

if (isset($_FILES['upload']) && $_FILES['upload'] <> '') 
{
$s->bindValue(':filename',  $uploadname);
$s->bindValue(':mimetype',   $uploadtype);
$s->bindValue(':filedata',   $uploaddata);
}
else
{
$s->bindValue(':filename',  $filename);
$s->bindValue(':mimetype',   $mimetype);
$s->bindValue(':filedata',   $filedata); 
}

すべての助けに感謝します。

ありがとう

4

2 に答える 2

1
if (isset($_FILES['upload']['error']) && $_FILES['upload']['error'] == UPLOAD_ERR_OK) {
    // a file has been uploaded
}

次に、アップロードによるセキュリティの脅威を参照してください。

于 2012-09-03T11:16:20.993 に答える
1

コードのメインアルゴリズム

if (isset($_POST['action']) and $_POST['action'] == 'Edit')
{ 

    if (!empty($_FILES) and is_uploaded_file($_FILES['upload']['tmp_name'])) {
       $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";
    } else {
        $sql = "UPDATE player SET
                name = :name,
                age = :age,
                position = :position,
                height = :height,
                weight = :weight,
                satscore = :satscore,
                gpa = :gpa,
                email = :email
                WHERE id = :id";
    }

    try {
        //skipped

        if (!empty($_FILES) and is_uploaded_file($_FILES['upload']['tmp_name'])) {
            $s->bindValue(':filename',  $uploadname);
            $s->bindValue(':mimetype',   $uploadtype);
            $s->bindValue(':filedata',   $uploaddata);
        }

    } catch(PDOException $e) {
        //skipped
    }
}

http://www.php.net/manual/en/function.is-uploaded-file.php

于 2012-09-03T11:17:12.803 に答える