3

我想让用户上传一张图片,并且只在他们刚刚创建的活动页面上显示他们上传的图片。为此,我有一个 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();
 }
 ?>

显示图片.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
?>
4

3 回答 3

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 请求。

于 2013-09-24T08:41:30.550 回答
0

尝试 var_dump MomentEvent 并查看究竟返回了什么。

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

第二种选择是使用 foreach 遍历每个事件,并让它实际检查每个事件的随机键,然后根据匹配的 MomentEvent 键和会话中用户的 ID 在第二页上显示用户图像。

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

于 2013-09-25T07:53:09.110 回答
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% 清楚问题是什么

希望对您有所帮助,您可以提供更多信息,我将尝试帮助进一步调试

于 2013-09-23T23:02:22.293 回答