2013-03-24 48 views
1

我無法在我的主體代碼和函數之間共享變量值。無法分享PHP變量

對於這個例子,我想上傳一個圖像到數據庫,其值與正在使用的地方的ID相匹配。

我現在搶使用$_REQUEST的URL使用該場所的ID,並在嘗試寫一個變量「中」,然後我發到createthumnail功能(包含在functions2.php),但'中'由於某種原因,價值不會轉移。

要重新創建:

  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> 
+0

你嘗試在你的函數中打印'$ mid'嗎?它裏面有什麼? – Cfreak 2013-03-24 22:45:16

+1

您可能需要查看文件擴展名['pathinfo($ file,PATHINFO_EXTENSION)'](http://php.net/manual/en/function.pathinfo.php)。比使用'preg_match'清潔得多很多 – 2013-03-24 22:46:48

+0

我在這個頁面上輸入了一個回顯,值是'3' http://www.students.bl.rdi.co.uk/stu26984/viewplace.php?place_id=% 203 – 2013-03-24 22:48:17

回答

2

有可能被正在進行的幾件事情。首先:

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

你確定$mid在這裏設置?查詢是否可能返回沒有行?

如果你確定它有一個價值在這裏,然後檢查:

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

你肯定base.phpconfig.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']); 

您的insert語句具有相同的問題。使用mysqliPDO查看已準備好的語句。

編輯2:你的代碼不工作的原因是因爲有2個不同的HTTP請求在這裏工作:一個顯示初始頁面和一個處理POST到上傳表單。

問題出在第二個請求(POST)上。此代碼是:

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

這不是通過$_REQUEST['place_id']的ID。只需添加這條線之下是一個:

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

這將通過place_id到第二請求,提交表單時。

+0

加頁?真? MySQL_real_escape_string是去那裏的方法,如果他們不打算使用MySQLi或PDO – 2013-03-25 00:40:59

+0

謝謝Cal,但仍然沒有運氣。 – 2013-03-25 00:42:52

+0

假設數據庫是Latin-1或UTF-8,它絕對沒有區別。這個代碼的錯誤遠遠大於只是轉義該變量。 – Cal 2013-03-25 00:43:00