Autor Zpráva
Mufna
Profil
Zdravím Vás. Řeším odesílací skript s formulářem pro zápis do db (ten includuji) a chtěl bych zajistit, aby zpracování a všechny hlášky probíhaly na jedné stránce - insert_car.php. Už jsem vymyslel, že bych použil SWITCH, ale zatím mi to funguje pouze tak, že pokud umístím msg2 (! Nejsou zadány .... atd) někam nakonec, tak mi sice tahle hláška (pokud něco není OK) funguje, ale když je vše OK a položka se přidá, tak se mi vždy vypíšou obě hlášky současně. Jinak ten skript už je trochu ořezaný od všelijakých výpisů chyb (to už teď nepotřebuji), jde mi pouze o to, co uvidí uživatel. Pokud nevyplní formulář tak jak má, tak msg2, pokud ano, tak POUZE msg1.

Zkuste na to prosím někdo mrknout. Díky moc !

<?php
    $titul_stranky = 'Admin';
    include ('./admin-header.php');
    require_once ('./admin-menu.php');
?>

<?php

// Kam s ním? - Header("Location: insert_car.php?msg=2");

switch (addslashes($_GET["msg"])) {
    case 1:echo '<div class="msg"><b>Vůz byl přidán do databáze</b></div>';
    case 2:echo '<div class="msg"><b>! Nejsou zadány všechny potĹ™ebnĂ&copy; hodnoty !</b></div>';
}

  if (isset($_POST['send'])) {

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

... atd. pro všechny pole formuláře

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

     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) {
     	    Header("Location: insert_car.php?msg=1");
                    exit;
        }
      }  
  }

?>

<?php
  require_once ('./insert_car_form.php');
  include ('./admin-footer.php');
?>
Medvídek
Profil *
Zkusil bych break; ;-)

switch (addslashes($_GET["msg"]))
{
case 1: echo '<div class="msg"><b>Vůz byl přidán do databáze</b></div>'; break;
case 2: echo '<div class="msg"><b>! Nejsou zadány všechny potĹ™ebnĂ&copy; hodnoty !</b></div>'; break;
}
Mufna
Profil
Medvídek

Ach jo, no jo .... díky moc !
Mufna
Profil
Tak jsem si skript upravil a funguje mi, ale pouze na domácím EasyPHP. Takže pokud to přesunu na běžný hosting (kde neznám správce a tudíž nevím, zda mi pomůže, resp. vyhoví), tak mi to je k ničemu. Vím, že se jedná o problém s "headers already sent". Jde to nějak vyřešit ? Zkoušel jsem dát počáteční includované a requirované *.php soubory až na konec, ale pak to má ten háček, že se samozřejmě message objeví úplně nahoře. Já bych tam chtěl mít záhlaví admina a admin-menu. Taky jsem zkoušel pro ty hlášky použít absolutní pozicování v CSS, pak se mi sice zobrazilo záhlaví a menu tak, jak jsem chtěl (tzn úplně nahoře), ale problém nastal v tom, že se mi rozhodil zbytek stránky (formulář). Ten mám udělaný jako vycentrovaný, ale začal se zobrazovat vlevo. A po skončení paty jakoby pokračovalo záhlaví (mám v něm nastavenou jinou barvu než pro obsah admina).

Poradíte mi někdo, jak to upravit, resp. co můžu udělat, pokud bych to chtěl přesunout na běžný (placený) hosting ? Proč to EasyPHP bere a můj test na php5.cz ne ? Předem díky za odpověď !


<?php
  session_start();
  $titul_stranky = 'Admin';
  include ('./admin-header.php');
  require_once ('./admin-menu.php');
  require_once ('./error_handler.php');

  if (isset($_POST['send'])) {

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

     if (strlen($_POST['condition']) > 0) {
	$condition = stripslashes($_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 atd...</div>';
     }

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

     if (strlen($_POST['add_info']) > 0) {
	$add_info = stripslashes($_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) {
	Header("Location: insert_car.php?msg=1");
	exit;
     } else {
  	require_once ('initdb.php');

        $photos = 1;
	
        $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) {
     	    Header("Location: insert_car.php?msg=2");
	    exit;
	 } else {
	    Header("Location: insert_car.php?msg=3");
	    exit;
	}
      }
  }

switch (addslashes($_GET["msg"])) {

  case 1:echo '<div class="msg"><b>! Nejsou zadány všechny potĹ™ebnĂ&copy; hodnoty !</b></div>' ;break;    
  case 2:echo '<div class="msg"><b>Vůz byl přidán do databáze</b></div>';break;
  case 3:echo '<div class="msg"><b>Nezdařila se operace s databází - vůz nebyl přidán</b></div>';break;
}

?>

<?php
    require_once ('./insert_car_form.php');
    include ('./admin-footer.php');
?>

Medvídek
Profil *
Onoé je možné, že doma ti to funguje, já sem neměl třeba na profituxu dát session_start klidne do poloviny skriptu a fungovalo to i když se před to již něco vypisovalo.

Problém s "headers already sent" se tu řešil častokrát, dokonce i nedávno, tak zkus kouknout.
BetaCam
Profil
Zkus to nějak takhle

<?php
  session_start();
  $titul_stranky = 'Admin';
  
    if (isset($_POST['send'])) {
     if (!$name_type || !$prod_year || !$price || !$description || !$condition || !$add_info) {
	Header("Location: insert_car.php?msg=1");
	exit;
     } else {
  	require_once ('initdb.php');

        $photos = 1;
	
        $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) {
     	    Header("Location: insert_car.php?msg=2");
	    exit;
	 } else {
	    Header("Location: insert_car.php?msg=3");
	    exit;
	}
      }
  }
  
  include ('./admin-header.php');
  require_once ('./admin-menu.php');
  require_once ('./error_handler.php');

switch (addslashes($_GET["msg"])) {

  case 1:echo '<div class="msg"><b>! Nejsou zadány všechny potĹ™ebnĂ&copy; hodnoty !</b></div>' ;break;    
  case 2:echo '<div class="msg"><b>Vůz byl přidán do databáze</b></div>';break;
  case 3:echo '<div class="msg"><b>NezdaĹ™ila se operace s databázĂ- vĹŻz nebyl pĹ™idán</b></div>';break;
}

?>

<?php
    require_once ('./insert_car_form.php');
    include ('./admin-footer.php');
?>

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:

0