2013-01-05 8 views
3

포켓몬의 이름과 유형별로 게임에있는 특정 포켓몬의 양을 표시하려고하는 Im (정상과 반짝이의 두 가지 유형이 있습니다) 하나만 붙잡고 싶습니다. 지금은이 두 가지 유형을 grabing ... 설명하기 어려운 입력하고 여기에 내 코드 왜 모르겠어요 : 솔직히 그것이 작동하지 않는 이유를 이해하지 않습니다/PHP와 MySQL 계산 금액

$sql23 = " 
    SELECT * FROM user_pokemon 
    WHERE belongsto='". $_SESSION['username']."'AND (slot='1') 
"; 
$result = mysql_query(" 
    SELECT * FROM user_pokemon 
    WHERE belongsto='". $_SESSION{'username'}."'AND (slot='1') 
"); 
while($row = mysql_fetch_array($result)) 
{ 
$sql = "SELECT * FROM pokemon WHERE name='".$row['pokemon']."'"; 
$result = mysql_query($sql) or die(mysql_error()); 
$battle_get = mysql_fetch_array($result); 

$count = mysql_query(" 
    SELECT count(*) FROM user_pokemon WHERE pokemon='".$row['pokemon']." 
    'AND type='".$row['type']."' 
"); 
$count2 = mysql_fetch_array($count); 

, 어떤 도움을 주시면 감사하겠습니다 :)

$row['pokemon']

는 포켓몬의 이름입니다

나는 정기적에 StackOverflow에서 볼 수있는 것들의

Field  Type   Null  Default  Comments 
----------------------------------------------------------- 
id   int(11)  No      
hp   int(55)  No  30    
pokemon  varchar(50) No      
belongsto varchar(50) No      
exp   int(50)  No  500    
item  varchar(50) No  No Item   
nickname varchar(50) No  No Nickname  
move1  varchar(50) No  Ember   
move2  varchar(50) No  Ember   
move3  varchar(50) No  Ember   
move4  varchar(50) No  Ember   
slot  int(50)  No      
level  int(90)  No  5    
time_stamp timestamp  No  CURRENT_TIMESTAMP 
gender  varchar(25) No  Male   
type  varchar(55) No  Normal   Type: normal/shiny etc 
safari_zone int(10)  No  0    
+5

새 코드를 작성하는 데 mysql_ * 함수를 사용하지 마십시오. 더 이상 유지 관리되지 않으며 커뮤니티가 [지원 중단 프로세스] (http://goo.gl/q0gwD)를 시작했습니다. [빨간색 상자] (http://goo.gl/OWwr2)를 참조하십시오. 대신 [prepared statements] (http://goo.gl/orrj0)에 대해 알아야하며 [PDO] (http://goo.gl/TD3xh) 또는 [MySQLi] (http://php.net/)를 사용해야합니다. mysqli). 어떤 것을 결정할 수 없다면 [이 기사] (http://goo.gl/YXyWL)가 도움이 될 것입니다. PDO를 선택한 경우 [여기 좋은 지침서] (http://goo.gl/b2ATO)를 참조하십시오. [PHP에서 mysql 함수를 사용해야하는 이유는 무엇입니까?] (http://goo.gl/J5jAo) – DCoder

+5

모든 쿼리에 AND 앞에 공백을 두도록 상기시켜주십시오. – Hussain

+1

[SQL Fiddle] (http://sqlfiddle.com/)에 스키마와 샘플 데이터를 넣을 수 있습니까? – DCoder

답변

1

하나는 코드 형식의 부족 :질문으로 포켓몬 (반짝, 일반, 요법 ..)

user_pokemon 테이블의 유형입니다. 필자의 견해에 따르면이 방법은 코드를 자신에게 더 쉽게 읽을 수있게 해주는 좋은 방법입니다 (학습 도구는 도움이됩니다). 또한 수평 스크롤의 필요성을 줄여 여러 개의 편집기를 화면에 나란히 배치 할 수 있습니다. 이 도움이

$sql23 = " 
    SELECT 
     * 
    FROM 
     user_pokemon 
    WHERE 
     belongsto = '{$_SESSION['username']}' 
     AND (slot = '1') 
"; 
$result = mysql_query($sql23) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
    $sql = " 
     SELECT * FROM pokemon WHERE name = '{$row['pokemon']}' 
    "; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $battle_get = mysql_fetch_array($result); 

    $count = mysql_query(" 
     SELECT 
      COUNT(*) 
     FROM 
      user_pokemon 
     WHERE 
      pokemon='{$row['pokemon']}' 
      AND type='{$row['type']}' 
    "); 
    $count2 = mysql_fetch_array($count); 
} 

while가 닫는 중괄호가없는 것을, 변수 $sql23이 실제로 사용되지 않았 음을 나타냅니다

여기에 제안 코드 서식 코드입니다. 또한 큰 따옴표로 묶은 문자열에서 배열 값을 중괄호로 묶어 인라인으로 사용할 수 있습니다.

의견에서 언급했듯이 PDO 또는 mysqli로 업그레이드해야합니다. 또한 사용자가 SQL을 직접 입력하면 SQL 주입 취약점이 발생할 수 있으므로 SQL에 직접 값을 주입하는 데주의하십시오. 당신의 코드가 안전한지 확인하기 위해 쿼리 매개 변수를 조사하거나, 적어도 획득하지 마십시오.