2012-04-07 4 views
1

좋아, 이제는 간단한 무역 스크립트를 만들려고 노력하면서 몇 주 동안 문제를 찾으려고 노력했다. 이제 도움을 청하기로 결정했다. 나는 데이터베이스에서 괴물을 선택하고 거래 정보와 예를 들어 거래가 누구인지, 누가 그 거래를 하는지를 선택합니다. 스크립트는 괜찮아졌지만 완료되었다고하지만 2 개의 업데이트는 수행하지 않습니다. DB에서 몬스터를 잡아서 소유자를 업데이트합니다. 나는 세션 시작이 있고 데시벨은 사람이 그 난 그냥 잘 몬스터를 잡아하지만 단지입니다 작동하지 않는 코드의 비트를 냈다 한 문제PHP while-loop wrong wrong

} else if ($_POST['Submit'] == 'Complete') { 

    //// This is the bit which does the update and does not work 

    $TradeID = $_POST['id']; 
    $sql12 = mysql_query("SELECT * FROM Trades WHERE ID='$TradeID'"); 
    $row12 = mysql_fetch_array($sql12) or die(mysql_error()); 

    $unserialize11 = unserialize($row12['MyPokemon']); 

    foreach ($unserialize11 as $poke222) { 
    $sql2 = mysql_query("SELECT * FROM user_pokemon WHERE id='$poke222'"); 
    while ($row2 = mysql_fetch_array($sql2)) { 
     $Update1 = mysql_query("UPDATE user_pokemon SET belongsto='".$row12['Me']."' WHERE id='".$row2['ID']."'"); 
    } 
    } 
    $unserialize12 = unserialize($row12['OtherPokemon']); 
    foreach ($unserialize12 as $poke122) { 
    $sql3 = mysql_query("SELECT * FROM user_pokemon WHERE id='$poke122'"); 
    while ($row3 = mysql_fetch_array($sql3)) { 
     $Update1 = mysql_query("UPDATE user_pokemon SET belongsto='".$row12['OtherPerson']."' WHERE id='".$row3['ID']."'"); 
    } 
    } 

    echo "You have successfully completed trade #".$TradeID."!"; 
} 
} else if ($_GET['action'] == 'delete'){ 

말합니다이 될 페이지 상단에 연결 내가 아마 어쩌면 ive가 잘못된 장소에 있거나 아마도 많은 것을 가지고 있다고 생각하는 업데이트를하고 있지 않습니까 ??? ???

+3

은 이전 서버에 대한 스트레스 테스트의 일종입니까? 또한 ** SQL **을 배우려고 노력한 적이 있습니까? 간단한 JOIN 문을 쓸 수없는 것 같습니다. –

+0

스트레스 테스트 란 무엇입니까? – user1121083

+0

https://en.wikipedia.org/wiki/Stress_testing_(software) –

답변

0

서식을 정리하면 여기에 표시된 if 문 끝에 추가 세미콜론이있는 것으로 보입니다. if 문에는 {의 인스턴스 5 개와 }의 인스턴스 6 개가 있습니다. 마지막으로 }을 제거하면 문제가 해결 될 수 있습니다.

코드를 멋지게 유지하면 향후 문제 해결 문제가 줄어 듭니다. 문제의 중괄호를 표시하기 위해이 코드 블록의 대부분을 제거했습니다.

if ($_POST['Submit'] == 'Complete') { 
    /* Removed variable assignments */ 
    /* Removed foreach & while */ 
    /* Removed variable assignment */ 
    /* Removed foreach & while */ 
    /* Removed output */ 
} 
} /* This brace shouldn't be here */ 
+0

여분을 제거한 후 흰 페이지 얻기} – user1121083

+0

불행히도 코드를 보지 않고도 흰색 페이지의 원인을 진단 할 수 없습니다. 아마도 http://pastebin.com/을 통해 더 큰 샘플을 제공 할 수 있습니까? – Sampson

+0

http://pastebin.com/2ybh7kYw 거기에 가세요. – user1121083

0

스크립트가 제대로 작동하지 않는다는 것을 어떻게 알 수 있습니까? 어디에서나 성공을 확인하지는 않습니다. 제출 버튼을 누르면 성공 메시지에 항상이 표시됩니다. 어쩌면 영향을받은 행을 검사하여 성공 여부를 확인해야합니다. http://php.net/manual/en/function.mysql-affected-rows.php

어쩌면 귀하의 DB 구조도 정제가 필요합니다. Whileforeach 두 번 같은 거래가 매우 효율적이지 않습니다.

  • user : 이것은 당연한 것입니다 ...
  • pokemon_gen : 다른 모델에 대한 일반 정보는 당신의 설명을 바탕으로 나는 다음과 같은 테이블을 사용합니다.
  • pokemon_unique : 모든 항목에는 고유 한 ID가 있어야합니다. 이 테이블은 소유자 (사용자)와 포켓몬 모델에 대한 FK를 포함합니다. 또한 마지막 거래 날짜, 포켓몬의 조건 (구매 및 판매 데이터베이스 인 경우) 등이 여기에있을 수 있습니다 (또는 FK에서 자세한 테이블로 이동).
  • trade : 데이터 및 정보는 입니다. 어느 누가 언제 어느 누구와 거래했는지 이를 위해서는 pokemon_unique으로 FK가 필요합니다.

고유 한 포켓몬 및 현재 및 향후 소유자를 식별하기 위해 배열 만 있으면됩니다. (하나의 무역에만 두 명의 소유자 만 필요합니다 : 현재와 새 소유자?). pokemon_unique 테이블에서 소유자를 업데이트하고 trade (각 포켓몬에 대해 하나의 행) 행을 만듭니다.

아마도 뭔가를 놓쳤습니다. 바라기를 바랍니다.