Mam udelanej formularek pres ktery si davam do DB nejakej zaznami a jak to poslu tak mi to porad nejak nejde a pise mo to tu mou hlasku Chyba při práci s databází. Muze mi nekdo poradit co delam spatne ? Je to snad spatne napsane?
require 'dbconnect.php';
$test1 = trim($jmeno);
$test2 = trim($vzkaz);
if($test1 != "" && $test2 != "") {
$tabulka = "hry_sportovni";
$datum = Date("Y-m-d H:i:s"); // datum pridani zaznamu
$vzkaz = addslashes($vzkaz);
$vzkaz = strip_tags($vzkaz);
$vzkaz = nl2br($vzkaz);
$adresa_ip = $REMOTE_ADDR;
$jmeno_pocitace = gethostbyaddr($REMOTE_ADDR);
// doplneni 'http://' pokud ho uzivatel nenapsal
if($www!="" && !EReg("http://(.*)", $www)) $www = "http://".$www;
// pripojeni k databazi
$conn = db_connect(); if (!$conn) die("Nepodařilo se připojit k databázi.");
// vlozeni zaznamu do databaze
$vysledek = mysql_query("INSERT INTO $tabulka VALUES ('$nove', '$datum', '$thumb', '$jmeno', '$www', '$sirka', '$vyska', '$vzkaz', '$adresa_IP', '$jmeno_pocitace')");
if(!$vysledek) die("Chyba při práci s databází.");
}
Mozna, ze by bylo lepsi misto prikazu require pouziti prikaz include.
Nevim jestli se pri require nacitany zdrojak primo zacleni do scriptu a nebo jestli se jen externe provede.
Tim to ale asi nebude, tak sem kdyztak hod strukturu pouzivane tabulky
Ad Sicco: Tím to rozhodně není a naopak používej require, neboť kontroluje vícenásobné vložení a místo warningu při absenci souboru ohlásí chybu.
Ad chyba: Chtělo by to znátn strukturu tabulky. Možná to tam vkládáš ve špatném pořadí (lepší je udávat za názvem tabulky i jména sloupců), nebo máš špatně definovaný PRIMARY KEY apod. Hoď sem tu strukturu tabulky.
Tak jo tak se mrknete tady to mete :)
CREATE TABLE `hry_sportovni` (
`id` int(11) NOT NULL auto_increment,
`nove` varchar(250) default NULL,
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
`thumb` varchar(250) default NULL,
`popisek` text,
`www` text,
`sirka` char(3) default NULL,
`vyska` char(3) default NULL,
`vzkaz` text,
`adresa_IP` varchar(15) default NULL,
`jmeno_pocitace` varchar(50) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;
ad Andrew: Mezi require a include je hodne velky rozdil! Require zadany soubor pouze provede, ale nezacleni ho do provadeneho skriptu.
ad Kapitan Nemo: Momentalne me nic jineho nenapada....
Já bych řekl, že chyba bude asi zde:
db_connect();
Máš tuto funkci vůbec nadefinovanou? :-)
Normálně je to takto:
$spojeni = @MySQL_Connect($db_server, $db_user, $db_password) or Die("chyba");
$db = @MySQL_Select_DB($db_name, $spojeni) or Die("chyba");
Takto to mám já:
function DB_Connect()
{
global $spojeni, $db_server, $db_name, $db_user, $db_password;
if (!IsSet($db_server) || !IsSet($db_name) || !IsSet($db_user) || !IsSet($db_password))
Error(300);
$spojeni = @MySQL_Connect($db_server, $db_user, $db_password) or Error(301);
$db = @MySQL_Select_DB($db_name, $spojeni) or Error(301);
}
Pavel -> kdyby to nezvladlo pripojeni, tak se to k hlasce "Chyba pri praci s databazi ani nedostalo" :-)
Podle me nemuzes do 11 sloupcu cpat 10 hodnot, aniz bys definoval, do jakych sloupcu to davas - jasne, ze ID je prim. klic, co se inkrementuje sam, ale MySQL to jakoby nevi, jenom porovna pocet sloupcu a ten nesouhlasi. Takze delej insert into(sloupce) values(hodnoty)... a mas pokoj.
Dle mého názoru by se to k té hlášce za jistých okolností dostat mohlo ;-)
Ale máš pravdu, že problém je tentokrát v tom INSERTu.
Tak jo mely ste pravdu pocet sloupcu nesedel a pritom jsem to pred tim pocital :)) a pak sem to jeste napsal tak jak radil Scully insert into(sloupce) values(hodnoty)... a ono to je fakt lepsi takze diky moc vsem :)
ad Sicco: to spis delas srandu ne? tak na co tam potom require je?!
rozdil mezi require a include je prave v ohlaseni chyby a to tak ze include ti akorat ukaze warning ale script probehne dal bez preruseni takze to musis mit upraveny v tom includovacim souboru a require ti ohlasi fatal error a ukonci to provadeni scriptu pochopitelne musi se v tom vyskytovat nejaka chyba jinak aby ti to provedlo jenom script a nezaclenilo tak musis volat ten script stylem http://xxx pak se provadi prvne tam kde je a pak se posila k tobe
Tak jsem měl pravdu se vším ;-)
Psal jsem, že by měl u INSERTU uvádět jména sloupců a bylo to tím. A co se týče require, měl jsem taktéž pravdu a pro podrobnosti doporučuji manuál, kde je použití a rozdíl podrobně vysvětlen, navzdory Siccova tvrzení, že nemám pravdu.