2017-01-26 2 views
0

名前、地域、年齢、言語を入力できるフォームを設計しました。また、入力したデータを取得するPHPスクリプトを作成しましたが、ユーザーがフィールドを空のままにしたり、名前を書き出してデータベースを削除した場合、データベースのすべてのレコードと一致するため、データベースはすべてのフィールドを返します。空のフィールドを取り除く方法はありますか?誰かが名前と地域をやることができたら、残りの部分を把握できるはずです。私はjQueryとAJAXをセットアップしているので、キー入力がフォームのいずれかで行われると、このsearchFunctionが実行されます。私は、私がやっているよりも効率的なMySQLのやり方があるのだろうかと思っています。最初の答えを見て、それを実装しようとすると、20 + else if文を実行しない限り、変数が設定されていないとMySQLを更新する方法がわかりません。jQuery/AJAXを使用したMySQLのマルチ検索

AJAX:

$(function() { 
       $("#searchform").bind('submit',function() { 
        var name = $('#name').val(); 
        var region =$('#region').val(); 
        $.get('scripts/searchFunction.php',{name:name, region:region}, function(data){ 
         $("#show").html(data); 
        }); 
        return false; 
       }); 
       $("#searchform").keyup(function() { 
        var name = $('#name').val(); 
        var region =$('#region').val(); 
        $.get('scripts/searchFunction.php',{name:name, region:region}, function(data){ 
         $("#show").html(data); 
        }); 
        return false; 
       }); 
      }); 

searchFunction.php

<?php 
include 'connection.php'; 
session_start(); 
$name = "%" . $_GET['name'] . "%"; 
$region = "%" . $_GET['region'] . "%"; 
$dbuname; 
$dbfname; 
$dblname; 
$dbage; 
$dbregion; 
$dblanguage; 

$stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ? OR Region LIKE ?;'); 
$stmt->bind_param('ss',$name, $region); 
$stmt->execute(); 
$stmt->bind_result($dbuname, $dbfname, $dblname, $dbage, $dbregion, $dblanguage); 
while($stmt->fetch()){ 
    echo '<div class="row">'; 
    echo '<div class="col-md-4">'; 
    if(file_exists("../img/accounts/" .$dbuname . "/Profile.jpg")){ 
     echo '<img src="img/accounts/'. $dbuname .'/Profile.jpg" class="img-fixed"/>'; 
    }else if(file_exists('../img/accounts/' .$dbuname . '/Profile.png"')){ 
     echo '<img src="img/accounts/'. $dbuname .'/Profile.png"/>'; 
    }else{ 
     echo '<img src="img/default-img/default.png" class="img-fixed"/>';  
    } 

    echo '</div>';  

    echo '<div class="col-md-7 col-sm-3 col-sm-offset-1">'; 
    echo '<p>First Name: ' . $dbfname . '</p>'; 
    echo '<p>Last Name: ' . $dblname . '</p>'; 
    if(isset($_SESSION['Loggedin'])){ 
     if($_SESSION['Loggedin'] == 1){ 
      echo '<p>Age: ' . $dbage . '</p>'; 
      echo '<p>Region: ' . $dbregion . '</p>'; 
      echo '<p>Language: ' . $dblanguage . '</p>'; 
     } 
    } 
    echo '</div>';  
    echo '</div>';  
    echo '<hr class="section-spacer"/>'; 
    echo '<br>'; 
} 
?> 

答えて

1

あなたは例えば、ajax呼び出しの前に検証を追加し、ユーザーが(スペース以外)何を入力したかどうかを確認することができます

var str = $('#field').val(); 
if(val && val.trim().length > 0){ 
    //method call 
} 

このように、入力がnullまたは空白だけを含む場合、関数は呼び出されません。

更新

あなたは動的に渡されたパラメータに基づいてクエリ、例えば作成して実行するPHPコードを変更する必要があります。それはだろう、私は私のコードからのAjaxを追加しました

$stmt; 
if (!empty($name) and !empty($region)) { 
    $stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ? OR Region LIKE ?;'); 
    $stmt->bind_param('ss',$name, $region); 
}else if (!empty($name)) { 
    $stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE First_Name LIKE ?;'); 
    $stmt->bind_param('ss',$name); 
}else{ 
    $stmt = $conn->prepare('SELECT Username, First_Name, Last_Name, Age, Region, Language FROM '. $table .' WHERE Region LIKE ?;'); 
    $stmt->bind_param('ss',$region); 
} 
+0

を上記の例で働くことができますか?私は2つの関数を持っているので、1つはサブミット用、もう1つはキーアップ用です – Chromatic

+0

はい、この例で示したような 'if'条件内で' get'関数呼び出しをラップする必要があります。 –

+0

$ .getを使用するか、スイッチを切り替えて$ .ajaxの配列を使用し、data:dataを使用する方が効率的でしょうか? – Chromatic

関連する問題