MySQL & kullanarak bir MySQL veritabanı saklanması veri

3 Cevap php

PHP ve MySQL için yeni ve ben bir kullanıcıların gerekirse bir kullanıcı aynı zamanda $skill, $experience, $years ek alanlar ekleyebilirsiniz aşağıdaki alanlarda $skill, $experience, $years veri girilen depolamak için çalışıyorum bu yüzden yerine her alanın 1 her alanın katları olabilir.

Ben nasıl PHP ve MySQL kullanarak benim MySQL veritabanı alanları saklayabilirsiniz merak ediyorum? Ben aşağıdaki komut dosyası var ama ben onun yanlış olduğunu biliyorum. Bazı biri bana aşağıda listelenen senaryoyu düzeltmek yardımcı olabilir?

İşte PHP ve MySQL kodudur.

$skill = serialize($_POST['skill']);
$experience = serialize($_POST['experience']);
$years = serialize($_POST['years']);


for (($s = 0; $s < count($skill); $s++) && ($x = 0; $x < count($experience); $x++) && ($g = 0; $g < count($years); $g++)){
    $mysqli = mysqli_connect("localhost", "root", "", "sitename");
    $query1 = "INSERT INTO learned_skills (skill, experience, years) VALUES ('" . $skill[$s] . "', '" . $experience[$x] . "', '" . $years[$g] . "')";

    if (!mysqli_query($mysqli, $query1)) {
            print mysqli_error($mysqli);
            return;
    }

}

İşte benim MySQL tablodur.

CREATE TABLE learned_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
skill TEXT NOT NULL,
experience TEXT NOT NULL,
years INT NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE u_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
skill_id INT UNSIGNED NOT NULL, 
users_id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

3 Cevap

Birçok ilişki için bir 1 olan iki tablo oluşturmak olacaktır:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(40) collate latin1_general_ci NOT NULL,
  `password` varchar(255) collate latin1_general_ci NOT NULL
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`)
);



CREATE TABLE learned_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
skill TEXT NOT NULL,
experience TEXT NOT NULL,
years INT NOT NULL,
PRIMARY KEY (id)
);

Bu şekilde bir kullanıcı listede becerileri herhangi bir sayı olabilir. Beceri gerçekten ("PHP" veya "MySQL" gibi) sadece küçük bir metin dizesi ise o zaman yerine METIN bir VARCHAR tipini kullanmalısınız. Bu durumda eğer gidiyorsun kez olsun, bunu kullanıcı seçim ve sadece bir skill_id ziyade bir metin alanı olabilir becerilerin bir listesini oluşturmak için daha iyi olacağını göreceksiniz. Bu normalleşme denilen şey (yinelenen verileri önlemek için bir yol) ile olur.

Lütfen öğrenmede iyi şanslar.

Katları varsa, her biri için bir sütun oluşturmak veya bir sınırlayıcı (skill1, skill2, skill3) çeşit ile aynı alanı içine koymak ya var olacak. Sonra, geri alma üzerine bu sınırlayıcı kullanarak diziyi ayırabilirsiniz.

önerildiği gibi sütun aramalarını birden fazla tablo kullanabilirsiniz.

there are also times when you might want to use a serialized array like you started to do. however, after you serialized it, it is a string, so trying to access values by index does not make sense. you have

 $skill = serialize($_POST['skill']);
...    

    $query1 = "INSERT INTO learned_skills (skill, experience, years) 
VALUES ('" $skill[$s] 

hangi işe yaramaz.

Ayrıca böyle bir şey yapmak isteyebilirsiniz

$counter = min(count($skill), count($experience), count($years));
for($i = 0; $i < $counter; ++$i){

yerine

for (($s = 0; $s < count($skill); $s++) && ($x = 0; $x < count($experience); $x++) && ($g = 0; $g < count($years); $g++)){