2016-04-03 22 views
0

MySQL verilerini PHP tabloları kullanarak birden çok tabloya eklemek için uğraşıyorum.mySQL INSERT PHP tablolarını kullanarak birden fazla tabloya

İki tablo var:

kullanıcı

USER_ID (PK)

first_name

last_name

eposta

şifre

profil

PROFILE_ID (PK)

USER_ID (FK)

profile_image

profile_image_name

Ben güncellemek kullanıcı tablosu şöyle:

$sql = "INSERT INTO user (first_name, last_name, email, password) 
    VALUES 
    ('$_POST[first_name]', '$_POST[last_name]', '$_POST[email]', '$_POST[password]')"; 

Kullanıcı_Kimliği, veritabanında otomatik artış olacak şekilde ayarlanır; bu nedenle, bu kod yürütüldüğünde, eklenen veriler otomatik olarak benzersiz bir PK'ye atanır ve bir oturumda depolanır. Aynı noktada (hesabı oluştururken) user_ID'yi FK olarak profil tablosuna eklemem gerekiyor. Bu şekilde kullanıcı profil resmini yüklediğinde, profil tablosunda bir kaydı olacak şekilde atanacaktır. Örneğin

, ben bu kodu kullanıyorum görüntü yükleme sayfasında:

 $user_ID = $_SESSION['login']; 


     $ins1 = mysqli_query($db, "UPDATE profile SET `profile_image_name`='" . $profile_image_name . "' WHERE `user_ID`='$user_ID'"); 
     $ins2 = mysqli_query($db, "UPDATE profile SET `profile_image`='" . $profile_image . "' WHERE `user_ID`='$user_ID'"); 

USER_ID FK zaten php ifadeleri kullanarak takın nasıl bu kadar profil tablosunda varsa bu kod çalışır Daha önce yaptığım gibi mi? Yine ilk yaklaşım kullanmayı denediler ama

+0

** UYARI **: Eğer parametreli sorguları kullanarak ve gerektiği mysqli' 'kullanan [' bind_param'] (http: // php .net/manual/tr/mysqli-stmt.bind-param.php) sorgunuza kullanıcı verilerini eklemek için. ** Şiddetli [SQL enjeksiyon hataları] (http://bobby-tables.com/) oluşturacağınız için bunu gerçekleştirmek için dize enterpolasyonu veya birleştirme kullanmayın. ** ASLA ** bir sorguya doğrudan '$ _POST' veri koydu. – tadman

+0

** UYARI **: Kendi erişim kontrol katmanınızı yazmak kolay değildir ve ciddi şekilde yanlış bir şekilde ele alınması için birçok fırsat vardır. Bu kısa örnekte, bir dizi tehlikeli [SQL Injection zafiyetleri] (http://bobby-tables.com/) var ve dikkatsizce [uygun kaçış] eksikliğinden geliyorsunuz (http://bobby-tables.com/php) . Herhangi bir modern [geliştirme çerçevesi] (http://codegeekz.com/best-php-frameworks-for-developers/) [Laravel] (http://laravel.com/) gibi durumlarda lütfen kendi kimlik doğrulama sisteminizi yazmayın. yerleşik bir [kimlik doğrulama sistemi] (https://laravel.com/docs/5.2/authentication) ile birlikte gelir. – tadman

cevap

0

takın oluşturur sen Mysql eklemek geçen PK oto artışı elde Yeni kayıt, güncelleme mevcut bir kaydı değiştirir. Şu anki planınız ile profile INSERT yapmanız gerekiyor. Açıkçası bu, bir profili değiştirmek için kullandığınız bir profil oluşturmak için aynı kodu kullanamayacağınız anlamına gelir. Ancak, başka bir seçenek de vardır: REPLACE INSERT ile aynı sözdizimine sahiptir, ancak mevcut bir kaydın üzerine yazacaktır.

Ancak, her kullanıcı yalnızca tek bir profile sahipse, ayrıntılar iki değil, tek bir tabloda tutulmalıdır.

Yorum: Parolaları düz metin olarak depolamak çok kötü bir fikirdir, parola karmaşasını okuyun. Ayrıca bir SQL for SQL enjeksiyonu olmalıdır; Kimlik doğrulamanız bypass ve yok etmek için çok önemlidir.

0

bu deneyin:

INSERT INTO 
`profile`(`user_ID`,`profile_image`,`profile_image_name`) 
VALUES 
('$user_ID','$profile_image','$profile_image_name') 
ON DUPLICATE KEY UPDATE 
`profile_image`='$profile_image',`profile_image_name`='$profile_image_name' 

user_ID benzersiz olmalıdır