2016-04-14 30 views
0

Her tür programda oldukça yeni olduğumu belirterek ön hazırlık yapacağım. Video mağaza envanter sistemi için bir okul ödevi üzerinde çalışıyorum ve çok sorgu deyimiyle sorun yaşıyorum. Farklı tablolarda 2 alanı güncellemeye çalışıyorum. Video tablosunun envanterini bir arttırma operatörü ile başarıyla güncelledim, ancak kiralama tablosunun dönüş tarihi güncellenmeyecek. Ben hiç bir hata alamıyorum. Ancak, veritabanındaki boş alanda değişiklik yoktur.Mysqli çoklu sorgu tüm alanları güncelleştirmiyor

İlgili kod olduğuna inanıyorum.

Bu

formu

<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> 

için HTML ben Geçerli tarihi ayarlar ve gizli bir form alanına gönderir bazı JavaScript var.

<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 ve ben uzun yazı için üzgünüm

<?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); 

sorgular. Ancak, saatlerce aradım ve ne olursa olsun, dönüş tarihinin neden kiralama_tarihi içinde güncellenmeyeceğini anlayamıyorum. Bir kez daha, hata mesajları almıyorum.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

+0

Eğer mysqli hatayı kullanmalısınız bu şekilde size:

$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) 

yerine ben yerine 2 ayrı sorguları yürütmek için öneririm yapmanın, aynı zamanda kolayca bu şekilde alıcı hatayı uygulayabilirsiniz Kendiniz için neyin yanlış gittiğini öğrenin: http://php.net/manual/en/mysqli.error.php – Jester

+0

Bende var. Kısalmak adına, orijinal yazıya dahil etmemeye karar verdim. Ancak, hala hata mesajları almıyorum. – StevenAntonio

+1

cevabımı/Saty'ın cevabını görün. ama sen ilk sorgu bir hata atacaksın ben eminim. ama şu anda çalıştırılmıyor – Jester

cevap

1

birden sorunlar vardır. Birincisi, SET ifadesindeki ilk sorguda bulunan parantezlerdir. Orada parantez için bir sebep yok ve buna izin verilmiyor. Bunun yerine bu kullanın: Eğer varsa

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

İkinci anda ikinci bir ile ilk sorgu üzerine yazıyorsanız, sorguları bitiştirmek için. bu nedenle bu kullanın:,

$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

Yardımlarınız için çok teşekkür ederim. Kafamı duvarlara çarpma noktasına neredeyse düştüm. :-) İlk başta, önerdiğiniz ilk değişikliği uyguladım ve hiçbir hata atmadı, ancak "Returned_date" tablosu hala güncellenemedi. İki ayrı sorgunun yürütülmesi, hile yapmak gibi görünüyordu. Tekrar teşekkürler. Sanırım şimdilik bir gün diyeceksiniz. Bu bir gün için yeterli hayal kırıklığı oldu. İyi geceler. – StevenAntonio

+0

İki ayrı sorgunun yürütülmesi iyi görünüyor! Ama çok sorgu kullanırken karşılaştığınız sorun nedir? – Saty

+0

Sorun değil, bahsetmeyi unuttum ama belki de bir mysqli işlemini daha önce başlatmak ve sonra da her iki sorgunun yürütülmesi ya da bir hata varsa, işlemek istemezsiniz. İyi şanslar! – Jester

0

Kodunuzda bir sorun var: Yalnızca bir sql güncelleştirme sorgusu çalıştırıyorsunuz. Aşağıdaki kod ile

$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) 

: Sadece orijinal kodunu değiştirmek

$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

Sadece bir sorgu çalıştırmak için kullandığımız mysqli_query() '' mysqli_multi_query() '' – Saty

+0

imleci için teşekkürler. İki tabloyu değiştirmeye çalıştığım için tek bir sorgu ya da çoklu olarak kabul edilip edilmediğinden emin değildim. – StevenAntonio

+0

Sizin durumunuzda concat ve multi query kullanmalısınız.Ama sorunuzu okurken dikkatli olmadım ve bu cevabı verdim. –