Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: KOlejność operacji...
Forum PHP.pl > Forum > PHP
szwabek
Witam,
mam problem z kolejnością operacji...
Problem wyglada tak, że:
- mam formularz:
Kod
<form action="jakis_adres?id=<?php echo $_GET['id']; ?>" method="post">

- zmienną pobieraną z bazy danych:
Kod
$access = $rek['access'];

- a w formularzu przyciski zależne od zmiennej:
Kod
             if($access=="1")
                 echo'
                     <div style="position: absolute; left:210px; top:170px; ">
                         <button type=\"submit\" name="button1" disabled=\"disabled\" value="wl">Włącz</button>
                         <button type=\"submit\" name="button2" value="wyl">Wyłącz</button>
                     </div>
                 ';
                
             if($access=="0")
                 echo'
                     <div style="position: absolute; left:210px; top:170px; ">
                         <button type=\"submit\" name="button1" value="wl">Włącz</button>
                         <button type=\"submit\" name="button2" disabled=\"disabled\" value="wyl">Wyłącz</button>
                     </div>
                 ';                
                 if (isset($_POST['button1']))
                 {
                     $access = "1";
                     mysql_query("UPDATE komputery SET access='$access' WHERE id='$idk' ") or die('Błąd zapytania');
                 }
                 if (isset($_POST['button2']))
                 {
                     $access = "0";
                     mysql_query("UPDATE komputery SET access='$access' WHERE id='$idk' ") or die('Błąd zapytania');
                 }


Założenie było następujące.
Jak klikam WŁĄCZ to: $access=1 ==> upadate w bazie; strona sie przeładowuje i chcę żeby teraz przycisk WYŁĄCZ był aktywny.
Tak się niestety nie dzieje... Muszę odświeżyć stronę, żeby zobaczyć oczekiwany rezultat (tzn żeby odpowiedni przycisk był aktywny).
Jak poradzić sobie z tym problemem?
Apocalyptiq
Hm, napierw wyświetlasz formularz, później wykonujesz operacje na bazie. Jeżeli klikniesz to włącz, załaduje się najpierw html (te przyciski) a następnie wykona ta operacja na bazie danych.

No i widzę że dajesz zewnętrzną chyba zmienną ($idk) bez żadnego zabezpieczenia - jeżeli jest to podawany przez użytkownika ciąg znaków, poczytaj o SQL Injection.
marcio
Np w tych ifa'ch jesli sie powiedzie operacja dodac cos w stylu:
  1. <?php
  2. header("Location:".$_SERVER['HTTP_REFERER']); // albo dodaj sztywny url jak wolisz
  3. ?>
szwabek
Robie tak:

Kod
<?php
   $_GET['id'] = mysql_escape_string($_GET['id']);
.... //jakiś kod php +html
?>

.... // jakiś kod html

<div style="position:relative">
             <form action="komputery_lista_details.php?id=<?php echo $_GET['id']; ?>" method="post">
             <?php

             $zap = mysql_query("SELECT * FROM komputery WHERE id='".$_GET['id']."' LIMIT 1;");
             $rek = mysql_fetch_assoc($zap);
             $idk = $_GET['id'];
             $access = $rek['access'];

// kod php + kod html ("reszta" formularza - który ma pobierać tylko dane z bazy danych)
//aż dochodzimy do miejsca:

<?php  
             if($access=="1")
                 echo'
                     <div style="position: absolute; left:210px; top:170px; ">
                         <button type=\"submit\" name="button1" disabled=\"disabled\" value="wl">Włącz</button>
                         <button type=\"submit\" name="button2" value="wyl">Wyłącz</button>
                     </div>
                 ';
                
             if($access=="0")
                 echo'
                     <div style="position: absolute; left:210px; top:170px; ">
                         <button type=\"submit\" name="button1" value="wl">Włącz</button>
                         <button type=\"submit\" name="button2" disabled=\"disabled\" value="wyl">Wyłącz</button>
                     </div>
                 ';
                                
                 if (isset($_POST['button1']))
                 {
                     $access = "1";
                     mysql_query("UPDATE komputery SET access='$access' WHERE id='$idk' ") or die('Błąd zapytania');
                 }
                 if (isset($_POST['button2']))
                 {
                     $access = "0";
                     mysql_query("UPDATE komputery SET access='$access' WHERE id='$idk' ") or die('Błąd zapytania');
                 }

                 ?>


EDIT:
Aaaa już tak nie robię:PP
marcio wielkie dzięki, Twoja metoda pomogła. Super :]
Apocalyptiq
Czyli najpierw wyświetlasz HTML, a później wykonujesz operacje na bazie - logiczne że przy przycisnięciu włącz na stronie nic się nie zmieni, bo w bazie zmiana zajdzie PO pokazaniu kodu html - po prostu zmień kolejnościami wyświetlanie html i operacje na bazie danych.
szwabek
Myślałem, że się zorientujesz po mojej odpowiedzi, że jest to ni możliwe.
Skoro wyświetlam html - formularz pobierający dane z bazy...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.