Autor Zpráva
Piskot333
Profil *
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";
                                    }
Vše se nachází v jednom souboru. Předem děkuji
Tori
Profil
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')";
a nebo k 22 řádku dopsat:

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 *
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 *
[#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
<?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 *
Děkuji mnohokrát :)

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: