NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
michal Čepelák:4.10.2017 16:16

Zdravím,
mám formulář kde updatuji data při editaci. Když mám zaplou editaci a dám refresh tak se mi to zůstane na editaci a nevypne se editace. Co dopsat aby se to po refresh vypnulo.

 if (isset($_REQUEST["editujhw"])){
       $_SESSION["edituj"]= htmlspecialchars($_REQUEST["idhw"],ENT_QUOTES);
   }
   if (isset($_REQUEST["cancel"])){
       unset($_SESSION["edituj"]);
   }

if (isset($_REQUEST["savehw"]))
   {
 Db::connect();
 $edit =  Db::query('UPDATE servis_hw SET ticket=?, snhw=?, typhw=?, zavadahw=?, opravahw=?,opravilhw="'.$_SESSION["oprava_id"].'", oprcenahw=? WHERE idhw=?', $_POST['ticket'], $_POST['snhw'], $_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'],$_POST['idhw']);



   header("Location: servishw3new.php");
   unset($_SESSION["edituj"]);

   }

tady je formulář

foreach ($servisHW as $hw)
         {
              if ((isset($_SESSION["edituj"])) and ($hw['idhw']==$_SESSION["edituj"])){
                  echo '
                      <tbody>
                <tr>
                <td><form method="POST"><input name="idhw" type="hidden" value="'.$hw['idhw'].'">' . htmlspecialchars($hw['idhw']).'</td>
                <td>' . htmlspecialchars($hw['datum']).'</td>
                <td><input type="text" name="ticket" value="' . htmlspecialchars($hw['ticket']).'" /></td>
                <td><input type="text" name="snhw" value="' . htmlspecialchars($hw['snhw']).'" /></td>
                <td><input type="text" name="typhw" value="' . htmlspecialchars($hw['typhw']).'" /></td>
                <td><input type="text" name="zavadahw" value="' . htmlspecialchars($hw['zavadahw']).'" /></td>
                <td><input type="text" name="opravahw" value="' . htmlspecialchars($hw['opravahw']).'" /></td>
                <td>' . htmlspecialchars($hw['uziv_jmeno']).'</td>
                <td><input type="text" name="oprcenahw" value="' . htmlspecialchars($hw['oprcenahw']).'" /></td>
                <td>
                  <button name="savehw" class="circular ui positive basic icon button" title="Uložit"><i class="ui save icon"></i></button>
                  <button name="cancel" class="circular ui negative basic icon tiny button" title="Zruš"><i class="ui remove icon " ></i></button>
       </td>
           </form></td></tr></tbody>

                      ';
              }else{
             echo('<tbody>
                <tr>
                <td><form method="POST"><input name="idhw" type="hidden" value="'.$hw['idhw'].'">' . htmlspecialchars($hw['idhw']).'</td>
                <td>' . htmlspecialchars($hw['datum']).'</td>
                <td>' . htmlspecialchars($hw['ticket']).'</td>
                <td>' . htmlspecialchars($hw['snhw']).'</td>
                <td>' . htmlspecialchars($hw['typhw']).'</td>
                <td>' . htmlspecialchars($hw['zavadahw']).'</td>
                <td>' . htmlspecialchars($hw['opravahw']).'</td>
                <td>' . htmlspecialchars($hw['uziv_jmeno']).'</td>
                <td>' . htmlspecialchars($hw['oprcenahw']).'</td>
                <td>



       <button name="editujhw"   class="circular ui red basic icon tiny button" title="Editovat cenu" onClick="edit()"  ><i class="ui edit icon"></i></button>
       <button name="delhw" onClick="return deletHw();" class="circular ui red basic icon tiny button" title="smazat cenu" ><i class="ui trash icon " ></i></button>

       </td>

       </form>
                   </tr>
                </tbody>
               ');
         }
         }

Děkuji za rady zkušenejším

Editováno 4.10.2017 16:18
 
Odpovědět
4.10.2017 16:16
Avatar
Rastislav Kopál:5.10.2017 22:14

Ahoj, nemôžeš priamo zistiť refreshnutie stránky, ale možeš na to skúsiť použiť cookies

if (isset($_COOKIE['action'])) {
  // akcia už prebehla
} else {
  setcookie('action');
  // spustiť požiadavku(query)
}

a závisí od tvojich požiadaviek... musíš rozhodnúť kedy cookies vymazať a/alebo spustiť akciu znova.

alebo nejako takto ... nastavíš si session cookie a potom musíš použiť podmienky

<?php
session_start();

if (!$_SESSION['loaded'])
{
    // sem vlož svoj kod(požiadavky)
}

$_SESSION['loaded'] = true;

?>
Nahoru Odpovědět
5.10.2017 22:14
"Make Things As Simple As Possible, But Not Simpler." - Albert Einstein
Avatar
Rastislav Kopál:5.10.2017 22:19

Alebo ak nechceš použiť cookies a ani session, môžeš to skusiť cez php + ajax + javascript

function runQUERY()
{
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("POST","doIT.php",false);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
}

a javaScriptom jednoducho skontroluješ, či stránka bola refresnuta

<head>
<script type="text/javascript">
function checkRefresh()
{
    if( document.refreshForm.visited.value == "" )
    {
        // This is a fresh page load
            alert ( 'Fresh Load' );
        document.refreshForm.visited.value = "1";
            ..call you AJAX function here
    }
    else
    {
        // This is a page refresh
        alert ( 'Page has been Refreshed, The AJAX call was not made');

    }
}
</script>
</head>

<body onLoad="checkRefresh()">

<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>

</body>
</html>

a potom normálne v php

<?php
mysql_query("UPDATE---------");
//put any code here, i won't run on any page refresh
?>

(toto som našiel na StackOf)

Nahoru Odpovědět
5.10.2017 22:19
"Make Things As Simple As Possible, But Not Simpler." - Albert Einstein
Avatar
Dominik Gavrecký:6.10.2017 2:15

Prepáč čítam to uz 5 krát a stale nerozumiem v com je problém. Skús to popísať trosku lepšie a určite nájdeme riešenie tvojho problému :)

Nahoru Odpovědět
6.10.2017 2:15
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Marian Benčat:6.10.2017 8:17

Osobně si myslím, že popsal strašně debilním způsobem problém s absencí PRG patternu u něj:

https://en.wikipedia.org/…Redirect/Get

Na druhou stranu u něj vidím ten redirect:
header("Location: servishw3new.php");

takže vlastně nevim :D

Editováno 6.10.2017 8:18
Nahoru Odpovědět
6.10.2017 8:17
Totalitní admini..
Avatar
Jirka Jr
Člen
Avatar
Jirka Jr:11.10.2017 11:58

tak jsem se na to vyspal :-) a myslim, ze reseni je jednoduche.

staci nepouzivat $_SESSION['edituj'] a misto

$_SESSION["edituj"]= htmlspecialchars($_REQUEST["idhw"],ENT_QUOTES);

tam dej

$edituj = htmlspecialchars($_REQUEST["idhw"],ENT_QUOTES);

a pak vsude misto $_SESSION['edituj'] pouzij to $edituj.

tj. polozka hw bude editovatelna jen na strance, ktera vykreslila editovaci formular po kliknuti na jeji tlacitko "Editovat cenu".

a tim padem ve chvili, kdy uzivatel da refresh a nebo odejde na jinou stranku, zrusi se editace

ALE ...

pokud naopak chces, aby dany radek s hw polozkou zustal editovatelny

  • dokud uzivatel nezavre prohlizec
  • nebo dokud nestiskne tlacitko cancel

a mezitim si mohl v tom samem tabu brouzdat, jak se mu zachce a kdykoli se vratit na editovaci stranku bez nutnosti klikat na editovaci tlacitko, tak to nech, jak to mas

ALE ...

neco mi rika, ze tebou pozadovane chovani bude neco mezi radky, co jsi nam tu nenapsal.

tedy ze chces zabranit konkretnimu problemu, ktery uzivatel aplikace zpusobuje a je treba tomu zabranit
nebo ze neco uzivatele stve a ty to chces upravit, aby to uzivatele nestvalo ....

muzes sem napsat, k jakemu problemu dochazi a proc chces kod menit?

bude pak snazsi vymyslet nejake fikane reseni :-)

 
Nahoru Odpovědět
11.10.2017 11:58
Avatar
Odpovídá na Jirka Jr
michal Čepelák:11.10.2017 14:15

omlouvám se za špatné vyjadřování.
Jde o to že mám více stránek za sebou kde lze editovat a pokud je stránce stejné id (i když je proměná id na každé stránce pod jiným názvem) tak se mi po přepnutí na další stránku objeví editace na nové stránce pod stejným id jako na předchozí stránce.

 
Nahoru Odpovědět
11.10.2017 14:15
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na michal Čepelák
Jirka Jr:11.10.2017 15:24

takze predpokladam, ze tech vice stranek znamena co stranka, to jedna polozka hw v te tabulce...

tak pak je nejjednodussi to, co jsem napsal na zacatku mojeho prispevku ... tedy ukladat to id do promenne $edituj a ne do $_SESSION['edituj']

tim je ta promenna platna jen pro request, ve kterem se vykresli ten editacni formular a ne az do zavreni prohlizece nebo vyprseni session.

a jeste je samozrejme potreba zmenit chovani requestu na tlacitko cancel, ktere uz nerusi promennou v session, ale pouze reloaduje stranku ... protoze v requestu je jen 'cancel' a ne 'editujhw', tak se zrusi editace

uprava prvniho bloku kodu:

if (isset($_REQUEST["editujhw"])){
        // promenna misto polozka v $_SESSION
       $edituj= htmlspecialchars($_REQUEST["idhw"],ENT_QUOTES);
   }

// nasledujici uz neni potreba, protoze promenna $edituj plati jen pro jeden request
// na jehoz konci je automaticky zrusena
/*  if (isset($_REQUEST["cancel"])){
       unset($_SESSION["edituj"]);
   }
*/

if (isset($_REQUEST["savehw"]))
   {
 Db::connect();
 $edit =  Db::query('UPDATE servis_hw SET ticket=?, snhw=?, typhw=?, zavadahw=?, opravahw=?,opravilhw="'.$_SESSION["oprava_id"].'", oprcenahw=? WHERE idhw=?', $_POST['ticket'], $_POST['snhw'], $_POST['typhw'],$_POST['zavadahw'],$_POST['opravahw'],$_POST['oprcenahw'],$_POST['idhw']);



   header("Location: servishw3new.php");

    // toto uz neni potreba
   //unset($_SESSION['editujhw']);
   }

uprava druheho bloku kodu:

foreach ($servisHW as $hw)
         {
                // tady staci jen overit, ze se jedna o reakci na tlacitko "Edituj cenu"
                // a ze se vykresluje formular pro pozadovany radek/id
              if ((isset($_REQUEST["editujhw"])) and ($hw['idhw']==$edituj)){
                  echo '
                      <tbody>
                <tr>
                <td><form method="POST"><input name="idhw" type="hidden" value="'.$hw['idhw'].'">' . htmlspecialchars($hw['idhw']).'</td>
                <td>' . htmlspecialchars($hw['datum']).'</td>
                <td><input type="text" name="ticket" value="' . htmlspecialchars($hw['ticket']).'" /></td>
                <td><input type="text" name="snhw" value="' . htmlspecialchars($hw['snhw']).'" /></td>
                <td><input type="text" name="typhw" value="' . htmlspecialchars($hw['typhw']).'" /></td>
                <td><input type="text" name="zavadahw" value="' . htmlspecialchars($hw['zavadahw']).'" /></td>
                <td><input type="text" name="opravahw" value="' . htmlspecialchars($hw['opravahw']).'" /></td>
                <td>' . htmlspecialchars($hw['uziv_jmeno']).'</td>
                <td><input type="text" name="oprcenahw" value="' . htmlspecialchars($hw['oprcenahw']).'" /></td>
                <td>
                  <button name="savehw" class="circular ui positive basic icon button" title="Uložit"><i class="ui save icon"></i></button>
                  <button name="cancel" class="circular ui negative basic icon tiny button" title="Zruš"><i class="ui remove icon " ></i></button>
       </td>
           </form></td></tr></tbody>

                      ';
              }else{
             echo('<tbody>
                <tr>
                <td><form method="POST"><input name="idhw" type="hidden" value="'.$hw['idhw'].'">' . htmlspecialchars($hw['idhw']).'</td>
                <td>' . htmlspecialchars($hw['datum']).'</td>
                <td>' . htmlspecialchars($hw['ticket']).'</td>
                <td>' . htmlspecialchars($hw['snhw']).'</td>
                <td>' . htmlspecialchars($hw['typhw']).'</td>
                <td>' . htmlspecialchars($hw['zavadahw']).'</td>
                <td>' . htmlspecialchars($hw['opravahw']).'</td>
                <td>' . htmlspecialchars($hw['uziv_jmeno']).'</td>
                <td>' . htmlspecialchars($hw['oprcenahw']).'</td>
                <td>



       <button name="editujhw"   class="circular ui red basic icon tiny button" title="Editovat cenu" onClick="edit()"  ><i class="ui edit icon"></i></button>
       <button name="delhw" onClick="return deletHw();" class="circular ui red basic icon tiny button" title="smazat cenu" ><i class="ui trash icon " ></i></button>

       </td>

       </form>
                   </tr>
                </tbody>
               ');
         }
         }

jen nevim, kde se nastavuje $_SESSION["opra­va_id"] a co se s ni vsechno dela, tak jsem to tam nechal

jo a kdyz takhle pouzijes jen obycejnou promennou $edituj misto polozky v $_SESSION ....
tak po reloadu nebo prechodu na dalsi stranku se samozrejme krome zruseni editace aj ztrati rozepsane hodnoty z formulare, ktere nebyly potvrzeny tlacitkem savehw ...
proste tam na dalsi strance bude zas to, co uz je v databazi

pokud bys chtel nejake zapamatovavani rozepsanych hodnot, to by pak chtelo ponekud predelat a zapojit aj nejaky javascript, ale to je asi tema na dalsi diskuzni vlakno

 
Nahoru Odpovědět
11.10.2017 15:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.