2011-08-17 5 views
3

친구가 사용자 즐겨 찾기 목록에 페이지를 추가 할 수있는 웹 사이트를 만들었습니다. 하지만 최근에 나는 즐겨 찾기 목록에서 한 페이지를 삭제하는 것에 대해 불만을 많이 털어 댔습니다 ... 코드에 오류가있는 것 같고 때때로 페이지를 삭제하는 대신 페이지를 추가하는 것처럼 보입니다.내 즐겨 찾기 목록에서 페이지를 삭제하십시오. (PHP)

자세한 설명 : 각 페이지마다 특정 ID가 있으므로 즐겨 찾기에 추가 할 때 ID 번호를 추가 한 다음 다른 숫자를 쉼표로 구분합니다. 좋아하는 것에서 페이지를 삭제하는 것과 같은 일 .. 그것은 번호를 검색하고 그것을 삭제합니다 ...하지만 때때로 그렇지 않습니다! 이유는 모르겠지만 ... "페이지가 성공적으로 삭제되었습니다."라고 알려주지 만 삭제되지 않은 것을 볼 수 없으며 때로 이전에 삭제 한 일부 이전 페이지를 반환합니다! 여기

내 이전 경험에서 코드

if($_REQUEST['do'] == 'delfav') 
{ 
    $mn_Id = safe($_REQUEST['mn_Id'],true); 
    $page = 'favorite'; 
    if(isset($mn_Id)) 
    { 
     $fav = explode(',' , $_SESSION['user']['Favorites']); 
     if(in_array($mn_Id,$fav)) 
     { 
      echo $ind = array_search($mn_Id , $fav); 
      unset($fav[$ind]); 
      $new = implode(',' , $fav); 
      $ss = $db->query("UPDATE users SET Favorites = '".$new."' WHERE Id = '".$_SESSION['user']['Id']."' "); 
      if($ss) 
      { 
       $msg = 'the page was successfully deleted'; 
      } 
      else 
      { 
       $msg = 'error occurred please try again later'; 
      } 
     } 
     else 
     { 
      $msg = 'This page is not in your favorite list'; 
     } 
    } 
} 
+1

친구는 SQL 테이블에서 중첩 된 CSV 테이블을 실제로 사용하지 않아야합니다. –

+1

제안 사항이 있으십니까? – shnisaka

+1

예 :'친구가 SQL 테이블에서 중첩 된 CSV 테이블을 실제로 사용하지 않아야합니다. '. 라이브로 가기 전에이 문제를 해결 한 다음 순수한 SQL에서 항목을 삭제할 수도 있습니다. –

답변

5

대신 추적 코드를 테스트 할 수 있습니다 이것에 대한

echo $ind = array_search($mn_Id , $fav); 
unset($fav[$ind]); 

:

변경이 교체 된 경우
$fav = array_diff($fav, array($mn_Id)); 
+0

대단히 감사합니다! – shnisaka

+0

도와 드리겠습니다. – leticia

1

에게 있습니다 .. 코드를 확인하십시오 수 있습니다 - 그리고 phresenel 말했듯이 - UR 테이블 내부에 CSV를 사용하지 마십시오. 목록의 길이는 모르지만 PHP 문자열을 여러 번 깨뜨릴 수있었습니다. CSV (귀하의 장례식 장 사이트)를 유지하려면 원하는 변수를 정말로 설정 해제하지 않았는지 확인하십시오 (그 전후의 목록을 반향). 그러나 개선하고 싶다면 즐겨 찾기에 별도의 테이블을 사용하는 것이 좋습니다. 즐겨 사용하는 웹 사이트에 대해 하나씩 사용 된 ID와 다른 ID에 대해 하나씩 두 개의 열만있는 테이블 (네 개의 항목 목록은 각각 동일한 사용자 ID를 가진 네 개의 레코드로 변환됩니다). 사용자 아이디와 웹 사이트에 대한 검색 만 삭제하려면 해당 행을 삭제하십시오. 추가하려면 새 행을 추가하기 만하면됩니다. 이것은 몇 가지 DB 베스트 프랙티스를 위반할 수있는 매우 단순화 된 접근 방식입니다.

(...)

if(isset($mn_Id)) 
{ 
    $fav = explode(',' , $_SESSION['user']['Favorites']); 
    if(in_array($mn_Id,$fav)) 
    { 
     $fav = array_diff($fav, array($mn_Id)); 
     $new = implode(',' , $fav); 
     $ss = $db->query("UPDATE users SET Favorites = '".$new."' WHERE Id = '".$_SESSION['user']['Id']."' "); 

(...)

: 당신은 데이터베이스 관련 코드를 변경할 수없는 경우

관련 문제