Autor | Zpráva | ||
---|---|---|---|
spaceradiocz Profil |
#1 · Zasláno: 22. 6. 2013, 18:42:31
Dobrý den.
Mám problém s posíláním dat do databáze. php vypadá takto <body> <h2>Zápis do databáze</h2> <?php include 'config.php'; //načteme soubor s údaji pro připojení k db mysql_connect($dbserver, $dblogin, $dbheslo); // připojíme se k db mysql_select_db($dbnazev) // vybereme db.. or die("Chyba! Databáze nebo tabulka nebyla nalezena!"); mysql_query("SET NAMES 'UTF-8'"); // nastavíme kódování //když odešleme formulář následující script data uloží to tabulky v databázi if(isset($_POST['send'])) { $day = htmlspecialchars($_POST['day']); //při odeslání příspěvku se nebezpečné znaky změní na entity $date = htmlspecialchars($_POST['date']); //při odeslání příspěvku se nebezpečné znaky změní na entity $name = htmlspecialchars($_POST['name']); //při odeslání příspěvku se nebezpečné znaky změní na entity $list = htmlspecialchars($_POST['list']); //při odeslání příspěvku se nebezpečné znaky změní na entity $images = htmlspecialchars($_POST['images']); //při odeslání příspěvku se nebezpečné znaky změní na entity $vloz ="insert into aktuality set day='".$day."', date='".$date."'; name='".$name."'; list='".$list."'; images='".$images."';"; $result=mysql_query($vloz); //a přesměrujeme na zobrazení článků echo '<script type="text/javascript" for="window" event="onLoad()"> <!-- window.location.href="new.php?edit=ok" // --> </script>'; } $edit = htmlspecialchars($_GET['edit']); if($edit == "ok") { echo '<b>Údaje byly vloženy</b>'; } // vypíšeme úspěšnost mysql_close(); //odpojíme se z db ?> <!-- formulář pro zadávání ůdajů --> <form method="post"> Den: <input name="day" type="text"><br> Datum: <input name="date" type="date"><br> Název: <input name="name" type="text"><br> Id události: <input name="list" type="text"><br> Odkaz timelinu: <input name="images" type="text"><br> <input type="submit" value="Vložit" name="send"> </form> </body> databáze vypadá takto -- phpMyAdmin SQL Dump -- version 4.0.3 -- http://www.phpmyadmin.net -- -- Počítač: localhost -- Vygenerováno: Sob 22. čen 2013, 18:40 -- Verze serveru: 5.1.66-0+squeeze1 -- Verze PHP: 5.3.3-7+squeeze15 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Databáze: `bigbang` -- -- -------------------------------------------------------- -- -- Struktura tabulky `aktuality` -- CREATE TABLE IF NOT EXISTS `aktuality` ( `date` date NOT NULL, `day` varchar(10) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `list` varchar(50) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `images` varchar(300) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ; -- -- Vypisuji data pro tabulku `aktuality` -- INSERT INTO `aktuality` (`date`, `day`, `list`, `name`, `images`, `id`) VALUES ('2013-06-02', 'Sobota', '159372260908979', 'TECHNO CITY Welcome Holiday | 29 / 06 / 13 | THE BIG BANG', 'https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-frc1/600990_162715290567325_1039451027_n.jpg', 2); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Napíše že data byla odeslána ale do databáze se to nezapíše. |
||
Taps Profil |
spaceradiocz:
zkus si zobrazit chyby $result=mysql_query($vloz) or die (mysql_error()); |
||
jenikkozak Profil |
#3 · Zasláno: 22. 6. 2013, 18:47:09
Jednotlivé položky zapisované do databáze se v SQL dotazu neoddělují středníkem, ale čárkou.
|
||
Rfilip Profil |
#4 · Zasláno: 22. 6. 2013, 18:49:51
Nijak nekontroluješ úspešnost vložení a tak nevidíš že máš SQL na 18 řádku špatně, syntaxe je:
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...) |
||
jenikkozak Profil |
#5 · Zasláno: 22. 6. 2013, 18:51:50
A nebo
INSERT INTO table_name SET column1=value1, column2=value2, column3=value3
|
||
Taps Profil |
#6 · Zasláno: 22. 6. 2013, 18:51:55
|
||
spaceradiocz Profil |
#7 · Zasláno: 22. 6. 2013, 18:59:59 · Upravil/a: spaceradiocz
Taps:
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 '' at line 1 Běží mi to na serveru. Pouze nainstalováno PHPmyadmin není nijak konfigurováno. do databáze už to sice pošle nějaká data... tentokrát ale nejsou žádná data |
||
Taps Profil |
#8 · Zasláno: 22. 6. 2013, 19:09:13
spaceradiocz:
zkus $vloz ="insert into aktuality set day='$day', date='$date', name='$name',list='$list',images='$images'"; |
||
spaceradiocz Profil |
#9 · Zasláno: 22. 6. 2013, 19:17:57
Děkuji moc... funguje to.
|
||
Tori Profil |
spaceradiocz:
Na escapování dat vkládaných do DB se používá mysql_real_escape_string (anebo intval pro celá čísla). Jestli je chcete prohnat nejdřív přes htmlspecialchars tak klidně, ale poslední úprava před vložením musí být ta escapovací fce. Jinak vám jediný apostrof ve vkládaných datech rozbije SQL dotaz a data se nevloží. |
||
spaceradiocz Profil |
#11 · Zasláno: 22. 6. 2013, 19:20:11
Co se týče SQL jsem úplný začátečník a toto byl můj první projekt.
|
||
Taps Profil |
spaceradiocz:
jak píše Tori, základem je ošetřit hodnoty, které zapisuješ do DB, vyvaruješ se tak útoku - SQL injection |
||
marcus33cz Profil |
#13 · Zasláno: 23. 6. 2013, 17:13:52
Tori:
Přesně tak, k tomu ještě dodám, že je docela vhodné přidat si kus kódu, který to automaticky provede pro všechny zpracovávané proměnné - tedy i pole $_POST a $_GET obecně. Když už vkládáte config (ve kterém je dobré mít ty přihlašovací údaje), tak přidejte ještě jeden soubor, který ošetřuje ty vstupy. |
||
Tori Profil |
marcus33cz:
„je docela vhodné přidat si kus kódu, který to automaticky provede pro všechny zpracovávané proměnné - tedy i pole $_POST a $_GET obecně“ No nevím, POST dejme tomu (za předpokladu, že všechna pole budou textová, žádná čísla) ... ale proč escapovat všechno z GET jako pro databázi? Stránkování? |
||
Časová prodleva: 11 let
|
0