2011-12-02 11 views
0

を示さない一方であれば私のコードです:私は、私は彼が結果を持っていることを得るのvar_dump場合にのみ、PHPは、MySQLからの結果を返しますが、私はループの結果は、何もここ

<?php 
    require('...........'); 
    require('................'); 

    $search_query = strip_tags(substr($_POST['search_query'], 0, 60)); 
    $region_query = strip_tags(substr($_POST['region_choice'], 0, 2)); 
    $class_query = $_POST['class_choice']; 
    $quick_search = strip_tags(substr($_POST['quick_search'], 0, 1)); 
      ; 

    # setup database connection 
    $db_ok = 1; 
    $dbh = @mysql_connect($GLOBALS['database']['hs'], $GLOBALS['database']['un'],$GLOBALS['database']['pw']); 
    if (! $dbh) { 
     $db_ok = 0; 
    } 
    $dbh_selected = @mysql_select_db($GLOBALS['database']['db'], $dbh); 
    if (! $dbh_selected) { 
     $db_ok = 0; 
    } 

    if ($db_ok == 1) { 
     $query_addition = ""; 

    if ($region_query > 0) { 
     $query_addition = " AND `location` = \"$region_query\" "; 
    } 

    if ($class_query > 0) { 
     $query_addition .= " AND `class` = \"$class_query\" "; 
    } 

    $query = "SELECT ID,date_active,title,location,environment,specialism FROM "; 
    $query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE()  AND `date_inactive` > CURDATE() 
    $query_addition AND `description` LIKE \"%$search_query%\" ORDER BY `ID`"; 
    mysql_real_escape_string($query); 
    //mysql_set_charset('utf-8', $query); 
    $result = mysql_query($query,$dbh); 

    $table_content = ""; 
    $row_count = 0; 

    if ($result) { 
     while ($row = mysql_fetch_row($result)) { 
      $id = $row[0]; 
      $loc = stripslashes($row[3]); 
      $title = htmlentities(stripslashes($row[2]));   
      $env = htmlentities(stripslashes($row[4]));   
      $spec = htmlentities(stripslashes($row[5])); 

      if ($row_count % 2 == 0) { 
       $table_content .= "<tr>"; 
      } else {  
       $table_content .= "<tr class=\"mellon\">"; 
      } 
      $table_content .= "<td><a href=\"?p=Vacature&ID=$id\" abbr=\"". $title . "\" title=\"" . $title ."\">" . $title . "</a></td>"; 
      $table_content .= "<td>" . get_location($dbh,$loc) . "</td>"; 
      $table_content .= "<td>" . $env . "</td>"; 
      $table_content .= "<td>" . $spec . "</td>"; 
      $table_content .= "</tr>\n"; 
      $row_count++; 
      if ($row_count == 20) { 
       break; 
      }   
     } 
    } 

    if ($row_count > 0) { 
     print " 
     <p>U heeft gezocht op: <b>$search_query</b></p> 
     <p>Hieronder vindt u een overzicht van gevonden vacatures met een maximum aantal van 20. Er zijn in totaal $row_count vacatures gevonden.</p> 
     <table class=\"table_layout\"> 
      <tbody> 
      <tr> 
       <th>Titel</th><th>Regio</th><th>Werkomgeving</th><th>Specialisme</th> 
      </tr> 
      $table_content 
     </tbody></table>"; 

    } else { 
     print " 
     <p>U heeft gezocht op: <b>$search_query</b></p> 
     <p><h4>Helaas heeft uw zoekopdracht geen resultaten opgeleverd</h4> </p> 
     " ; 
    } 

} else { 
    print " 
    <p>U heeft gezocht op: <b>$search_query</b></p> 
    <p>Het zoeken is mislukt..</p> 
    "; 
} 
?> 

私はすべてを試してみましたwhileループは機能していないようです。ちょうど私がöのような特殊文字を使うときにはうまくいきません。私はhtmlspecialchar、htmlentitiesなどからすべてを試しました。 また、str_replaceとstrtrを使って特殊文字を変換しようとしました。あなただけのクエリパラメータに、クエリ全体でmysql_real_escape_string()を実行することはできません

+2

結果セットでmysql_num_rows($ resultset)が返すのは何ですか? –

+0

ところで言及しておくと、私はmysqlでコードを実行すると完全に動作するということです。 – machie27

答えて

2

クエリ全体でmysql_real_escape_stringを実行するのは、やり方が間違っています。挿入するINDIVIDUAL文字列をエスケープします。クエリー全体をエスケープすることで、あなたはそれを壊しています。

$x = mysql_real_escape_string("Miles O'Brien"); 
$sql = "SELECT something FROM somewhere WHERE username='$x'"; 

は、比較することによってあなたのバージョンでしょう製品

SELECT something FROM somewhere WHERE username=\'Miles O\'Brien\'; 

と完全に失敗し

SELECT something FROM somewhere WHERE username='Miles O\'Brien'; 

を生成します。

+0

ありがとうございました。でも問題はありますが、 'ö'で検索しようとすると結果は返されません。代わりに 'o'で検索すると問題はありません。しかし、文字列はf.e. 'zorgcoördinator'で16文字、 'zorgcoordinator'で15文字を検索すると検索できます。 @ marc-b – machie27

+0

mysql_real_escape文字列THANKSを調整しました。私が持っていた問題は今解決されました。私はutf8_decodeを使っていました!私の問題を見てくれてありがとう – machie27

2

感謝だろう、助けてください:あなたのクエリで

$query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE() 
    AND `date_inactive` > CURDATE()" 
    . mysql_real_escape_string($query_addition) . " AND `description` 
    LIKE '%" . mysql_real_escape_string($search_query)"%' ORDER BY `ID`"; 

引用符がエスケープされます、あなたが全体のことでそれを使用する場合。

+0

ありがとう、私は 'ö'で検索しようとすると問題は発生しますが、結果は返されませんが、代わりに 'o'で検索すると動作します。しかし、文字列はf.e. 'zorgcoördinator'で16文字、 'zorgcoordinator'で15文字を検索すると検索できます。 @ tandu – machie27

+0

私はmysql_real_escape文字列を調整しました。私が持っていた問題は今解決されました。私はutf8_decodeを使っていました!私の問題を見るためにすべてをもう一度ありがとう – machie27

2

あなたは間違ったmysql_real_escape_string関数を使用しているようです。クエリ全体ではなく、mysqlクエリに入れた変数に使用するはずです。

これを試してみてください:

$query_addition = ""; 
if ($region_query > 0) { 
    $query_addition .= " AND `location` = '".mysql_real_escape_string($class_query)."' "; 
} 

if ($class_query > 0) { 
    $query_addition .= " AND `class` = '".mysql_real_escape_string($class_query)."' "; 
} 

$query = "SELECT ID,date_active,title,location,environment,specialism FROM "; 
$query .= $GLOBALS['database']['jobs_table'] . " WHERE `date_active` < CURDATE()  AND `date_inactive` > CURDATE() 
     $query_addition AND `description` LIKE '".mysql_real_escape_string($search_query)."' ORDER BY `ID`"; 

$result = mysql_query($query,$dbh); 

それは助けていますか?

+0

ありがとう、しかし、私は 'ö'で検索しようとすると問題が発生しますが、結果は返されません。代わりに 'o'で検索すると動作します。しかし、文字列はf.e. 'zorgcoördinator'で16文字、 'zorgcoordinator'で15文字を検索すると検索できます。 @sonny – machie27

+0

私はmysql_real_escape文字列THANKSを調整しました。私が持っていた問題は今解決されました。私はutf8_decodeを使っていました!私の問題を見てくれてありがとうございました。 – machie27

1

クエリで行が返されませんでした。

クエリを出力し、phpmyadmin/consoleで実行して確認し、クエリを変更して目的の行を返すクエリを取得します。

タスクを分割するには、タスクをより小さなサブタスクに分割する必要があります。
アルゴリズムは非常に簡単であるだけで、コンソール/ phpmyadminの中でSQLでANAD作業脇PHP入れ


  1. 動作するまでクエリを実行してください。 将来の参照のためにこのクエリを書き留めてにしてください。あなたが最後に2つのクエリ

  2. 同じになるまで

  3. は、アウト
    印刷からこのクエリをクエリを組み立て、うち(1)
    が機能し、あなたのコードから1と比較するPHPに戻って取得しますPHPで実行してください。

PS。私はmysql_real_escape_string($query);がうまく動作するように他の試みの中で追加されたと知っていますが、とにかくその行を削除する必要があります。