Autor | Zpráva | ||
---|---|---|---|
Piskot333 Profil * |
#1 · Zasláno: 2. 3. 2012, 13:47:22
Zdravim vas, mam napsany script, ktery by mel ulozit data do databáze, bohuzel script nefunguje. Nemohu prijit na to, kde jde chyba. Kod je nasledujici:
<?php include "pripojeni_db.php"; echo "<form method=post action=pridej_db.php> <input name='name' type=text value='Jméno'> <br> <input name='title' type=text value='Titulek'> <br> <input name='text' type=text value='Text'> <br> <input name='ar_id' type=hidden value='1'> <input name='post' type=hidden> <input type=submit value='Odeslat'> <br></form>"; if(isset($_POST['sent'])){ $usr_name=mysql_real_escape_string($_POST['name']); $title=mysql_real_escape_string($_POST['title']); $cont=mysql_real_escape_string($_POST['text']); $ar_id=mysql_real_escape_string($_POST['ar_id']); $sql="INSERT INTO test (ar_id, date, usr_name, title, cont) VALUES ('$ar_id','".time()."','$usr_name','$title','$cont')"; $result=mysql_query($sql); if($result){ echo "vloženo";} else echo "nevloženo"; } |
||
Tori Profil |
#2 · Zasláno: 2. 3. 2012, 14:01:36
A kde v tom formuláři máte input jménem "sent"? Ověřujte některé povinné pole, třeba $_POST['name'].
|
||
DarkMeni Profil |
Výsledek skriptu je "nevloženo" nebo "vloženo" ale po kontrole obsahu tabulky tam ty hodnoty nejsou?
V prvním případě by to mohlo být kvůli: $sql="INSERT INTO test (ar_id, date, usr_name, title, cont) VALUES ('$ar_id','".time()."','$usr_name','$title','$cont')"; , je to datový typ sloupce, zkus to buď přepsat na:
$sql="INSERT INTO `test` (`ar_id`, `date`, `usr_name`, `title`, `cont`) VALUES ('$ar_id','".time()."','$usr_name','$title','$cont')"; else echo "nevloženo, protože: ".mysql_error(); Tak Tori má pravdu, koukal sem spíš na možný chyby v sql syntaxi, příspěvek smazat nemůžu ale můžu jen potvrdit to co psala Tori, místo "sent" tam má být asi skrytý "post" s nějakou hodnotou nebo třeba "ar_id". |
||
Piskot333 Profil * |
#4 · Zasláno: 2. 3. 2012, 14:16:04
Tak chyba byla na řádku 8 místo "sent" jsem tam napsal "post" ... a jinak ještě mám problém s datem do DB se vloží 0000-00-00 ...
A celkově, je tohle řešení vhodné pro ukládání dat do databáze, nebo existuje jiné, efektivnější řešení? |
||
Tori Profil |
Piskot333:
místo time() použijte date('Y-m-d') . Alespoň název sloupce date by měl být ve zpětných apostrofech (jak radí DarkMeni), protože je to rezervované slovo MySQL.
Většinou se do skriptu dává nejdřív uložení do DB a až pak výpis formuláře. Totiž aby se zabránilo odeslání duplicitních dat, pokud uživatel odešle formulář a pak dá obnovit stránku, tak se po uložení přesměruje funkcí header (klidně na tu samou stránku). Pokud byste už ale poslal prohlížeči nějaká data (např. ten formulář), tak přesměrování selže. |
||
Piskot333 Profil * |
#6 · Zasláno: 2. 3. 2012, 19:06:16
[#5] Tori
Ty drobné chyby jsem si opravil. Jak tedy na ten header tak, aby nedocházelo k opětovnému deslání formuláře? |
||
Tori Profil |
#7 · Zasláno: 3. 3. 2012, 01:23:14
<?php if (!empty($_POST['name'])) { // sem přesuňte ukládání do DB (ř. 12-18) $hlaska = ($result ? 'vloženo' : 'nevloženo'); $presmerovani = 'http://' .$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'?hlaska='.rawurlencode($hlaska); header("Location: $presmerovani"); exit; } if (isset($_GET['hlaska'])) { echo "<p>$_GET[hlaska]</p>"; } // sem přesuňte formulář (ř. 3-10) |
||
Piskot333 Profil * |
#8 · Zasláno: 3. 3. 2012, 11:56:51
Děkuji mnohokrát :)
|
||
Časová prodleva: 11 let
|
0