Autor Zpráva
Mufna
Profil
Zdravím Vás. Poradíte mi někdo, jak mohu vyřešit to, aby se po vyplnění formuláře (jde o položku do databáze) a zobrazení hlášky o přidání položky již nedalo kliknutím na "Aktualizovat" v prohlížeči znovu do db přidat to samý ?

Mám to zatím udělaný pomocí 2 php souborů - insert_car.php a insert_car_form.php. Rád bych tohle oddělení zachoval. Do insert_car.php pouze includuji insert_car_form.php (to je jen čistý HTML kód).

Zdroják insert_car.php je:
<?php
  
  if (isset($_POST['send'])) {

     if (strlen($_POST['name_type']) > 0) {
	$name_type = $_POST['name_type'];
      } else {
	echo '<div class="msg">Není zadán typ vozu</div>';
     }

     if (strlen($_POST['condition']) > 0) {
	$condition = $_POST['condition'];
      } else {
        echo '<div class="msg">Není zadán stav vozu</div>';
     }

     if (strlen($_POST['prod_year']) > 0) {
	$prod_year = $_POST['prod_year'];
      } else {
        echo '<div class="msg">Není zadán rok výroby</div>';
     }

     if (is_numeric($_POST['price'])) {
	$price = $_POST['price'];
      } else {
        echo '<div class="msg">Není zadána požadovaná cena nebo byla zadána jiná než číselná hodnota</div>';
     }

     if (strlen($_POST['description']) > 0) {
        $description = $_POST['description'];
      } else {
	echo '<div class="msg">Není zadán popis</div>';
     }

     if (strlen($_POST['add_info']) > 0) {
	$add_info = $_POST['add_info'];
      } else { 
        echo '<div class="msg">Nejsou zadány dodateÄŤnĂ&copy; informace</div>';
     }

     if ($name_type && $prod_year && $price && $description && $condition && $add_info) {

        $photos = 1;
	
	require_once ('initdb.php');
	
        $query = "INSERT INTO ".$tbl_prefix."karavany (`name_type`, `prod_year`, `description`, `condition`, `add_info`, `price`, `date_inserted`, `photos`)
	          VALUES ('".addslashes($name_type)."','".addslashes($prod_year)."','".addslash  es($description)."','".addslashes($condition)."','".addslashes($add_in  fo)."','".addslashes($price)."', NOW(),'".addslashes($photos)."')";
  
        $res = mysql_query($query);
        if ($res) {
	      echo '<div class="msg"><b>', mysql_affected_rows().' vůz byl přidán do databáze</b></div>';
	      return; * Tady by to podle mě nějak šlo, ale např. Header("Location") mi moc nepomohlo, zmizelo mi pak úplně předchozí echo 
           } else {
	      echo '<div class="msg"> sql $query error<br>' .mysql_error(),'</div>';
        }
        
       } else {
	echo '<div class="msg"><b>! Nejsou zadány všechny potĹ™ebnĂ&copy; hodnoty !</b></div>';
      } 
  }

?>

<?php
  require_once ('./insert_car_form.php');
  include ('./admin-footer.php');
?>
Mufna
Profil
A taky mi jde o to, aby platnost stránky vyplněním formuláře a odesláním dat do db vypršela.
Mastodont
Profil
Přesměrovat přes header, tady řešeno asi tisíckrát.
Mufna
Profil
Mastodont

A někde v tom místě, kde ho mám umístěný teď ?
Mastodont
Profil
Promiň, nevšiml jsem si, že to máš v kódu zmíněno. Header ti opravdu zlikviduje předchozí echa, čili pokud chceš po přesměrování něco vypsat, tak si to ulož do session. To místo máš v zásadě správně - jakmile máš zkontrolována a zapsána data, můžeš přesměrovat.
Mufna
Profil
Mastodont

A můžeš prosím alespoň naznačit, jak to do session mám uložit ? Přidat pouze nahoru do kódu session_start(); asi nepomůže, nebo jo ? Nemám např. zatím vůbec vyřešeno logování uživatelů, tam budu asi používat superglobální $_SESSION. Půjde to bez tohoto vyzkoušet ?
Mastodont
Profil
Když session, tak session_start() musíš volat na každé stránce. Poté již jednoduše
$_SESSION['něco'] = ...;

http://www.linuxsoft.cz/article.php?id_article=440
Mufna
Profil
Napadlo mě uložit výsledek - mysql_affected_rows() - do proměnné, a tu pak po přesměrování zavolat, ale zatím nevím, jak na to, aby to fungovalo. Něco jsem už zkoušel, ale nešlo to. A nebo mě napadlo umístit někam nahoru do skriptu nějaký switch {} a do Header("Location") pak nějak umístit odkaz na vyhovující hlášku (něco ve stylu - Header("Location: insert_car.php?hláška"). Ale zatím nevím, jak to udělat.

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: