2016-04-14 5 views
0

私はどのタイプのプログラミングでもかなり新しいと述べることで前置きします。 私はビデオストアインベントリシステムのための学校の割り当てに取り組んでおり、私は複数のクエリステートメントに問題があります。私は異なるテーブルの2つのフィールドを更新しようとしています。私は増分演算子でビデオテーブルのインベントリを正常に更新しましたが、レンタルテーブルの返却日は更新されません。私は何の誤りもありません。ただし、データベースの空のフィールドに変更はありません。Mysqliマルチクエリはすべてのフィールドを更新しません

私は、関連するコードと思われるものをアップロードします。

は、これは私が現在の日付を設定し、非表示のフォームフィールドに送信し、いくつかのJavascriptを持つフォーム

<form class="form-horizontal" name="returnform" id="returnform" action="" method="post"> 
    <div align="center" class="form-group"> 
     <label class="col-sm-2">Rental number</label> 
     <div class="col-sm-10"> 
      <input class="form-control" name="Rental_ref_num" type="text" name="s" placeholder="Enter reference number..." required=""> 
     </div> 
    </div> 

    <input id="Returned_date" name="Returned_date" type="hidden"> 
    <input id="Movie_id" name="Movie_id" type="hidden"> 

    <div align="center"> 
     <input type="submit" value="Return"> 
    </div> 
</form> 

ためのHTMLです。

<script> 
    var mydate=new Date() 
    var theyear=mydate.getYear() 
    if (theyear < 1000) 
     theyear+=1900 
    var theday=mydate.getDay() 
    var themonth=mydate.getMonth()+1 
    if (themonth<10) 
     themonth="0"+themonth 
    var theday=mydate.getDate() 
    if (theday<10) 
     theday="0"+theday 

    var displayfirst=theyear 
    var displaysecond=themonth 
    var displaythird=theday 

document.returnform.Returned_date.value = displayfirst + displaysecond + displaythird

PHPと私は長い記事のためにごめんなさい

<?php 
if (! empty($_POST)) { 
    $mysqli = new mysqli('localhost', 'root', 'AMerica12', 'videostoremodel'); 

    $rd = $mysqli->real_escape_string($_POST['Returned_date']); 
    $rrf = $mysqli->real_escape_string($_POST['Rental_ref_num']); 
    //////////////////////////////////////////////////////////////////// 

    $result = mysqli_query($mysqli,"SELECT Movie_id FROM rental_table where Rental_ref_num ='".$rrf."'"); 

    $row = mysqli_fetch_array($result); 
    $name = $row['Movie_id']; 
    ///////////////////////////////////////////////////////////////////// 
    $sql = "UPDATE `rental_table` 
       SET (`Returned_date` = '$rd') 
       WHERE (`Rental_ref_num` = '$rrf');"; 

    $sql = "UPDATE `video_table` 
       SET `Amount_inventory` = `Amount_inventory` + 1 
       WHERE (`Movie_id` = '$name');"; 

    $result = mysqli_multi_query($mysqli, $sql); 

照会します。しかし、私は何時間も検索してきましたが、返却日がrental_tableで更新されない理由を理解できません。もう一度、エラープロンプトが表示されません。

ご協力いただければ幸いです。

+0

あなたはmysqliのエラーを使用する必要があり、この方法あなた間違っていることを自分で見つけてください:http://php.net/manual/en/mysqli.error.php – Jester

+0

私は持っています。簡潔にするため、私はそれを元の投稿に含めないことにしました。しかし、私はまだエラープロンプトが表示されません。 – StevenAntonio

+1

私の答え/サティの答えを参照してください。しかし、あなたは最初のクエリは私はかなり確信しているエラーをスローされます。しかし、現時点では実行されていません – Jester

答えて

1

複数の問題があります。以下のコードで

$sql = "UPDATE `rental_table` 
     SET (`Returned_date` = '$rd') 
     WHERE (`Rental_ref_num` = '$rrf');"; 

$sql = "UPDATE `video_table` 
     SET `Amount_inventory` = `Amount_inventory` + 1 
     WHERE (`Movie_id` = '$name');"; 

$result = mysqli_multi_query($mysqli, $sql) 

:ちょうどあなたの元のコードを置き換えます。 1つは、SETステートメントの最初のクエリで使用している角括弧です。そこに括弧の理由はありません、彼らはそこに許可されていません。これを代わりに使用してください:

$sql = "UPDATE `rental_table` 
     SET `Returned_date` = '$rd' 
     WHERE (`Rental_ref_num` = '$rrf');" 

2番目のクエリで最初のクエリを上書きすると、クエリを連結する必要があります。したがって、この使用:

$sql = "UPDATE `rental_table` 
     SET `Returned_date` = '$rd' 
     WHERE (`Rental_ref_num` = '$rrf');"; 

$sql .= "UPDATE `video_table` 
      SET `Amount_inventory` = `Amount_inventory` + 1 
      WHERE (`Movie_id` = '$name');"; 

$result = mysqli_multi_query($mysqli, $sql) 

の代わりに私が代わりに2つの別々のクエリを実行することをお勧めということを、あなたも簡単にこの方法をキャッチエラーを実装することができます

$sql = "UPDATE `rental_table` 
     SET `Returned_date` = '$rd' 
     WHERE (`Rental_ref_num` = '$rrf');"; 
if (!mysqli_query($mysqli, $sql)) { 
    echo "Errormessage: ". mysqli_error($mysqli); 
} 

$sql = "UPDATE `video_table` 
      SET `Amount_inventory` = `Amount_inventory` + 1 
      WHERE (`Movie_id` = '$name');"; 
if (!mysqli_query($mysqli, $sql)) { 
    echo "Errormessage: ". mysqli_error($mysqli); 
} 
+0

ありがとうございました。私は壁に頭を打つのとほとんど同じでした。 :-) 最初は、あなたが推奨する初期修正を適用しようとしましたが、エラーは発生しませんでしたが、テーブル 'Returned_date'はまだ更新に失敗しました。 しかし、2つの別々のクエリを実行すると、そのトリックを行うように見えました。再度、感謝します。私は今日それを1日と呼びます。これは、ある日、十分な欲求不満でした。おやすみ。 – StevenAntonio

+0

2つの別々のクエリを実行すると良いようです!しかし、あなたはマルチクエリを使用している間に直面している問題? – Saty

+0

問題はありませんが、私は言及を忘れていましたが、多分mysqliトランザクションを開始してからコミットしてから両方のクエリが実行されるようにしてください。がんばろう! – Jester

0

コードには1つの問題があります.SQLの更新クエリは1つだけ実行します。

$sql = "UPDATE `rental_table` 
     SET (`Returned_date` = '$rd') 
     WHERE (`Rental_ref_num` = '$rrf');"; 
$result = mysqli_multi_query($mysqli, $sql) 

$sql = "UPDATE `video_table` 
     SET `Amount_inventory` = `Amount_inventory` + 1 
     WHERE (`Movie_id` = '$name');"; 
$result = mysqli_multi_query($mysqli, $sql) 
+0

1つのクエリを実行する場合、mysqli_multi_query()ではなくmysqli_query()を使用します。 – Saty

+0

ポインタをありがとう。私は2つのテーブルを修正しようとしていたので、それが単一のクエリまたはマルチと考えられていたかどうかはわかりませんでした。 – StevenAntonio

+0

あなたのケースでは、concatと複数のクエリを使用する必要があります。しかし、私はあなたの質問を読んでこの答えをしている間は慎重ではなかった。 –

関連する問題