Autor Zpráva
Mufna
Profil
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 *
$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
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
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
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
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
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
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
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 *
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
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
Kajman

Jo, to by možná mohlo být ono, ty ... jak to nazvat ... "obrácený apostrofy ?" Jdu to zkusit
Mufna
Profil
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
Kajman

Tak nejen že to jde i s nimi, ale naopak nejde to bez nich
Mufna
Profil
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Ă&copy; 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
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
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 ****** ...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0