サポート » プラグイン » uodate_optionでDBの上書きができない。

  • 解決済 tk9

    (@tk9)


    以前、こちらで質問させていただいていたのですが、ちょっと問題がかわっておきたので
    オリジナル画像アップローダプラグインを作成したい
    改めて質問させてください。

    先にやりたいことを記載します。
    1.オリジナルの画像アップローダプラグインで画像をする
    2.アップロードした画像はプラグインと同じディレクトリ内に保存する
    3.アップロードした画像のパスをupdate_optionでDBに登録する。

    1.2ともにOKなのですが、3だけうまくいきません。
    下記にソース記載します。

    function image_upper_setting(){
    $dir = plugin_dir_path(__FILE__);
    if($_SERVER[“REQUEST_METHOD”]==”POST” && !empty ($_POST)){
    $action = $_POST[“action”];
    if($action == “upload”){
    $pattern = “/^[a-z0-9A-Z\-_]+\.[a-zA-Z]{3}$/”;
    $upfile = $_FILES[“image”][“name”];
    if(!empty ($upfile)){
    if(!preg_match($pattern,$upfile)){
    $er[“jp”] = “アップロードエラー:”;
    }
    $ext=substr($upfile,-3);
    if($ext != “jpg” && $ext != “png”){
    $er[“image”] = “アップロードエラー”;
    }
    }else{
    echo “ファイルをアップしてください”;
    }
    if(empty ($er)){
    move_uploaded_file($_FILES[“image”][“tmp_name”], $dir.$upfile);
    }
    }
    }
    ?>
    <form action=”” method=”post”>
    <table>
    <?php
    $dir_url = plugin_dir_url(plugin_basename( __FILE__ ));
    $dir = plugin_dir_path(__FILE__);
    $filelist = scandir($dir);
    foreach($filelist as $file):
    if(stristr($file, jpg) || stristr($file, png) && !is_dir($file)):
    $filepath = $dir_url.$file;
    ?>
    <tr>
    <td><img id=”para_img01″ class=”para_images” src=”<?php echo $filepath; ?>” width=”150″ height=”150″ alt=”Not Image” /></td>
    </tr>
    <?php endif; endforeach; ?>
    </table>
    <p><input type=”submit” value=”画像を削除する” /><?php echo $error?></p>
    <input type=”hidden” name=”action” value=”delete” />
    </form>
    <form action=”” method=”post” enctype=”multipart/form-data”>
    <input type=”file” name=”image” />
    <input type=”hidden” name=”action” value=”upload” />
    <input type=”hidden” name=”dbup” value=”<?php echo $filepath; ?>”/>
    <?php
    update_option(‘exsample’,$_POST[‘dbup’]);
    ?>
    <input type=”submit” value=”アップロードする” />

    <div class=”errors”>
    <?php if(!empty ($er[“jp”])) echo $er[“jp”]; ?>
    <?php if(!empty ($er[“image”])) echo $er[“image”]; ?>
    </div>
    <?php wp_nonce_field(); ?>
    <?php check_admin_referer(); ?>
    </form>
    <?php
    }

    具体的にはアップロードした画像をその場で表示して、DBにパス(URL)を格納するという処理なんですが、DBにパス(URL)を格納部分がどうしても空の値がいってしまいます。

    $filepath = $dir_url.$file;(画像への絶対パス)
    にて絶対パスにしています。

    $filepathにて画像の表示はできており、ブラウザでソースをみても
    input name=”dbup”のvalueに問題なく表示されています。

    ・試したこと
    ————————————
    ・<input type=”hidden” name=”dbup” value=”<?php echo $filepath; ?>”/>の
    <input type=”hidden” name=”dbup” value=”テスト”/>にかえてみました。
    これはOKでした。
    ・<?php echo gettype($filepath); ?>で型を出力>stringなので問題ないかと。

    なぜ、DBにだけ登録できないのか不思議です
    ご教授いただけましたら助かります。

    また、別の対処策として$filepathをテンプレート内にて(index.php)にて使用する方法などもあれば教えていただきたいです。

    よろしくお願いいたします!!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このままの記述だとこのページにアクセスする度にUpdateOptionを実行しているようにみえます。
    ファイルをアップロードして$_POST[‘dbup’]に値があるときだけではなく空の時も上書きしているのでアップロードページを表示する度に空で上書きされているのではないでしょうか?

    トピック投稿者 tk9

    (@tk9)

    gogoweb様

    アドバイスありがとうございます!
    できました!

    アドバイスを参考に
    $filepath = $dir_url.$fileをforeach文から外にだして、下記のようにしたところうまくいきました。
    if($filepath != “”){
    update_option(‘exsample’,$filepath);
    }

    ありがとうございますー!
    本当にたすかりましたー。

    トピック投稿者 tk9

    (@tk9)

    解決しましたので、解決済みにさせていただきます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「uodate_optionでDBの上書きができない。」には新たに返信することはできません。