-1

このコードを実行して画像をロードし、データベースに保存すると、保存されません。

$image=$_POST['image'];

$img = $_FILES['image']['name'];

if($img)
{
    $imgnew = date("YmdHis").".".end(explode('.',$img));
    move_uploaded_file($_FILES['image']['tmp_name'],$img_src.$imgnew);
    $sql = "UPDATE news SET `image` = '".$imgnew."' WHERE `id` = '".$id."'";
    $result = mysql_query($sql);                  
}

私のフォームコードは

<input type="file" name="image" value="<?php echo $row['image']; ?>" />
4

2 に答える 2

3
  1. exit()クエリを実行する前に呼び出します
  2. 余分なブラケットがあります(これはおそらくタイプミスまたは別の問題です)
于 2012-06-15T17:44:19.487 に答える
1

何かを「実行」する関数の結果を確認することが重要です。あなたはそう仮定して前進する前にそれが実際に行われたことを確認したいです。両方ともmove_uploaded_file失敗するmysql_query 可能性があります。

その場合、戻り値(通常はブール値FALSE)で通知されます。そのリターンをキャプチャし、適切に反応します。そうすれば、何か問題が発生した場合でも、頭を悩ませて理由を理解する必要はありません。

$img_src = '/assuming/some/path/';
$img = false;
$error = false;
if (
    isset($_FILES['image']) && 
    $_FILES['image']['error'] != 4
) {
    $img = $_FILES['image'];
    switch ($img['error']) {
        case '1':
        case '2':
        case '3':
            $error = 'The uploaded file exceeds the maximum file size.';
            break;
        case '6':
        case '7':
        case '8':
            $error = 'Server error.  Please try again later.';
            break;
    }
    if (!$error) {
        $imgnew = date("YmdHis").".".end(explode('.',$img['name']));
        $result = move_uploaded_file($img['tmp_name'],$img_src.$imgnew);
        if (!$result)
            $error = 'File error while processing upload';
    }
    if (!$error) {
        $sql = "UPDATE news SET `image` = '".$imgnew."' WHERE `id` = '".$id."'";
        $result = mysql_query($sql);
        if (!$result)
            $error = mysql_error();
    }
}

// do something useful with the error message, preferrably not this
if ($img && $error)
die('There was a problem updating the image: '.$error);

ドキュメンテーション

PHPのmove_uploaded_file-http: //us2.php.net/manual/en/function.move-uploaded-file.php

PHPのmysql_query-http: //us2.php.net/manual/en/function.mysql-query.php

于 2012-06-15T17:57:47.260 に答える