sql - Varolan bilgileri kılma olmadan güncelleme

2 Cevap php

Ben uygun kullanıcı adı ile bir rekor yoksa yeni bir kayıt eklemek, ve eğer var kaydını güncelleyecek aşağıdaki koşullu kodu var. Bu çalışıyor.

Ancak, şu anda, ben yeni bir kayıt eklemek, ve eğer sadece ad ve soyad takın, ve belki diyelim telefon bilgileri bu gayet boş bırakılmak ile detayları ele. O zaman sadece telefon kaydı ile kayıt güncelleme istiyorsanız, isim ve adres bilgileri hiçbir şey yerini alır.

Ben güncelleme olacak alanın içeriği ile, bilgilerini güncellemek için benim php html formunu doldurmak için kolay bir yol var belki olup olmadığını bilmek istiyorum nedir, nedir? Ben kullanıyorum

 <input type="text" name="uniquename" />

Sonra geri altına php koduna geçirilen bir javascript işlevi geçirilen kullanıcı girişi elde etmek. Bu mümkün değilse, sadece boş değil userinput gelen bir alanı güncelleştirmek için, bazı sql / php sihirli çalışmak için kolay bir yol var mı?

$usernameQuery = "select username from USERS where username = '" . $con->escape_string($username) . "'"; 

$xblah = $con->query($usernameQuery);
  while ($row = mysqli_fetch_assoc($xblah))
  {
    $checkUsername = $row['username'];
   }

if ($checkUsername == null) {

$userQuery = "INSERT INTO USERS VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("ssssssssssssssssssss", $username, $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $comments);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}

else if ($checkUsername == $username) {

$userQuery = "UPDATE USERS SET firstname = ?, lastname = ?, flaggedauctions = ?, lastauction = ?, street1 = ?, city1 = ?, postcode1 = ?, street2 = ?, city2 = ?, postcode2 = ?, phone = ?, mobilephone = ?, fax = ?, email = ?, website = ?, bank = ?, banknumber = ?, accoutnumber = ? WHERE username = ?";
if ($userInfo = $con->prepare($userQuery)) {
    $userInfo->bind_param("sssssssssssssssssss", $firstname, $lastname, $flaggedauctions, $lastauction, $street1, $city1, $postcode1, $street2, $city2, $postcode2, $phone, $mobilephone, $fax, $email, $website, $bank, $banknumber, $accountnumber, $username);
    $userInfo->execute();
    $userInfo->close();
    echo "true";
} else {
echo "false";
}
print_r($con->error);
}

2 Cevap

You just have to build your update statement and bind parameter dynamically. e.g.

$userQuery = "UPDATE ";

if (!empty($firstname)) {
  $userQuery += "firstname = ?,";
}

...    

if (!empty($firstname)) {
  $bindArgs[] = $firstname;
}
...

böylece sorgu değiştirmek gerekiyordu değildir sütunları güncelleme olmaz.

Daha genel olarak, unutmayın:

  • Aksi takdirde birisi bir sütun ekler eğer rahatsız olacak ve birisi sütunları yeniden sıralar eğer karışık olacak çünkü INSERT sütun adlarını belirtmek için ... DEĞERLERİNİ akıllıca olur.

  • Lütfen seçin ve güncelleme arasında bir yarış durumu var ... başka bir sürecin hala da düşünün başarısız olmasına ekleme / güncelleştirme neden düşünme yaparken bir satır silmek / eklemek olabilir:

    • INSERT ... YİNELENEN KEY UPDATE ON ...
    • INTO DEĞİŞTİR ...