我想让用户上传图片,并仅在他们刚创建的活动页面上显示他们上传的图片。为此,我在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
?>
答案 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执行第二页上用户图像的外观。
稍微修改你的逻辑,你就应该走上正轨。