2011-08-11 5 views
0

1人の詳細を挿入しようとしましたが、正常に挿入されました。 DBに「同じデータを3回挿入する」をチェックするとなぜデータが3回挿入されるのですか?oops phpの概念を使用してデータベースからデータを挿入するには?

私はこのデータをデータベースに持っていました。

id  name  dob    gen 
1  James  12-03-1977  M 
2  James  12-03-1977  M 
3  James  12-03-1977  M 

PHPクラス

class Detail 
{ 
function savePerson_detail($vars){ 
    foreach($vars as $key => $value){ 
     if(is_numeric($key) && $value >0){ 
     $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", 
     mysql_real_escape_string($vars['name']), 
     mysql_real_escape_string($vars['dob']), 
     mysql_real_escape_string($vars['gen'])); 
     mysql_query($qry) or die(mysql_error()); 
     if($qry) 
    { 
    print 'Successfully Insert your details'; 
    } 
    } 
} 

のHTMLページ

<?php 
$detail = new Detail(); 
if(isset($_POST['btnSaveDetail'])){ 
    $detail->savePerson_detail($_POST); 
}?> 
+0

質問タイトルはあなたの質問内容とはあまり関係ありません... – Raptor

+0

$ _POST変数のprint_r()を作成できましたか? – pleasedontbelong

答えて

1

あなたが実際にあなたがデータを3回挿入する理由がある、クエリを3回実行します。クエリを一度実行すれば、うまくいくはずです。

これを行うには、コードを変更する必要があります。最初に入力データを完全に墨塗りします。次にクエリを実行します。現在、$vars(3つの要素を持つ)の各要素を選択していて、それぞれ時間のクエリを実行しています。それに渡された$varsまたは$_POSTはこのようになります場合は、あなたが

foreach($vars as $key => $value){ 

を使用しているので

function savePerson_detail($vars) 
{ 
    // validate function input 
    foreach($vars as $key => $value) 
    { 
     if(!is_numeric($key) || !$value >0) 
     return; 
    } 

    // build sql query 
    $qry = sprintf(
     "INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", 
     mysql_real_escape_string($vars['name']), 
     mysql_real_escape_string($vars['dob']), 
     mysql_real_escape_string($vars['gen']) 
    ); 

    // run sql query 
    $result = mysql_query($qry) or die(mysql_error()); 

    // check query result 
    if($result) 
    { 
     print 'Successfully Insert your details'; 
    } 
} 
+0

ほんの少しの提案です:この関数は、 'print'を使う代わりにtrueかfalseを返すことができます。または、おそらくメインのPHPファイルをキャッチする例外をスローする – pleasedontbelong

+0

ええとそれはcoulb PDO、依存性注入、実際の検証、SQL文字列の作成、使用中のデータ構成のパラメータ化などのビルダーを使用しているそれは悪いことですが、私にとっては、元のコードから先に進んで、それが持つ論理的な欠陥に対処することが重要でした。 – hakre

0

は次々ステップを実行してください。

$_POST['name'] = 'James'; 
$_POST['dob'] = '12-03-1977'; 
$_POST['gen'] = 'M'; 

これは、お客様の$_POSTアイテムを3回通過したものです。 私はあなたがバリデーションを削除して、このようにすることができると思います。

function savePerson_detail($vars){ 
    $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", mysql_real_escape_string($vars['name']), mysql_real_escape_string($vars['dob']), mysql_real_escape_string($vars['gen'])); 
    mysql_query($qry) or die(mysql_error()); 
    if($qry) 
    { print 'Successfully Insert your details'; } 
} 
0

何かが欠けていない限り、これはあなたがやろうとしていることですか?

class Detail 
{ 
function savePerson_detail($vars) { 
    foreach($vars as $key => $value) { 
      $vars[$key] = mysql_real_escape_string($value); 
    } 

    if($qry) 
    { 
     print 'Successfully Insert your details'; 
    } 

    $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')"; 
    mysql_query($qry) or die(mysql_error()); 
} 
関連する問題