Autor Zpráva
Jirkasss
Profil *
Ahoj, mam problem s timto formularem:
<form  method=POST action="skript.php" enctype="multipart/form-data" >
 
  <input type="file" name="soubor"><br> 
      
  <input type="radio" name="filtr" value=  "ALL"  checked  > ALL     </br>
  <input type="radio" name="filtr" value=  "OPEN"   > OPEN </br>
  <input type="radio" name="filtr" value=  "CLOSE"  > CLOSE </br>
  <input type="radio" name="filtr" value=  "DROP"  > DROP </br>     
      
  <input type="hidden" name="formular_odeslan"> </br>
      
  <input type="submit"> 
           
</form> 


Odeslu textovy soubor, ten se mi zpracuje v php a zobrazi se mi do tabulky.Pak prepinam RadioButtony abych filtroval obsah tabulky.Musim ale pokazde, znovu zadat a odeslat soubor na ktery chci filtr aplikovat.Jak se toto resi?Popripade de nejak udelat aby se priprepnutu radiobuttonu nemusel klepat na submit?
Jozin
Profil *
Ahoj,

jedna možnost přidat do html:
<input type="hidden" value="<?= $_FILES['soubor']['tmp_name'] ?>" name="file">


ve skript.php, bych testoval, zda-li je zadán soubor, pokud ne, tak alespoň file...
Bohužel tento formulář už tedy není html, ale phtml.

Druhou možností je v skript.php na začátku zpracovávat:

session_start();
if(!isset($_POST['soubor'])) {
 if(!isset($_SESSION['soubor'])) die('Nebyl zadán soubor, ani není soubor uložen na serveru.');
 $soubor = $_SESSION['soubor'];
} else {
 $soubor = $_POST['soubor'];
}


a dále, kde bylo $_POST['soubor'] jen použít $soubor.

Snad jsem pomohl... nezkoušel jsem to u sebe, ale mělo by to fungovat a jestli to nebude fungovat, tak sem dej zdroják skript.php.

Ahoj, Jozin.
Jirkasss
Profil *
No session ty sesion chapu zatim jen teoreticky, ten kod mi moc smysl nedava zatim.Kdyz kouknu na to prvni tak to vypada jako takovy zacykleni mena toho souboru.Ale pridemi ze pri prvnim vypisovani formulare este neni definovany $_FILES['soubor']['tmp_name'], takze to hodi chybu.Nemam ted moznost vyskouset...
Jozin
Profil *
Ahoj,

když session nemusíš (respektive zatím neumíš), tak se kouknem na to phtml... Máš pravdu, že při prvním odesílání je $_FILES['soubor']['tmp_name'] prázdný, když to tak chceš řešit, tak bude muset být zpracování na stejném místě jako odeslání... tudíž nikoli action="skript.php", ale action='' nebo action="<?= $_SERVER['PHP_SELF'] ?>". Tento Phtml soubor pak includuješ do souboru skript.php a po prvním odeslání už nebudeš muset zadávat kde je soubor, nebo ho znovu uploadovat.

Mimo jiné ses ptal i na Ajax, tím bohužel nehovím, ale pokud by si to tak chtěl, tak bude možná lepší, před vstupem do "aplikace" nahrát soubor. To znamená oddělit ten začátek do jiného formuláře. Pak budeš moct pracovat s tím jedním souborem, ale s Ajaxem ti bohužel neporadím.

Jozin.
Jirkasss
Profil *
Jo pardon omlouvam se, neuvedl sem ze formular i skript mam v jednom.to action="scrip.php" je zavadejici, uz tam mam ""(sam na sebe).Porad mi to ale neni jasny... Muze te mi krok po kroku vysvetli co se bude dit od prvniho spusteni?Mim cilem je tedy mit dejmetomu jedno odesilaci tlacitko, vyberu soubor dam odeslat, nacte se mi soubor s aplikovanym filtrem ktery je zaskrtnut v radio.Ted chci zmenit radio buton a dam odeslat, a zahlasito ze ze soubor neexistuje, pokud nezadam zanova cestu.

<?PHP

/*INICIALIZACE PROMENE POLE_HTML PRO VYSTUP*/
$POLE_HTML = array();
$POLE_HTML["tab"] = "";
$POLE_HTML["errors"] = "";

if ( IsSet($_POST["formular_odeslan"]) )
{  
  if ( File_Exists(    $_FILES["soubor"]["tmp_name"]   )  )
  {
    if (is_readable($_FILES["soubor"]["tmp_name"]) )
    {
      /*POKUD DOSLO K ODESLANI SOUBORU A SOUBOR EXISTUJE A JE CITELNY NASLEDUJE ZPACOVANI TELA TABULKY*/
      $pole_radku = explode("\n",file_get_contents($_FILES["soubor"]["tmp_name"]));//Rozseka soubor na radky do $pole_radku
      $pocet_radku = count($pole_radku);
      if ($pocet_radku>4)//Kdyz je vsouboru naplnen minimalne 1 logem
      {
        $tbody = "";
        for ($i = 5; $i < $pocet_radku-1; $i++)//Projede vsechny radky az do konce souboru
        {
          $pole_bunek = explode(" ",$pole_radku[$i]);//Rozseka radek na bunky do $pole_radku 
          
          
          $pomocna=$pole_bunek[5];//zamena sloupcu
          $pole_bunek[5]=$pole_bunek[6];
          $pole_bunek[6]=$pomocna;
          
          if (($pole_bunek[2]==$_POST["filtr"]) || ($_POST["filtr"]=="ALL"))//Filtr
          { 
          
            switch ($pole_bunek[2])//obarvi radek podle akce firewalu
            {
              case "CLOSE":$tbody.="\n <tr bgcolor=F0F000>";break;     
              case "OPEN":$tbody.= "\n <tr bgcolor=00F000>";break;
              case "DROP":$tbody.= "\n <tr bgcolor=F0000>";break;
              case "OPEN-INBOUND":$tbody.= "\n <tr bgcolor=00F0A0>";break; 
            }
         
            for ($j = 0; $j < 17; $j++)//Projede bunky v radku
            {            
              $tbody.="<td>".$pole_bunek[$j]."</td>";//Nacpe bunky do radku
            }
            $tbody.= "</tr>";
          }
          
            
        }
      }
      
      /*ZPRACOVANI HLAVICKY TABULKY*/
      $pole_hlavicka = explode(" ",$pole_radku[3]);
      
      $pomocna=$pole_hlavicka[6];//zamena sloupcu
      $pole_hlavicka[6]=$pole_hlavicka[7];
      $pole_hlavicka[7]=$pomocna;

      $thead ="";
      for ($j = 1; $j < 18; $j++)
      {
        $thead.="<th>". $pole_hlavicka[$j] ."</th>";
      }
  
  
      /*PLNENI BUNKY POLE PRO VYPIS TABULKY*/  
      $POLE_HTML['tab'] = 
      '<table border="1">  
          <thead>
            <tr>'.$thead.'</tr>
          </thead>      
          <tbody>
            '.$tbody.'
          </tbody>      
       </table>';        
      
    }
    else $POLE_HTML['errors'] = "soubor nejde otevrit";  
  }
  else $POLE_HTML['errors'] = "soubor neexistuje";
}

?>






<html>

  <head>
  
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <title>PHP - LogReader</title>
    
  </head>

  <body>
  
    <form  method=POST enctype="multipart/form-data" >
      <input type="file" name="soubor"><br>     
      <input type="radio" name="filtr" value="ALL" checked > ALL </br>
      <input type="radio" name="filtr" value="OPEN" > OPEN </br>
      <input type="radio" name="filtr" value="OPEN-INBOUND" > OPEN-INBOUND </br>
      <input type="radio" name="filtr" value="CLOSE" > CLOSE </br>
      <input type="radio" name="filtr" value="DROP" > DROP </br>
      <input type="hidden" name="formular_odeslan"> </br>
      <input type="submit">         
   </form> 
   
   
    <br>

    <?php
      /*VYPSANI CELEHO VYSTUPNIHO POLE*/
      echo ($POLE_HTML["errors"]);
      echo ($POLE_HTML["tab"]);
    ?>
     
  </body>

</html> 
Jozin
Profil *
No tak nad tím tak přemýšlím...

Při odeslání formuláře se vytvoří tmp, ale při jeho opětovném odeslání se tmp smaže... to znamená, že musíš lokálně uložit soubor... například ho uložíš do souboru data.dat. A pokud nebyl zadán soubor, tak se mrkne do tohoto souboru, který sis vytvořil...

Nemám teď čas, tak se na zdroják kouknu později a zkusím to přepsat...

Zatím Jozin.
Jirkasss
Profil *
Tohle chapu, proste si ten poslanej soubor ulozim a snim pracuju pokud se neposle dalsi.ale v tom pripade by to chtelo nejak ty session, protoze bych pak otevrel dalsi okno a zacli by si navzajem prepisovali ten jeden soubor, a navic by tam ten soubory porad zustaval.kdezto po ukonceni sesion se smaze.jestli to pobiram... ?

Moderátor Chamurappi: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou a používej správně interpunkci.
Jozin
Profil *
Ano pobíráš to... je možné třeba posílat vygenerované ID a tak se pak jmenuje soubor... Má to ovšem za následek, že se budou množit soubory a proto je lepší SESSION, ale to si psal, že neumíš, tak jsem se v tom nechtěl pitvat. Nicméně SESSION je nejlepší řešení...
Jirkasss
Profil *
Tak sem udelal ty podminky, v podstate to co tady popisujes, akorat misto die vypisuju formular.Session se ukonci po nejake dobe sama,ze?takze se muze stat ze po nejake dobe necinosti dam aplikovat nejaky filtr a tabulka mi zmizi, a budu muset znova nacist soubor...
Jirkasss
Profil *
<?PHP
session_start();
// TEST ZADALI BYL FORM VUBEC ODESLAN
if ( IsSet($_POST["formular_odeslan"]) )
{ 
  // TEST ZADLI FORMULAREM NEBYL POSLAN PRAZDNY RETEZEC
  if(File_Exists($_FILES["soubor"]["tmp_name"])
  {
    // POKUD NE ULOZIM SI CESTU K SOUBORU DO SESSION A DO PROMENE SOUBOR
    //SE KTEROU PAK DALE PRACUJI
    $_SESSION["soubor"] = $_FILES["soubor"]["tmp_name"];
    $soubor = $_FILES["soubor"]["tmp_name"];    
  }
  else
  {
    //POKUD BYL POSLAN PRAZDNY RETEZEC
    //PODIVAM SE JESTLI NENI CESTA ULOZENA JIZ V SESSION
    if(isset[$_SESSION])
    {
      //POKUD CESTA JE ULOZENA V SESSION 
      //ULOZIM SI JI DO PROMENNE SOUBOR SE KTEROU DALE PRACUJI
      $soubor = $_SESSION["soubor"]; 
    } 
  }
  
  // TEST ZDALI SE CESTA OD PRVNIHO SPUSTENI VUBEC POSLALA
  //ZAROVEN ZDE TESTUJI JESTLI SOUBOR NA DANE CESTE ZE SESSION EXISTUJE
  if (File_exist($soubor))
  {
    //POKUD CESTA BYLA ZADANE A SOUBOR SE NASEL, TESTUJI ZDALI JE PRO CTENI
    if(file_readable($soubor))
    {
    
      // TELO SCRIPTU !!!
    
    } 
  }
} 
?>

Jozin
Profil *
Podle nastavení prohlížeče... ano může se stát, že jeden den budeš pracovat s logem a druhý den až příjdeš, tak už nepojede ;)
Jirkajirous
Profil *
nedari se mi to session.nevim jak ulozim soubor do session, nebo jak zjistim jeho jmeno

<?PHP

session_start();
// TEST ZADALI BYL FORM VUBEC ODESLAN
if ( IsSet($_POST["formular_odeslan"]) )
{ 


  // TEST ZADLI FORMULAREM NEBYL POSLAN PRAZDNY RETEZEC
  if(File_Exists($_FILES["soubor"]["tmp_name"]))
  {
    // POKUD NE ULOZIM SI CESTU K SOUBORU DO SESSION A DO PROMENE SOUBOR
    //SE KTEROU PAK DALE PRACUJI
    $soubor_name = $_FILES["soubor"]["tmp_name"];  
    $_SESSION["soubor"] = $_FILES["soubor"];
    echo("soubor byl ulozen do session<br>");
  }
  else
  { 
    echo("byl poslan prazdny retezec<br>");
    //POKUD BYL POSLAN PRAZDNY RETEZEC
    //PODIVAM SE JESTLI NENI CESTA ULOZENA JIZ V SESSION
    if(isset($_SESSION["soubor"]))
    {
      //POKUD CESTA JE ULOZENA V SESSION 
      //ULOZIM SI JI DO PROMENNE SOUBOR SE KTEROU DALE PRACUJI
      $soubor_name = $_SESSION["soubor"]["tmp_name"]; 
      echo("Byla nactena cesta k souboru v session<br>". $soubor_name);
    } 
  }
  
  
  // TEST ZDALI SE CESTA OD PRVNIHO SPUSTENI VUBEC POSLALA
  //ZAROVEN ZDE TESTUJI JESTLI SOUBOR NA DANE CESTE ZE SESSION EXISTUJE
  if (File_exists($soubor_name))
  {
  echo("soubor existuje<br>");
    //POKUD CESTA BYLA ZADANE A SOUBOR SE NASEL, TESTUJI ZDALI JE PRO CTENI
    if(is_readable($soubor_name))
    {
    echo("soubor je citelny<br>");
      // TELO SCRIPTU !!!
      echo ("TABULKA STALE ZIJE ;D");
    
    } 
  }
   
  
} 

?>



<html>

  <head>
  
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <title>TEST</title>
    
  </head>

  <body>
  
    <form  method=POST enctype="multipart/form-data" >
      <input type="file" name="soubor"><br>     
      <input type="hidden" name="formular_odeslan"> </br>
      <input type="submit">         
   </form> 
   
     <form  method=POST  >       
      <input type="radio" name="filtr" value="ALL" checked > ALL </br>
      <input type="radio" name="filtr" value="OPEN" > OPEN </br>
      <input type="radio" name="filtr" value="OPEN-INBOUND" > OPEN-INBOUND </br>
      <input type="radio" name="filtr" value="CLOSE" > CLOSE </br>
      <input type="radio" name="filtr" value="DROP" > DROP </br>
      <input type="hidden" name="Formular_filtr_odeslan"> </br>
      <input type="submit">         
   </form>   
   

     
  </body>

</html> 

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0