无法共享PHP变量

时间:2013-03-24 22:43:21

标签: php variables

我无法在我的主体代码和函数之间共享变量值。

对于此示例,我想将图像上传到数据库,其值与正在使用的地点的ID相匹配。

我目前使用$_REQUEST从URL获取正在使用的地点的ID,并尝试将其写入变量'mid',然后将其发送到createthumnail函数(包含在< strong> functions2.php ),但 'mid' 值由于某种原因不会传输。

重新创建:

  1. 转到:http://www.students.bl.rdi.co.uk/stu26984/index.php
  2. 登录:用户名:测试密码:test123
  3. 转到我的位置
  4. 点击WalkaboutSF链接
  5. 尝试通过“选择文件”按钮上传文件
  6. 以下是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>
    

1 个答案:

答案 0 :(得分: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']);

您的插入语句具有相同的问题。请研究使用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传递给第二个请求。