在特定页面上显示图片

时间:2013-09-21 02:15:38

标签: php image upload

我想让用户上传图片,并仅在他们刚创建的活动页面上显示他们上传的图片。为此,我在PHP中有一个数据库,创建了所有事件。每个事件都有一个25个字符的随机密钥,以使它们成为唯一。

我的问题是,我尝试使用随机密钥(称为“MomentEvent”)在正确的事件中上传图片,但它总是只在一个事件中更新,这是列表中的第一个事件。

那么,任何想法如何使用MomentEvent键在正确的事件中上传图片?

以下页面是图片转换为缩略图并在表格中更新的地方,第二页是图片应该出现的位置。

ajax_image.php

<?php
include('db.php');
 session_start();
 $session_id=$_SESSION['id']; // Or Session ID
 $session_MomentEvent=$_SESSION['MomentEvent']; // Or Session ID

 $actual_image_names = time().substr($txt, 9).".".$ext;
 $t_width = 450; // Maximum thumbnail width
 $t_height = 150; // Maximum thumbnail height
 $new_name = "$actual_image_names".$session_MomentEvent.".jpg"; // Thumbnail image name
 $path = "images/";

 if(isset($_GET['t']) and $_GET['t'] == "ajax"){
     extract($_GET);
     $ratio = ($t_width/$w); 
     $nw = ceil($w * $ratio);
     $nh = ceil($h * $ratio);
     $nimg = imagecreatetruecolor($nw,$nh);
     $im_src = imagecreatefromjpeg($path.$img);
     imagecopyresampled($nimg,$im_src,0,0,$x1,$y1,$nw,$nh,$w,$h);
     imagejpeg($nimg,$path.$new_name,90);
     mysql_query("UPDATE users_event SET image_small='$new_name' WHERE MomentEvent='$session_MomentEvent'");
     echo $new_name."?".time();
     exit();
 }
 ?>

show_picture.php

<?php
    include('base.php');

    //We check if the users ID is defined
    if(isset($_GET['MomentEvent']))
    {
        $MomentEvent = $_GET['MomentEvent'];
        //We check if the user exists
        $sql = "select ID, TitreEvent, DescriptionEvent, LieuEvent, image_small from users_event where MomentEvent='$MomentEvent'"; 
        $dn = mysql_query($sql);
        if(mysql_num_rows($dn)>0)
        {
            $dnn = mysql_fetch_array($dn);
            //We display the user datas
            { // <---- EDITOR: WHAT IS THAT ? You wanted to put a closing brace (}) ??
            echo "<div class='container';><img src=http://www.*******.com/images/".$dnn    ['image_small'] ." HEIGHT='150px' WIDTH='450px'></div> <br>";

            }
        } //<-- EDITOR: THIS closing braces were missing
    } // <-- EDITOR: THIS one too
?>

3 个答案:

答案 0 :(得分:1)

问题似乎是$session_MomentEvent=$_SESSION['MomentEvent']; // Or Session ID以这种方式,用户似乎总是具有相同的MomentEvent值,无论他正在处理什么事件。

因此,更新仅在表中的第一条记录上完成,因此结果。您提供的代码不完整,无法解决谜题。但按理说,表users_event对于每个具有每个新输入的事件都有唯一的ID。为什么不简单地将此ID链接到他正在处理的事件的ID:

mysql_query("UPDATE users_event SET image_small='$new_name' WHERE MomentEvent='$ID'");

$ ID在任何时候都是知道值,使得选择值:

$sql = "select ID, TitreEvent, DescriptionEvent, LieuEvent,image_small from users_event where MomentEvent='$ID'";

将动态数据与Ajax请求相结合链接到会话变量是一项棘手的工作。尝试省略$_SESSION['MomentEvent']并使用ID而不是$ _GET值来表示Ajax请求。

答案 1 :(得分:0)

您是否尝试使用相同的MomentEvent更新数据库中的多个行,或者是否正在更新数据库中的错误行?

查询mysql_query("UPDATE users_event SET image_small='$new_name' WHERE MomentEvent='$session_MomentEvent'");是否成功执行?

我的建议是仔细检查$_SESSION['MomentEvent']是否设置正确 - 然后更新要更新的行,或者让ajax_image.php返回一个详细说明SQL查询结果的JSON字符串,检查您的AJAX脚本中是否确保上传已转到正确的事件

类似的东西:

<?php
    header('Content-type: application/json');
    $result = array();

    include('db.php');
    session_start();

    $session_id = $_SESSION['id']; // Or Session ID

    $session_MomentEvent = $_SESSION['MomentEvent']; // Or Session ID
    $response['MomentEvent'] = $session_MomentEvent;

    $actual_image_names = time().substr($txt, 9).".".$ext;
    $t_width = 450; // Maximum thumbnail width
    $t_height = 150; // Maximum thumbnail height
    $new_name = "$actual_image_names".$session_MomentEvent.".jpg"; // Thumbnail image name
    $path = "images/";

    if(isset($_GET['t']) and $_GET['t'] == "ajax") {
        // Query and save image
        extract($_GET);
        $ratio = ($t_width/$w); 
        $nw = ceil($w * $ratio);
        $nh = ceil($h * $ratio);
        $nimg = imagecreatetruecolor($nw,$nh);
        $im_src = imagecreatefromjpeg($path.$img);
        imagecopyresampled($nimg,$im_src,0,0,$x1,$y1,$nw,$nh,$w,$h);

        if($result = mysql_query("UPDATE users_event SET image_small='$new_name' WHERE MomentEvent='$session_MomentEvent'")) {
            // Save image
            $response['status'] = 'success';
            $response['updated'] = mysql_num_rows($result);

            imagejpeg($nimg,$path.$new_name,90);

            $response['result'] = $new_name."?".time();
        }
    }
    else {
        $response['status'] = 'failed';
    }

    echo json_encode($response);
?>

然后查看您的JSON响应,看看您收到了什么?最好的方法我可以考虑调试这个问题,但我再也不是100%清楚问题是什么

希望有助于交配,您可以提供更多信息,我会尝试帮助进一步调试

答案 2 :(得分:0)

尝试var_dump MomentEvent并查看确切返回的内容。

你说它只更新列表中的第一个事件,这可能是你需要一个正确的引用,所以ID的主键链接到MomentEvent(外键)。

第二个选项是使用foreach遍历每个事件并让它实际检查每个事件的随机密钥,然后根据匹配的MomentEvent密钥和会话中用户的ID执行第二页上用户图像的外观。

稍微修改你的逻辑,你就应该走上正轨。