Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 21. 3. 2008, 15:55:00 · Upravil/a: Mufna
Tak už si nevím rady. Chci vytvořil PHP skript pro vkládámí dat do db MySQL z formuláře, ale pořád mi to do ní nechce zapsat. Data se mají vkládat do tabulky "database" (prefix funguje - ověřeno !), která má jako primary key "id" s atributem auto_increment. Formulář je OK, method=post, všechna pole mají správné "name" a "id". Ve skriptu je:
<?php session_start(); require ("initdb.php"); $titul_stranky = 'Admin'; include ('./admin-header.php'); ?> <?php> $name_type = '".$_POST["name_type"]."'; $prod_year = '".$_POST["prod_year"]."'; $description = '".$_POST["description"]."'; $condition = '".$_POST["condition"]."'; $add_info = '".$_POST["add_info"]."'; $price = '".$_POST["price"]."'; $query = "INSERT INTO ".$tbl_prefix."database (name_type, prod_year, description, condition, add_info, price) VALUES ($name_type, $prod_year, $description, $condition, $add_info, $price, NOW())"; $res = mysql_query($query); if ($res) { echo mysql_affected_rows().' vuz byl pridan do databaze'; } else { echo 'Neco se zase sakra nepovedlo'; } ?> <?php include ('./admin-footer.php'); ?> Můžete na to prosím někdo mrknout ? Díky Jo, skončí mi to načtením admin stránky s hláškou "Něco se zase sakra nepovedlo", předtím mi to hlásilo Notice: undefined index ... bla bla bla ... to jsem vyřešil apostrofy, uvozovkami a tečkou (pardon, vím že se tomu říká jinak, ale teď si honem nevzpomenu jak) u přiřazení hodnot proměnným z formuláře. |
||
Kajman_ Profil * |
#2 · Zasláno: 21. 3. 2008, 16:52:10
$query = "INSERT INTO `".$tbl_prefix."database` (`name_type`, `prod_year`, `description`, `condition`, `add_info`, `price`,`cas_pridani`) VALUES ('$name_type', '$prod_year', '$description', '$condition', '$add_info', '$price', NOW())";
$res = mysql_query($query); if ($res) { echo mysql_affected_rows().' vuz byl pridan do databaze'; } else { echo 'Neco se zase sakra nepovedlo v dotaze<br>$query<br>je chyba<br>'.mysql_error(); } |
||
Mufna Profil |
#3 · Zasláno: 21. 3. 2008, 17:48:15
Kajman
Zatím díky ... zkusil jsem i mysql_errno() - a číslo chyby je 1064. Takže začínám pátrat, co je to zač ... zatím jsem našel něco na oficiálních stránkách MySQL, ale snad to půjde vyřešit pouze skrz dotaz v PHP skriptu ... ale zatím nevím jak |
||
nightfish Profil |
#4 · Zasláno: 21. 3. 2008, 17:55:01
Mufna
1064 je syntaktická chyba v dotazu, ne? pokud tam máš $name_type = '".$_POST["name_type"]."'; $prod_year = '".$_POST["prod_year"]."'; $description = '".$_POST["description"]."'; $condition = '".$_POST["condition"]."'; $add_info = '".$_POST["add_info"]."'; $price = '".$_POST["price"]."'; tak: 1) není vhodné mít apostrofy kolem proměnných v $query 2) v případě, že vlezeš na tu stránku jinak než přes formulář, tak ti to bude hlásit "Notice: undefined index ... bla bla bla" řešením je např. if (isset($_POST['name_type'])) $name_type = $_POST['name_type']; else $name_type = ""; 3) když už si Kajman_ napsal kód, který ti vypíše jak podobu dotazu, tak i chybu, tak se s námi o tyto informace poděl |
||
Mufna Profil |
#5 · Zasláno: 21. 3. 2008, 18:56:39 · Upravil/a: Mufna
nightfish
1) Ok 2) Zkusil jsem tedy if (isset($_POST['name_type'])) { $name_type = $_POST['name_type']; } else { $name_type = ""; exit; } atd. atd. - mám to zatím pro každé pole (formuláře) zvlášť, pak to zkusím nějakou funkcí spojit + dotaz $query = "INSERT INTO '".$tbl_prefix."karavany' ('name_type','prod_year','description','condition','add_info','price', 'date_inserted') VALUES ($name_type,$prod_year,$description,$condition,$add_info,$price,NOW()) "; Výsledek: Chyba - "Undefined variable" na řádku s VALUES 3) Info Hledání na "Error 1064" mi kromě jinýho vyhodilo tohle hledání Error 1064 |
||
nightfish Profil |
#6 · Zasláno: 21. 3. 2008, 19:02:33
Mufna
musíš se rozmyslet, jestli budeš dávat apostrofy do mysql dotazu nebo do těch podmínek na začátku, ale musí být právě na jednom z těchto míst pokud ti to píše chybu s nedefinovanou proměnnou, tak ti to napíše i její název, že? a třetí bod mého předchozího příspěvku platí stále |
||
Mufna Profil |
#7 · Zasláno: 21. 3. 2008, 19:32:46 · Upravil/a: Mufna
Tak teď jsem odstranil chybu "Undefined variable" (bylo to kvůli tomu, že jsem to ověřování udělal jako funkci a asi jsem tam něco zvoral) ... takže jsem to nechal takhle pěkně za sebou, no a výsledek = nehlásí mi to sice žádnou chybu, ale do databáze se nic nedostane :-( ... a když formulář vůbec nevyplním, tak mi to taky vůbec nic nehlásí, prostě jako kdyby tam ten skript vůbec nebyl
|
||
Mufna Profil |
#8 · Zasláno: 21. 3. 2008, 21:36:47 · Upravil/a: Mufna
Tak já už to vzdávám. Zkusil jsem možné i nemožné kombinace dotazu a pořád nic. Zkusil jsem i pouze vložit přímo data (bez proměnných) skriptem a bez formuláře, tzn.
$query = "bla bla bla ... VALUES ('neco', 'neco jineho', 'zbytek')" a ani tak to nic nevzalo. Takže už začínám ztrácet nervy, taková blbost jako je pouhý vložení dat do jednoduchý databáze mi zabralo celej den a vyřešil jsem h.... Už fakt nevím, co s tím. Testuju to jednak na domácí instalaci EasyPHP (MySQL 5.0.27, PHP 5.2.0), jednak na php5.cz, zatím v obou případech výsledky včetně chybových hlášek úplně stejný. |
||
Mastodont Profil |
#9 · Zasláno: 21. 3. 2008, 21:45:45
To zní dost divně.
- Zapni si výpis všech chyb. - Používej testovací echa nebo zápisy do nějakého logu ve všech větvích kódu. - Používej mysql_error. - Zjednoduš SQL na maximum, zkus vložit jen primární klíč tabulky. Tipnul bych si, že to je nějaká totální blbost, jako třeba práce s jinou tabulkou apod. |
||
Kajman_ Profil * |
#10 · Zasláno: 21. 3. 2008, 21:47:26
Kolem hodnot $neco neměly být ty jednoduché uvozovky. Nevšiml jsem si, že jsou přidávány už nahoře.
Ale kolem názvu tabulky a sloupečků jsem dal ` a Vy ', což má jiný význam! A vypište celou tu chybovou hlášku včetně zopakování vygenerovaného dotazu.. v blabla bla chybu neuvidíme. $query = "INSERT INTO `".$tbl_prefix."karavany` (`name_type`, `prod_year`, `description`, `condition`, `add_info`, `price`,`date_inserted`) VALUES ($name_type, $prod_year, $description, $condition, $add_info, $price, NOW())"; $res = mysql_query($query); if ($res) { echo mysql_affected_rows().' vuz byl pridan do databaze'; } else { echo "Neco se zase sakra nepovedlo v dotaze<br>$query<br>je chyba<br>".mysql_error(); } |
||
Mufna Profil |
#11 · Zasláno: 21. 3. 2008, 22:02:08
Mastodont
Jo, taky si myslím, že to bude kravina, ale zatím jsem na to nekápnul. Občas se mi stávalo, že mi nevyjely ani žádné chybové hlášky z "if else". Co se týče vyběru databáze - tabulky (název, přístupové údaje atd.), tam je určitě všechno v pořádku (když vložím záznam přímo z PhpAdmina, tak se mi ve výsledcích pomocí PHP skriptu a sql dotazu všechno objeví. A nemám u tý stránky žádné složité konstrukce - všude kde je potřeba jen začínám <?php require ("initdb.php"); a initdb.php používá pouze config.php. A databáze nemá žádná zvláštní přístupová práva. Jen prostě nemůžu vložit nic do db přes PHP a formulář. To je fakt k vzteku. |
||
Mufna Profil |
#12 · Zasláno: 21. 3. 2008, 22:05:18
Kajman
Jo, to by možná mohlo být ono, ty ... jak to nazvat ... "obrácený apostrofy ?" Jdu to zkusit |
||
Mufna Profil |
#13 · Zasláno: 21. 3. 2008, 22:18:44 · Upravil/a: Mufna
Kajman
Uá ... tak asi jo. Jdu to ještě prozkoušet a pak ještě ošetřit ten formulář ... to zas bude na dlouho, tak tu prosím vydržte, ať se mám na koho obrátit, až mi zase potečou nervíky :-) Zatím díky všem, kteří přispěli Kajman BTW, zatím to vypadá, že to jde i s těmi jednoduchými apostrofy u VALUES ... zatím ! |
||
Mufna Profil |
#14 · Zasláno: 21. 3. 2008, 23:35:37
Kajman
Tak nejen že to jde i s nimi, ale naopak nejde to bez nich |
||
Mufna Profil |
#15 · Zasláno: 22. 3. 2008, 21:01:30
Jak jsem předpokládal, formulář mi samozřejmě nejede. Můžete se prosím ještě někdo na to mrknout ? Díky moc ! Ještě pro jistotu uvádím, co mi funguje a co ne. Samotný zápis do db funguje - ale pouze tak, že i když vyplním formulář (nebo nevyplním, to je fuk), tak se přidá položka, ale v obou případech prázdná (bez jakýchkoliv dat ev. zadaných do formuláře). A funguje to pouze tehdy, když odstraním tu ověřovací podmínku (to je ale asi jasný). Takže problém je někde v tom ověřování vstupních dat z formuláře a jejich přiřazování k proměnné. Ale ani to ověřování samo o sobě mi vůbec nefunguje (i když nic nevyplním, žádnou chybu mi to nezahlásí). Ach jo ... A končí mi to tou poslední hláškou, že "je to v pr.."
Mám 2 soubory - add_car_form.php a add_car.php. Zdrojáky: add_car.php Pozn: Zkusil jsem jen cvičně u name_type použít "" a u ostatních '' jsetli to něco neudělá, ale je to v obou případech úplně stejný U dotazu a VALUES jsem odstranil apostrofy - '$name_type' - předtím ta byly a bez ověřovacích podmínek se položka do db dostala ... ale jak již výše uvádím, pouze prázdná <?php $titul_stranky = 'Admin'; require ("initdb.php"); require ("add_car_form.php"); ?> <?php session_start(); if (isset($_POST["send"])) { if (strlen($_POST["name_type"]) > 0) { $name_type = $_POST["name_type"]; } else { echo 'Chyba<br>'.mysql_error(); } if (strlen($_POST['prod_year']) > 0) { $prod_year = $_POST['prod_year']; } else { echo 'Chyba<br>'.mysql_error(); } if (strlen($_POST['price']) > 0) { $price = $_POST['price']; } else { echo 'Chyba<br>'.mysql_error(); } if (strlen($_POST['description']) > 0) { $description = $_POST['description']; } else { echo 'Chyba<br>'.mysql_error(); } if (strlen($_POST['condition']) > 0) { $condition = $_POST['condition']; } else { echo 'Chyba<br>'.mysql_error(); } if (strlen($_POST['add_info']) > 0) { $add_info = $_POST['add_info']; } else { echo 'Chyba<br>'.mysql_error(); } if ($name_type && $prod_year && $price && $description && $condition && $add_info) { echo 'Vse je OK<br>'; $photos = 1; $query = "INSERT INTO `".$tbl_prefix."karavany` (`name_type`, `prod_year`, `description`, `condition`, `add_info`, `price`, `date_inserted`, `photos`) VALUES ($name_type, $prod_year, $description, $condition, $add_info, $price, NOW(), $photos)"; $res = mysql_query($query); if ($res) { echo mysql_affected_rows().' vuz byl pridan do databaze'; } else { echo 'Neco se zase sakra nepovedlo, v dotaze<br>$query<br>je chyba<br>'.mysql_error(); } } else { echo 'Neco se zase kurnik zkurvilo'.mysql_error(); } } else { echo 'Uz zase je to v pr...'.mysql_error(); } ?> <?php include ('./admin-footer.php'); ?> add_car_form.php <?php require ("initdb.php"); $titul_stranky = 'Admin'; include ('./admin-header.php'); ?> <div class="form-box"> <form name="add_car" action="add_car.php" method="post" enctype="text/plain"> <fieldset> <legend>PĹ™idánĂ vozu</legend> <div class="row"> <label for="name_type">Typ vozu:</label> <input type="text" maxlength="100" id="name_type" name="name_type" value=""> </div> <div class="row"> <label for="condition">Stav:</label> <input type="text" maxlength="50" id="condition" name="condition" value=""> </div> <div class="row"> <label for="prod_year">Rok vĂ˝roby:</label> <input type="text" maxlength="4" id="price" name="price" value="" class="year"> </div> <div class="row"> <label for="price">Cena:</label> <input type="text" maxlength="9" id="price" name="price" value="" class="price"> <span class="unit"> KÄŤ </span> </div> <div class="row"> <label for="description">Popis:</label> <textarea name="description" cols="40" rows="8"></textarea> </div> <div class="row"> <label for="add_info">DodateÄŤnĂ© informace:</label> <textarea name="add_info" cols="40" rows="3" class="add"></textarea> </div> <div class="input-row"> <input class="send" name="send" id="send" type="submit" value="PĹ™idat vĹŻz" /> </div> </fieldset> </form> </div> <?php include ('./admin-footer.php'); ?> |
||
Mufna Profil |
#16 · Zasláno: 22. 3. 2008, 21:26:27
Teď jsem na to ještě koukal a při úpravě tak, aby do db vůbec něco šlo (aspoň ta prázdná položka), mi db bere pouze hodnotu u proměnné $photos, kterou mám dočasně definovanou jako 1. Takže to vypadá, že můj skript prostě vůbec nezpracuje formulář, ach jo ...
|
||
Mufna Profil |
#17 · Zasláno: 23. 3. 2008, 02:21:19
Tak jsem to vyřešil, no samozřejmě to byla blbost, kvůli který ale pak bylo všechno totálně rozházený a nedávalo to někdy smysl. Chyba byla ve formuláři - mám tam 2x name="price", jednou správně a jednou u "Rok výroby", kde má být name="prod_year". Ach jo... ani to šachování s apostrofy a uvozovkami nebylo třeba, ani ty "obrácený apostrofy" nejsou potřeba, prostě jsem udělal školáckou chybu ve formuláři ... 2 dny v ****** ...
|
||
Časová prodleva: 16 let
|
0