2017-11-04 7 views
0

私はbilling_info, shipping_infoの2つのテーブルを持っています。 billing_idはプライマリキーで、billing_idはshipping_infoの外部キーです。PHPでプリペアドステートメントを使用して複数のテーブルにデータを挿入するには?

私はbilling_infoアドレスフォームを持っています。ユーザーは請求情報を記入します。情報を記入した後、shipping address is differentと呼ばれるチェックボックスがあります。ユーザーがチェックボックスをオンにした場合、出荷情報が尋ねられます。請求情報はbilling_infoテーブルに格納され、shipping_infoは配送情報テーブルに格納されます。

このチェックボックスをオンにしないと、請求情報のみが請求情報テーブルに保存されます。

<input type="checkbox" name="shipping_status" value="1"> 

私は、ユーザーがチェックボックスをチェックしない場合にのみbilling_infoのために、データベース内のデータを挿入することができますが、データを挿入することはできないのですが後のチェックボックスをチェックします。 クエリに問題がある可能性があります。私はクエリを試しました

1) START TRANSACTION; 
    INSERT INTO table1 (column name)VALUES (values); 
    INSERT INTO table2 (column name) VALUES (values); 
    COMMIT; 

2) BEGIN; 
    INSERT INTO table1 (column name)VALUES (values); 
    INSERT INTO table2 (column name) VALUES (values); 
    COMMIT; 

まだデータを挿入することはできません。 これを手伝ってくれませんか?

これはintユーザー情報を格納する正しい方法ですか?

if (isset($_POST['submit'])){ 
    $b_firstname=$conn->real_escape_string(trim($_POST['b_firstname'])); 
    $b_lastname=$conn->real_escape_string(trim($_POST['b_lastname'])); 
    $b_address =$conn->real_escape_string(trim($_POST['b_address'])); 
    $b_country=$conn->real_escape_string(trim($_POST['b_country'])); 
    $b_state=$conn->real_escape_string(trim($_POST['b_state'])); 
    $b_city=$conn->real_escape_string(trim($_POST['b_city'])); 
    $b_pincode=$conn->real_escape_string(trim($_POST['b_pincode'])); 
    $b_mobileno=$conn->real_escape_string(trim($_POST['b_mobileno'])); 
    //$login_user_id=$conn->real_escape_string(trim($_POST['login_user_id'])); 
    //echo $shipping_status=$conn->real_escape_string(trim($_POST['shipping_status'])); 

    /*Shipping address*/ 
    $s_firstname=$conn->real_escape_string(trim($_POST['s_firstname'])); 
    $s_lastname=$conn->real_escape_string(trim($_POST['s_lastname'])); 
    $s_address =$conn->real_escape_string(trim($_POST['s_address'])); 
    $s_country=$conn->real_escape_string(trim($_POST['s_country'])); 
    $s_state=$conn->real_escape_string(trim($_POST['s_state'])); 
    $s_city=$conn->real_escape_string(trim($_POST['s_city'])); 
    $s_pincode=$conn->real_escape_string(trim($_POST['s_pincode'])); 
    $s_mobileno=$conn->real_escape_string(trim($_POST['s_mobileno'])); 

if (empty($conn->real_escape_string(trim($_POST['shipping_status'])))) { 
    $shipping_status=0; 
} 
else{ 
$shipping_status=1; 
} 

if ($shipping_status==0) { 

echo $sql="INSERT INTO billing_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; 
// print_r($sql); 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("ssssssiiiis", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added); 

} 
else{ 
    // prepare and bind 
    echo $sql="INSERT INTO billing_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?);INSERT INTO shipping_info (s_firstname, s_lastname, s_address, s_country, s_state, s_city, s_pincode, s_mobileno,b_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"; 

    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("ssssssiiiisssssssiii", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added,$s_firstname, $s_lastname, $s_address, $s_country, $s_state, $s_city, $s_pincode, $s_mobileno,LAST_INSERT_ID()); 

} 


    $stmt->execute(); 
    $stmt->close(); 

    } 

//redirect code 
//header('Location: contactus.php'); 
    $conn->close(); 
} 

答えて

-2

bind_paramsした後は、デフォルトでは、この

$firstname = "John"; 
$lastname = "Doe"; 
$email = "[email protected]"; 
$stmt->execute(); 
+0

を選択されているあなたは、私が$ stmt-を使用する必要が言うことを意味>実行(); if-else条件の中で? –

+0

if ... else文の後に変数を入れて、それを実行してください... –

+0

私は既に私のcode.butに同じ問題を追加しました。パーツが動作していてもelseパーツを挿入できない場合のみ –

0
 if (empty($conn->real_escape_string(trim($_POST['shipping_status'])))) { 
     $shipping_status=0; 
$sql="INSERT INTO billing_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; 
// print_r($sql); 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("ssssssiiiis", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added); 

    } 
    else{ 
    $shipping_status=1; 
$sql="INSERT INTO billing_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?);INSERT INTO shipping_info (s_firstname, s_lastname, s_address, s_country, s_state, s_city, s_pincode, s_mobileno,b_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"; 

    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("ssssssiiiisssssssiii", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added,$s_firstname, $s_lastname, $s_address, $s_country, $s_state, $s_city, $s_pincode, $s_mobileno,LAST_INSERT_ID()); 
    } 
1

に、あなたはその課金情報を挿入する文の場合であってはならない情報を課金のためのクエリを挿入するたびに挿入する必要があります。配送状況については

$sql="INSERT INTO billing_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; 
     // print_r($sql); 
      $stmt = $conn->prepare($sql); 
      $stmt->bind_param("ssssssiiiis", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added); 
     $stmt->execute(); 
    $stmt->close(); 

if ($shipping_status==1) { 
     $sql="INSERT INTO shipping_info (b_firstname, b_lastname, b_address, b_country, b_state, b_city, b_pincode, b_mobileno,login_user_id,shipping_status, b_date_of_added) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)"; 
     // print_r($sql); 
      $stmt = $conn->prepare($sql); 
      $stmt->bind_param("ssssssiiiis", $b_firstname, $b_lastname, $b_address, $b_country, $b_state, $b_city, $b_pincode, $b_mobileno,$login_user_id=1,$shipping_status, $date_of_added); 
$stmt->execute(); 
    $stmt->close(); 
     } 
+0

ロジックが80%の問題を解決しました。今すぐ注文の詳細を追加する必要がありますし、どこにクエリを追加する必要がありますか? –

+0

他のテーブルにある場合は、クエリの外に挿入することができます。 –

関連する問題