Bu basit UPDATE / INSERT yazmak nasıl karıştı

4 Cevap php

Tamam, ben db etkileşimleri hakkında daha fazla bilgi edinmek için yerel geliştiriyorum bu basit uygulama için bir INSERT / UPDATE yazmak nasıl karıştı.

Ben bir "düzenleme" db doldurulur ve (bu durumda user_id 2) 9 kullanıcı bağlantıları kadar listeleyen bir sayfa, şöyle bir şey var:

<input type="text" name="link1" value="www.yahoo.com">  
<input type="text" name="link2" value="www.google.com">  
<input type="text" name="link3" value="www.amazon.com">  
<input type="text" name="link4" value="">  
<input type="text" name="link5" value="">  
<input type="text" name="link6" value="">  
<input type="text" name="link7" value="">  
<input type="text" name="link8" value="">  
<input type="text" name="link9" value="">  
<input type="submit" name="submitted" value="update">

There should be 9 text inputs showing up here, the first 3 inputs populated with urls from the links table below...Those inputs don't seem to be showing up in my question even though they do in my preview.

Benim links tablo sadece 2 sütun ve gibi görünüyor:

user_id     linkurl
1           http://www.abcnews.com

2           http://www.yahoo.com
2           http://www.google.com    	 
2           http://www.amazon.com

3           http://www.ebay.com
3           http://www.craigslist.org

Nasıl, diyelim ki, bir INSERT / UPDATE sorgusu yazma 3. bağlantısını düzenleme ve 4th, muhtemelen 5., 6., 7., 8. ve 9. ekleme hakkında nasıl gidiyor?

Ben de bu aynı sayfada kullanıcının kişisel bilgi için bir bölüm üzerinde var ve ben gibi bir sorgu ile kolayca güncelleyebilirsiniz:

$query = "UPDATE users
          SET first_name='$firstname', last_name='$lastname', email='$email', state='$state'"  

if($newpass1){
    $query .= ", pass=md5('$newpass1')";
}

$query .= " WHERE user_id = {$_SESSION['user_id']}";

4 Cevap

I düşünebilirsiniz basit yolu, bu gibi bir şey için html değiştirmek için

<input type="text" name="link1" value="www.yahoo.com">  
<input type="hidden" name="oldlink1" value="www.yahoo.com">  
<input type="text" name="link2" value="">  
<input type="hidden" name="oldlink2" value="">

sonra gizli eleman yüzden bir ekleme yapmak ise, eğer güncelleme açıklamada değeri kullanmak, boş ise kontrol altında okuduğunuzda

UPDATE table_name SET linkurl='www.mynewlink.com' 
WHERE linkurl='www.yahoo.com' and user_id=1

Ben gerçekten sorun yaşıyorsanız ne anlamıyorum. Ne istediğini yapmadım denedim şey gösterdi eğer yardımcı olabilir.

Ben var tavsiye tek parça muhtemelen bağlantıları tablosuna bir link_id sütun eklemek istiyorum. Bu çok daha kolay benzersiz her satırı tanımlamak için yapacak ve orijinal giriş sırasını korumak için. (Ben MySQL uygulaması hakkında bilmiyorum, ama genel olarak RDBMS teoride satırlar yerleştirildi sırayla saklanır düşünmemeleri gerekir.)

Bu User_id ve link_id birlikte benzersiz bağlantıları tablodaki bir satırı tanımlamak böylece More detail: Bunu link_id düşünüyorum, 1 ile 9 arasında bir sayı olacaktır. Ben bu AutoIncrement üzerinden uygulanabilir olduğunu düşünmüyorum, ama ben mysql bilmiyorum. Eğer tablo dışına seçtiğinizde, "link_id BY User_id = 3 SİPARİŞ linkleri SELECT url" gibi bir şey olurdu; Bu doğru sırayla bağlantıları tutmak olacaktır. Form gönderildiğinde, seni alan sayıdan link_id değerini belirlemek düşünüyorum. Lütfen ortamı SQL işlemi tarafından etkilenen satırların sayısını belirlemek için bir yol olduğunu varsayarsak, ben size "SET url = 'newvalue' WHERE User_id = 3 VE link_id = 4 GÜNCELLEME linkleri", daha sonra eğer böyle bir güncelleştirme denemenizi öneririm güncellenen raporları 0 satır yerine bir ekleme yapmak.

P.S. Bunu bir öğrenme projesi olduğunu söyledi biliyorum, ama daha ileri almak gibi SQL Injection ve nasıl bunu önlemek için yaklaşık okuyun lütfen!

Bu yüzden muhtemelen kullanıcının tüm mevcut girdileri silin ve sonra onları yeniden doldurmak olacaktır:

$query = "DELETE FROM links WHERE user_id = {$_SESSION['user_id']}";
foreach ($i = 1; $i < 10; $i++) {
  if (!empty($_POST['link' . $i])) {
    $query = "INSERT INTO links (user_id, linkurl) VALUES ({$_SESSION['user_id']}, '" . $_POST['link' . $i] . "')";
  }
}

Ben (örneğin, SQL Server bir kimlik sütun olarak) tablo satırı benzersiz bir tanımlayıcı ekleme ve güncelleştirmek için hangi kayıt (lar) karar vermek için kullanmanızı tavsiye ederim. Bir satır tanımlayıcı olmadan Operasyon mutlaka ekler olacaktır.