1

コード本体と関数として変数値を共有するのに問題があります。

この例では、使用されている場所のIDと一致する値を持つ画像をDBにアップロードします。

現在、を使用してURLから使用されている場所のIDを取得し、$_REQUESTそれを変数「mid」に書き込もうとしています。このIDを関数(functions2.phpに含まれています)に送信しますcreatethumnail、「mid」値は転送されません。何らかの理由で。

再作成するには:

  1. 移動します:http://www.students.bl.rdi.co.uk/stu26984/index.php
  2. ログイン:ユーザー名:テストパスワード:test123
  3. 私の場所に行く
  4. WalkaboutSFリンクをクリックします
  5. [ファイルの選択]ボタンを使用してファイルをアップロードしてみてください

以下はfunctions2.phpの全文です

<?php

function createThumbnail2($filename, $mid) {
    include 'base.php';
    require 'config.php';
    if(preg_match('/[.](jpg)$/', $filename)) {
        $im = imagecreatefromjpeg($path_to_image_directory . $filename);
    } else if (preg_match('/[.](gif)$/', $filename)) {
        $im = imagecreatefromgif($path_to_image_directory . $filename);
    } else if (preg_match('/[.](png)$/', $filename)) {
        $im = imagecreatefrompng($path_to_image_directory . $filename);
    }

    $ox = imagesx($im);
    $oy = imagesy($im);

    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

    $nm = imagecreatetruecolor($nx, $ny);

    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);

    if(!file_exists($path_to_thumbs_directory)) {
      if(!mkdir($path_to_thumbs_directory)) {
           die("There was a problem. Please try again!");
      } 
       }

    imagejpeg($nm, $path_to_thumbs_directory . $filename);
    //  $cookieUserx=$_SESSION['Username'];
    //  $checkCustidx=mysql_query("SELECT custid AS id from customers WHERE custUsername='".$cookieUserx."';");
    //  $rx=mysql_fetch_array($checkCustidx);
    //  $custidx=$rx['id'];
    //  $updateimage = mysql_query("UPDATE photos SET name = '".$filename."';")or die ('SQL Error: ' . mysql_error()); 
        $updateimage = mysql_query("INSERT INTO photos (NAME, markerid) VALUES('".$filename."', '".$mid."');")or die ('SQL Error: ' . mysql_error()); 
                   if($updateimage)  
            {  
                header("Location: /WalkaboutSF/viewplace.php?place_id=%20".$mid."");
            }  
            else  
            {  
                echo "<h1>Error</h1>";  
            }  

    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />';
    echo $tn;
}


?>

また、これを呼び出すコードは次のとおりです。

http://www.students.bl.rdi.co.uk/stu26984/viewplace.php?place_id=%20133

           <div id="insertphoto">      
            <?php
    require 'config.php';
    require 'functions2.php';
    $place_id = $_REQUEST['place_id'];
            $view_place2 = mysql_query("SELECT * FROM markers WHERE id = '$place_id'");
            $place2 = mysql_fetch_array($view_place2);
            $mid= $place2['id'];
            echo $mid;

        if(isset($_FILES['fupload'])) {

        if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) {
            $filename = $_FILES['fupload']['name'];
            $source = $_FILES['fupload']['tmp_name'];   
            $target = $path_to_image_directory . $filename;

        move_uploaded_file($source, $target);
        createThumbnail2($filename, $mid);      
    }
}
   ?>
    <h2>Add Photo</h2>
    <form enctype="multipart/form-data" action="<?php print $_SERVER['PHP_SELF'] ?>" method="post">
        <input type="file" name="fupload" />
        <input type="submit" value="Go!" />
    </form>   
            </div>
4

1 に答える 1

2

起こっている可能性のあることがいくつかあります。まず:

$place2 = mysql_fetch_array($view_place2);
$mid= $place2['id'];
echo $mid;

ここで設定されていると確信してい$midますか?クエリが行を返さなかった可能性はありますか?

ここに値があることが確実な場合は、次を確認してください。

function createThumbnail2($filename, $mid) {
    include 'base.php';
    require 'config.php';

の値を上書きしていませんbase.phpか?コードを次のように変更してみてください。config.php$mid

function createThumbnail2($filename, $mid) {
    echo "mid before includes = $mid<br />\n";
    include 'base.php';
    require 'config.php';
    echo "mid after includes = $mid<br />\n";

これにより、インクルードがローカル変数を踏みつけているかどうかがわかります。

編集:私は質問を回避したくありませんでしたが、あなたのコードはSQLインジェクションに対してオープンです。viewplace.php悪い値で呼び出すことで、データベースを簡単に消去できます。少なくとも、これを実行します。

$place_id = mysql_real_escape_string($_REQUEST['place_id']);

挿入ステートメントにも同じ問題があります。プリペアドステートメントの使用mysqliまたは使用を検討してください。PDO

編集2:コードが機能しない理由は、ここで機能している2つの異なるHTTPリクエストがあるためです。1つは最初のページを表示するためのもので、もう1つはアップロードフォームへのPOSTを処理するためのものです。

問題は2番目のリクエスト(POST)にあります。このコードのせいです:

<form enctype="multipart/form-data" action="<?php print $_SERVER['PHP_SELF'] ?>" method="post">

これはでIDを渡していません$_REQUEST['place_id']。その下に次の行を追加するだけです。

<input type="hidden" name="place_id" value=<?php echo HtmlspecialChars($_REQUEST['place_id']); ?>" />

place_idこれにより、フォームが送信されたときに、が2番目のリクエストに渡されます。

于 2013-03-25T00:35:11.547 に答える