| 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: 14 let
|
|||
0