0

これは私のフォームフィールドから来ています:

$subject="physics with maths";

これは私のデータベースにあります:

$keywordsindatabse="(physics && electronics) || (electronics & communication) || (electronics and communication)";

フォームの送信時に、条件$keywordsindatabseをと一致させたいと思い$subjectます。何か案は?

どんな助けでもありがたいです。

コード:

<form id="myform" name="myform">
<select name="sselect"  id="itmn">

                        <option value="">Select</option>

            <option value='1'>1</option>
                        <option value='2'>2</option>
                        <option value='3'>3</option>
                        <option value='4'>4</option>
                        <option value='5'>5</option>
                        <option value='6'>6</option>
                        <option value='7'>7</option>            
          </select>
<input  type='text' name='gmajorsub' id=""" value="" onblur="chkdegree(document.getElementById('itmn').value,this.value);">
</form>

<script>
 function chkdegree(item_id,keyword)
 {


 $.ajax({
            type: "GET",
            url: "degree_match.php",
            dataType: 'html',
        data: {item_id : item_id,keyword : keyword},
            success: function(data){
                if(data=="0")
        {
         alert("Dear Applicant, You are not allowed to register.You Subject not matching our essential qualification requirements.");
                  document.getElementById("gmajorsub").value="";
                  document.getElementById("gmajorsub").focus();
                  return false;
        }
            }
    });
 }

</script>

degree_match.php:

<?php
include("../../lib/dbc/dbConnection.php");
require('../../lib/dbc/commonFunc.php');
require('../../lib/dbc/dbHandler.class.php');
$dbObject = new dbHandler();
$dbObject->connect();
$query="select * from advt_110_post_details where recNo='".$_REQUEST['item_id']."'";
$result=mysql_query($query);
$num=mysql_fetch_array($result);
$keyword=strtolower($_REQUEST['keyword']);

$degree=$num['subject_keywords'];

$degree1=explode("|",$degree);





$max = array(null, 0); // category, occurences
/*foreach($degree1 as $k => $v) {
  $replaced = str_replace($v, '##########', $keyword);
  preg_match_all('/##########/i', $replaced, $matches);
  if(count($matches[0]) > $max[1]) {
    $max[0] = $k;
    $max[1] = count($matches[0]);
  }
}


if($max[1]>=count($degree1))
{
  echo"1";  
}
else{
    echo"0";
}
*/
/*foreach($degree1 as $k => $v) {

if ( strstr( $membership, "member" ) )
{

}

}
*/

?>
4

2 に答える 2

0

注: あなたのコードは SQL インジェクションの対象です。PDO 準備済みステートメントまたは mySQLi 準備済みステートメントの使用を検討してください。少なくとも、文字列入力を mysql_real_escape_string でデータベースにラップします。


コードを見ると、データベースからアイテムを取得してからフィルタリングしています。私はmySQLを想定しています。

データベース側でこれを行う方がよい場合があります。「全文検索」をご覧ください。これは MyISAM テーブルでのみ機能するため、必要に応じて変更してください。次に、'subject_keywords' のテーブルに FullText インデックスを追加します。フルテキストを使用してブール検索を設定する必要があります。ブール検索の詳細はこちらです。

(それが失敗した場合、上記のRishiの答えは必要なループを導入しました-それはあなたの試みにはありませんでした。)

于 2012-11-26T00:33:19.773 に答える
-1

あなたの投稿から私が理解している限り、以下のコードが役立つかもしれません..

$subject="physics with maths";
$keywordsindatabse="(physics && electronics) ||
(electronics & communication) ||
(electronics and communication)";
$pieces = explode(" ", $subject);
$piecesDB = explode("||", $keywordsindatabse);
$subsDBv=array();
foreach($piecesDB as $key=>$subsDB){
    $subsDBv[$key] = str_replace(array("(",")"),"",explode(" ", $subsDB));
    }
foreach($subsDBv as $subslvd){
foreach($subslvd as $subslv){
    $ao = next($subslvd);
foreach($pieces as $subs){
if((strpos($subslv,$subs) !== false) AND (strpos($ao,$subs) !== false)){
    echo "Match found..<br />"; 
    }
    else{       
        echo "Sorry, no match found..<br />";
        }
}
}
}
于 2012-11-23T06:17:57.163 に答える