Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Neukládají se mi data do databáze MySQL

Chci uložit data z formuláře. Mám soubor s obsahem:

<?php
 //nezapomeň nastartovat session!
 session_start();
 

include "pripojeni.php";

$id = $_SESSION['id'];
$jmeno = $_SESSION['jmeno'];
$ref = $_SESSION['ref'];
$dat = $_SESSION['dat'];
$datum_narozeni = $_SESSION['datum_narozeni'];
$hodina = $_SESSION['hodina'];
$misto = $_SESSION['misto'];
$datum1_narozeni = $_SESSION['datum1_narozeni'];
$hodina1 = $_SESSION['hodina1'];
$misto1 = $_SESSION['misto1'];
$jmeno = $_SESSION['jmeno'];
$email = $_SESSION['email'];
$ulice = $_SESSION['ulice'];
$mesto = $_SESSION['mesto'];
$psc = $_SESSION['psc'];
$horoskop = $_SESSION['horoskop'];
$koment = $_SESSION['koment'];


$sql = "INSERT INTO obednani_horoskopu VALUES (
'$id',
'$ref',
'$dat',
'$datum_narozeni',
'$hodina',
'$misto',
'$datum1_narozeni',
'$hodina1',
'$misto1',
'$jmeno',
'$email'
'$ulice',
'$mesto',
'$psc',
'$horoskop'
'$koment',
)";

$vysledek = mysql_query($sql,$id_spojeni);

if (!$vysledek) die(mysql_error());
/* Konec přímé práce s databází. */
?>

a vypisuje mi to chybu
"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 18"

přičemž na řádku 18 je ta definice proměnné $jmeno = $_SESSION['jmeno'];

Co dělám blbě?

Předmět Autor Datum
trosku sedlackeho rozumu - preco je tam 2x $jmeno = $_SESSION['jmeno']; skusal si dat do prveho $jme…
Michal2 27.01.2010 00:41
Michal2
To jak jsem ty proměnné vyráběl. Dík za upozornění. Vyhozeno. Objednani - LOL - škoda že jsem neměl…
Kráťa 27.01.2010 00:54
Kráťa
a uz to aspon funguje, alebo furt ta sama chyba?
Michal2 27.01.2010 03:37
Michal2
$sql = "INSERT INTO obednani_horoskopu VALUES ( '$id', '$ref', '$dat', '$datum_narozeni', '$hodina',…
marekdrtic 27.01.2010 05:23
marekdrtic
vypis stlpcov do ktorych vkladas vobec nemusis vypisovat, ak pocet hodnot vo values resp. v selecte…
wam_Spider007 27.01.2010 09:27
wam_Spider007
Totožný je a i ve stejném pořadí, tak je nevypisuji. Po odstranění čárky za koment však píše, že tot…
Kráťa 27.01.2010 10:52
Kráťa
v tom prvnim prikazu jsi mel za posledni vkladanou hodnotou pred zavorkou carku. Ta tam nepatri
Jan Fiala 27.01.2010 11:07
Jan Fiala
Jo tu už jsem vyndal. Nevypisuje to už onu chybu se závorkou )když byla čárka navíc), ale že prý jin…
Kráťa 27.01.2010 11:11
Kráťa
Blbe mas carku za posleni vkladanou hodnotou pred zavorkou ;-)
Jan Fiala 27.01.2010 07:47
Jan Fiala
Na všetky reťazce, ktoré vkladáš do SQL príkazu, použi funkciu mysql_real_escape_string. Ak to ani…
los 27.01.2010 11:21
los
Tak tohle je blbě $sql = "INSERT INTO obednani_horoskopu VALUES ( '$id', '$ref', '$dat', '$datum_na…
Kráťa 27.01.2010 16:46
Kráťa
za emailem chybi carka
Jan Fiala 27.01.2010 16:58
Jan Fiala
jj jedna přebývala, druhá chyběla. Tady si toho všimnete hned a já se trápil tři dny :-) poslední
Kráťa 27.01.2010 18:03
Kráťa
email - čárka
Zhouba 27.01.2010 16:58
Zhouba

trosku sedlackeho rozumu - preco je tam 2x $jmeno = $_SESSION['jmeno'];
skusal si dat do prveho $jmeno1 = $_SESSION['jmeno1']; , alebo to prve jmeno vymazat? ono totizto v inserte uz mas potom jmeno len raz

a za druhe, nie obednani_horoskopu, ale objednani_horoskopu (to uz len tak kozmeticky :))

$sql = "INSERT INTO obednani_horoskopu VALUES (
'$id',
'$ref',
'$dat',
'$datum_narozeni',
'$hodina',
'$misto',
'$datum1_narozeni',
'$hodina1',
'$misto1',
'$jmeno',
'$email'
'$ulice',
'$mesto',
'$psc',
'$horoskop'
'$koment',
)";

Moc se mi to celý nelíbí, musíš tam mít někde výpis sloupců, nech si udělat v phpmyadminovi insert do všech sloupců. Taky si všimni, že máš u posledního '$koment' na konci čárku a tu musíš vyhodit. Mělo by to pak vypadat takto:

$sql = "INSERT INTO obednani_horoskopu
(
'id',
'ref',
'dat',
'datum_narozeni',
'hodina',
'misto',
'datum1_narozeni',
'hodina1',
'misto1',
'jmeno',
'email'
'ulice',
'mesto',
'psc',
'horoskop'
'koment'
)
VALUES
(
'$id',
'$ref',
'$dat',
'$datum_narozeni',
'$hodina',
'$misto',
'$datum1_narozeni',
'$hodina1',
'$misto1',
'$jmeno',
'$email'
'$ulice',
'$mesto',
'$psc',
'$horoskop'
'$koment'
)";

Uprav si názvy sloupců podle toho, jak je máš, jestli tam nemáš nějakej prefix. A ještě se ujisti, jestli se tabulka nejmenuje objednani_horoskopu nebo obednani_horoskopu, jak to tam máš.

edit: nekoukal jsem na předchozí odpovědi :-), název tabulky už máš vyřešený

Totožný je a i ve stejném pořadí, tak je nevypisuji. Po odstranění čárky za koment však píše, že totožné nejsou či co...
"Column count doesn't match value count at row 1".

CREATE TABLE `objednani_horoskopu` (
  `id` int(5) NOT NULL auto_increment,
  `ref` varchar(22) collate cp1250_czech_cs NOT NULL,
  `dat` varchar(33) collate cp1250_czech_cs NOT NULL,
  `datum_narozeni` text collate cp1250_czech_cs NOT NULL,
  `hodina` text collate cp1250_czech_cs NOT NULL,
  `misto` text collate cp1250_czech_cs NOT NULL,
  `datum1_narozeni` text collate cp1250_czech_cs NOT NULL,
  `hodina1` text collate cp1250_czech_cs NOT NULL,
  `misto1` text collate cp1250_czech_cs NOT NULL,
  `jmeno` text collate cp1250_czech_cs NOT NULL,
  `email` text collate cp1250_czech_cs NOT NULL,
  `ulice` text collate cp1250_czech_cs NOT NULL,
  `mesto` text collate cp1250_czech_cs NOT NULL,
  `psc` text collate cp1250_czech_cs NOT NULL,
  `horoskop` text collate cp1250_czech_cs NOT NULL,
  `koment` text collate cp1250_czech_cs NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1250 COLLATE=cp1250_czech_cs AUTO_INCREMENT=2 ;

Na všetky reťazce, ktoré vkladáš do SQL príkazu, použi funkciu mysql_real_escape_string.

Ak to ani potom nebude fungovať, tak sem napíš presný obsah SQL príkazu, ktorý voláš. Teraz tam dosadzuješ nejaké premenné, ktorých obsah môže byť všelijaký, takže v skutočnosti ani nevieš, čo SQL serveru prikazuješ.

Mimo pôvodnej otázky: Skús ešte raz zvážiť, aké dátové typy majú mať jednotlivé stĺpce. Ukladať dátum alebo hodinu ako text nie je celkom v poriadku. Tiež by si mal vedieť, ako dlhé reťazce budeš do jednotlivých stĺpcov vkladať, a teda namiesto typu text použiť varchar, prípadne char.

Tak tohle je blbě

$sql = "INSERT INTO obednani_horoskopu VALUES (
'$id',
'$ref',
'$dat',
'$datum_narozeni',
'$hodina',
'$misto',
'$datum1_narozeni',
'$hodina1',
'$misto1',
'$jmeno',
'$email'
'$ulice',
'$mesto',
'$psc',
'$horoskop'
'$koment'
)";

a tohle dobře - funguje. Najděte rozdíl (a vzpomeňte nač jsem expert)

$sql = "INSERT INTO obednani_horoskopu VALUES (
'$id',
'$ref',
'$dat',
'$datum_narozeni',
'$hodina',
'$misto',
'$datum1_narozeni',
'$hodina1',
'$misto1',
'$jmeno',
'$email',
'$ulice',
'$mesto',
'$psc',
'$horoskop'
'$koment'
)";

Zpět do poradny Odpovědět na původní otázku Nahoru