echo "Category: $cat<br>";
Это уязвимость Межсайтовый скриптинг . Поскольку вы используете этот сайт в качестве учебного сайта, вы должны знать о недостатках безопасности и о том, как их избежать. Начните с чтения сайта OWASP.
Как уже отмечали другие, у вас также есть недостаток SQL-инъекции.
Также, вот вывод с вашего сайта:
Category: 143345
Set: Alliances
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near ''magic_cards_copy'
WHERE category = 'Alliances' LIMIT 40' at line 1
Похоже, вы используете неправильный тип разделителя вокруг имени таблицы. Вокруг имени таблицы используйте обратные кавычки, а не одинарные.
Вам нужно создать еще одну таблицу, чтобы записать членство каждой карты в каждом наборе. Это иногда называют «таблицей многих ко многим» или «таблицей пересечений». Это особенно верно, потому что IIRC, некоторые Магические карты могут принадлежать нескольким сетам.
Так вот, как бы я это сделал:
CREATE TABLE CardSets (
set_id INT PRIMARY KEY AUTO_INCREMENT,
set_name VARCHAR(40)
);
CREATE TABLE Cards (
card_id INT PRIMARY KEY AUTO_INCREMENT,
card_name VARCHAR(40)
-- other card attributes, color, flavor text, etc.
);
CREATE TABLE CardSetManifest (
set_id INT NOT NULL,
card_id INT NOT NULL,
-- other attributes of card specific to a given set, e.g. rarity
PRIMARY KEY (set_id, card_id),
FOREIGN KEY (set_id) REFERENCES CardSets(set_id),
FOREIGN KEY (card_id) REFERENCES Cards(card_id)
);
Таким образом, учитывая set_id
, вы можете получить количество карт в этом наборе:
SELECT set_id, COUNT(*) FROM CardSetManifest GROUP BY set_id;
Учитывая set_id
, вы можете получить список карт в этом наборе:
SELECT m.set_id, m.card_id, c.card_name
FROM CardSetManifest m JOIN Cards c USING (card_id);