2011-12-05 3 views
-4

암호 및 사용자 이름을 고의로 사용하여 mySQL 쿼리를 작성했습니다. 반환하는 것은 하나의 결과 만이 그 결과에 대한 오늘 날짜보다 다른 정보를 반환하지 않는 것입니다. 어떤 검색이 작동하지 않는지는 중요하지 않습니다.mySQL 검색이 실제로 작동하지 않습니다.

<?php 

    $proto = $_GET['p']; 
    $terms = $_GET['f']; 
    $return; 

    if($proto == 'inline'){ 
     echo 'checking'; 
    $username="*******"; 
    $password="*******"; 
    $database="*******"; 
    $my_text = $_GET['f'];  //what I'm searching for 
    $my_category = '8';  //whatever category number it is 

    mysql_connect(localhost,$username,$password) or die(mysql_error()); 
    mysql_select_db($database) or die(mysql_error()); 

    $result = mysql_query("SELECT ID FROM wp_posts WHERE post_title LIKE '%$my_text%' "); 
    // select all posts that have your text 

    while ($row = mysql_fetch_array($result)); 

    $postname = $row['post_name']; 
    $posttitle = $row['post_title']; 
    $postID = $row['ID']; 
    $date = date ('d-M-Y' , strtotime($row['post_date'])); 

     $return.= ' 
        <a href="http://www.robin-knight.com/' . $postname .'">'.$posttitle.' ('.$postname.')<br /><span style="font-size:10px; color:#555;">'.get_the_time("d-M-Y", $postID).' - '.get_post_meta($postID, "status", true).'</span></a> 
       '; 

     //while have posts 

     echo $return; 

    } 

    ?> 
+0

SQL이 작동하는 방식을 배우는 시간입니다 ... – ceejayoz

+1

무엇이 질문입니까? 또한 "실제로 작동하지 않는다"는 것은 무엇을 의미합니까? –

+0

좋은 SQL 주입 구멍. 누군가 당신의 데이터베이스에 주차 할 트럭을 좋아하길 바랍니다. –

답변

2

: 나는 그것을 누락 될 수 있습니다,하지만 난 당신이 당신의 while 루프에서 아무것도 포괄 표시되지 않습니다

.

그렇기 때문에 그 중 하나만 얻는 것입니다. 중괄호 {}를 사용해야합니다

+0

질문에 오타가 될 수도 있지만 좋은 지적입니다. – ceejayoz

+0

@Robin Knight - 오류 인 경우이 대답을 수락해야합니다. – Matten

0

귀하의 질의는 post_name, post_title, 또는 post_date을 선택하지 않습니다. 당신은 SELECT ID FROM wp_posts라고 했으므로 ID와 다른 것을 선택했습니다. strtotime()이 false를 반환하기 때문에 date()의 통화 정렬이 작동하므로 대체로 현재 날짜를 사용합니다.

+0

어떻게 구조화해야합니까? –

+0

'post_name'이 필요한 경우, 그것을 선택해야합니다. '선택 ID, post_name, post_title, post_date FROM wp_posts ... '. – ceejayoz

-1

이 :

mysql_query("SELECT ID FROM wp_posts WHERE post_title LIKE '%$my_text%' "); 

은 매우 안전하지 않습니다 - my_text 이스케이프되지 않으며, GET의 PARAMS에서 가져온 것입니다, 그래서 그것은 SQL 주입 공격에 당신을 엽니 다. mysql_real_escape_string을 사용하여 이스케이프 처리하거나 더 나은 방법은 코드에서 매개 변수화 된 쿼리를 사용하는 것입니다. 기타 정보에 추가

+4

이것은 좋은 지적이지만 대답이 아닙니다. – ceejayoz

+0

그건 내 질문에 절대적으로 빛나는 대답입니다. –

관련 문제