Autor Zpráva
holi
Profil
Zdravím,
věřím že se to určitě řešilo, ale nemůžu to najít. Jak mám zajistit to aby se stránka po vyhodnocení scriptu refreshla jen jednou. Používám na refresh

<?php
header("Refresh:0");
?>
Ale jde tu o to že když tam ten refresh nedám, tak se na stránce neprojeví grafické změny, které se mají vytisknout pomocí onoho vyhodnoceného scriptu.
Můj konkrétní případ je že mám ve formuláři checkboxi. Odešlu script do databáze že jsou zaškrtnuty a chci aby okamžitě po vyhodnocení tohoto scriptu, byly zaškrtnuty. Bohužel se zaškrtnou až po refreshy stránky.

Dík za odpovědi popř linky.
Tori
Profil
holi:
Jak máte sestavený ten skript? Nejdřív bych dala vyhodnocení formuláře (pokud byl odeslaný) a až potom načtení dat z DB a zobrazení. Nepomohlo by to?
holi
Profil
No myslím že to nedokáži vysvětlit tak tady je příklad kódu

function get_categories_checkboxes( $selected_cats = null ) {
    $all_categories = get_categories($args);
    $o = '<form method="POST"><ul style="margin-left:12px">';
    foreach($all_categories as $key => $cat) {
        if($cat->parent == "0") $o .= __show_category($cat, $selected_cats);
    }
    return $o . '</ul><input type="submit" name="submit" value="Uložit"></form>';
}

function __show_category($cat_object, $selected_cats = null) {
    $checked = "";
    if(!is_null($selected_cats) && is_array($selected_cats)) {
        $checked = (in_array($cat_object->cat_ID, $selected_cats)) ? 'checked="checked"' : "";
    }
    $ou = '<li><label><input ' . $checked .' type="checkbox" name="cats[]" value="'. $cat_object->cat_ID .'" /> ' . $cat_object->cat_name . '</label>';
    $childs = get_categories('parent=' . $cat_object->cat_ID);
    foreach($childs as $key => $cat) {
        $ou .= '<ul style="margin-left:12px">' . __show_category($cat, $selected_cats) . '</ul>';
    }
    $ou .= '</li>';
    return $ou;
  }
  $zaznamy = mysql_query("SELECT id_cat FROM ".$wpdb->prefix."related_art");
  $vysledek = mysql_fetch_row($zaznamy);
  echo get_categories_checkboxes($vysledek);
  
  if(!empty($_POST["submit"])){
    if(isset($_POST["cats"])){
      header("Refresh:0;");
      $cat = $_POST["cats"];
      $kontrola = implode(", ", $cat); 
      
      mysql_query("DELETE FROM ".$wpdb->prefix."related_art WHERE id_cat NOT IN (".$kontrola.")");
      
      foreach($cat as $key => $id){
        if(!in_array($id, $vysledek)){
          mysql_query("INSERT INTO ".$wpdb->prefix."related_art(id_cat) VALUES(".$id. ")");
        }
      }
    }
    else{
      header("Refresh:0;");
      mysql_query("DELETE FROM ".$wpdb->prefix."related_art");
    }
    
  }
Alutom
Profil
Myslím, že by to mohlo být tím, že refresh provádíte ještě před uložením dat do databáze, přičemž logicky by to mělo být opačně.

  // ...

  if(!empty($_POST["submit"])){
    if(isset($_POST["cats"])){ 
      $cat = $_POST["cats"];
      $kontrola = implode(", ", $cat); 
      mysql_query("DELETE FROM ".$wpdb->prefix."related_art WHERE id_cat NOT IN (".$kontrola.")");
      foreach($cat as $key => $id){
        if(!in_array($id, $vysledek)){
          mysql_query("INSERT INTO ".$wpdb->prefix."related_art(id_cat) VALUES(".$id. ")");
        }
      }
    }
    else mysql_query("DELETE FROM ".$wpdb->prefix."related_art");
    header("Refresh:0;"); // obnovení stránky...
  }

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: