2013-09-21 4 views
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(); 
} 
?> 

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

$ txt 및 $ text ..는 무엇인가요? –

+0

- 전반적으로 논리가 보인다, 당신은 var_dump() MomentEvent해야합니다, 거기에 문제가있을 수 있다고 생각합니다. - SQL 인젝션에는 mysql_ 함수를 사용하지 않는 것이 좋습니다. 사용하지 않는 것이 좋습니다. mysqli_ 함수 나 더 나은 PDO를 살펴보십시오. - 미래에는 스스로 추출물을 사용하지 않는 것이 좋습니다. 그렇지 않으면 변수가 어디서 왔는지 모르기 때문에 코드를 혼란스럽게하는 사람이있을 수 있습니다 (일부 사람들에게는 나쁜 습관으로 여겨짐). 가 - 당신은 이상한 표 - 보내고 내가 본 XDD의 멋진을 가지고 있지만 그것을 읽고 혼란 : @freddy, 난 그냥 쉽게 읽을 수 있도록 코드를 편집하고/이상한 중괄호를 놓치게 한 헤이 P – aleation

+0

({) 모든 이상 if 및 mysql_query (ajax_image.php에서)가 반환하는 것을 저장하는 경우 true 또는 false, 특히 디버깅하는 경우. – aleation

답변

1
을 디버깅 도움이됩니다 더 이상 정보가 도움이

희망

이 문제는 $session_MomentEvent=$_SESSION['MomentEvent']; // Or Session ID 인 것처럼 보입니다. 사용자가 작업중인 모든 MomentEvent 값이 항상 같은 것처럼 보입니다.

따라서 업데이트는 테이블의 첫 번째 레코드, 결과에 대해서만 수행됩니다. 제공 한 코드가 수수께끼를 푸는 데 불완전합니다. 그러나 테이블 users_event에 모든 새로운 입력이있는 모든 이벤트에 대한 고유 ID가있는 것은 당연한 것입니다. 단순히 이벤트의 ID에이 ID를 연결 왜에 일하고 :

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

동적 데이터를 연결하십시오 $ ID가 알고있는 값이 선택 값을 언제든지이다

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

Ajax 요청과 함께 세션 변수를 사용하는 것은 까다로운 비즈니스입니다. $_SESSION['MomentEvent']을 생략하고 Ajax 요청에 $ _GET 값 대신 ID를 사용하십시오.

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 % 아니에요 동료, 당신이 제공 할 수있는 나는 노력이 더

0

MomentEvent를 var_dump하여 정확하게 반환되는 것을 확인하십시오.

당신은 적절한 참조가 필요하므로 ID의 기본 키가 MomentEvent (외래 키)에 링크 된 목록의 첫 번째 이벤트 만 업데이트한다고 말합니다.

두 번째 옵션은 각 이벤트를 foreach로 반복하여 이벤트 당 임의의 키를 실제로 확인한 다음 일치하는 MomentEvent 키와 세션의 사용자 ID를 기반으로 두 번째 페이지의 사용자 이미지 모양을 수행합니다 .

논리를 약간 재 작업하면 궤도에 오르게됩니다.

관련 문제