2012-01-05 6 views
0

私はphpMyAdminで小さなデータベース(1テーブル)を作った。私がチェックしたいフィールドの1つが「名前」です。 フォームにユーザーが入力した名前がデータベースに存在する場合は、PHPを介して確認したいと考えています。 htmlでは、DBからの名前のリストが表示されますが、ユーザはフォームに名前を間違って入力することがあります。 問題はそれが存在するかどうかに応じて異なります。 Connection.phpMySQL(PHPを使用)でレコードの存在を確認しますか?

<html> 
<head> 
<title>Project</title> 
</head> 
<body> 

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("e-card"); 

$sql=mysql_query("SELECT * FROM person"); 
$dbname="name"; 
#$formula_adr="formula_adr"; 
#$adress="adr"; 
$line=mysql_fetch_assoc($sql); 

echo'Choose a name to whom you send e-card:<br/><br/>'; 
echo $line[$dbname].'<br/>'; 
while($line=mysql_fetch_assoc($sql)) 
echo $line[$dbname].'<br/>'; 
?> 
<form action="welcome.php" method="POST"> 
Nume: <input type="text" name="fname" /> 
<input type="submit" value="Verify existance in DB"/> 
</form>  
</body> 
</html> 

そしては歓迎接続

welcome.php:

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("e-card"); 

$sql=mysql_query("SELECT * FROM persoana"); 
$dbname="name"; 
$formula_adr="formula_adr"; 
$adresa="adr"; 
$linie=mysql_fetch_assoc($sql); 

if ($_SERVER['REQUEST_METHOD']=='POST' and isset($_POST['fname'])) 
{ 
$name = $_POST['fname']; 

while($line=mysql_fetch_assoc($sql)) 
{ 
if(strcmp($name,$line[$dbname])) 
{ 
echo 'Found'; 
} 
else 
{ 
echo 'This name doesn't exist in DB'; 
} 
} 
} 
?> 

は、私は2つのPHPファイルを持っていますアドバイスをお願い致します^ _-

+0

「問題は、それが存在するかどうかにかかわらず、答えは異なります」とはどういう意味ですか。ユーザーが間違った名前を入力すると、サイトから何も返されません。ユーザーが入力する内容を予測することはできません。 – dm03514

答えて

0

名前を比較するためにテーブルからすべてのデータを取得しないでください。 はこのようにそれを実行します。

$sql=mysql_query("SELECT * FROM persoana where name like '$name%'"); 

あなたは試合

2
<?php 
mysql_connect(HOST, USERNAME, PASSWORD); 
mysql_select_db(DB_NAME); 

if($_POST) { 
    $name = $_POST['fname']; 

    // check if name exists in db 
    $sql = "SELECT name FROM person WHERE name=' . mysql_real_escape_string($name) . '"; 
    $query = mysql_query($sql); 

    if(mysql_num_rows($query) > 0) { 
     // user exists 
    } else { 
     // user does not exist 
    } 
} 

を持っている場合にのみ、上記のスクリプトがうまくいくともビルトインを使用して、SQLインジェクションに対してスクリプトを保護する結果を取得しますmysql_real_escape_stringメソッド。この方法でデータを検証するときは、ワイルドカード(*)セレクタを使用しないことをお勧めします。これは、未使用の追加情報を照会するのはリソースの無駄です。

0

私はこれらのステップを高レベルのステップに従います。

1 - DBを呼び出す前に何かが入力されたことをクライアント側で最初にチェックするためにjavascriptを使用します。フォームフィールドを確認するには、JavaScriptでフィルタを使用できます。

2 - *有用なものが入力されたことを確認した場合 - フォームフィールドの値を別のページに渡すか、値を解析してテーブルを照会します。

3 - データを含むdbテーブルの列に対して解析された値を使用します。レコードが見つかった場合は、それらを返します。

フォームフィールドに悪意のあるものを入力する可能性のあるユーザーによる悪意のある行為を防ぐために、SQLインジェクション技術を使用します。

関連する問題