2017-01-12 1 views
0

Ich muss die Seite in Sekunden aktualisieren, aber ich möchte den Zeitwert aktualisieren, der vom Benutzer eingegeben wird.
Dieser Code ist korrekt, aber einmal ausgeführt. Ich möchte es so lange ausführen, wie die Benutzerseite ausgegeben wird.
Ich weiß nicht, wie man einen Ring für schreibt.

Das ist mein HTML-CodeAktualisieren Sie die Seite in Sekunden, indem Sie die Zeit nehmen, um den eingegebenen Benutzer in PHP zu aktualisieren

<form class="form-inline" method="POST"> 
    <div class="form-group"> 
     <label for="text">Refresh page by secondes</label> 
     <input type="text" class="form-control" name="refresh-time"> 
    </div> 
    <button type="submit" class="btn btn-default"><i class="fa fa-pencil" ></i> Apply</button> 
</form> 

Das ist mein PHP-Code

 <?php 
     $pagename = 'لیست کلیه تماس ها';   
     require_once dirname(__FILE__) . '/header.php'; 

     if(isset($_POST['btnreferesh'])) 
     { 
      $p_call_loges->pages('20'); 
     } 

     if(isset($_POST['refresh-time'])) 
     { 

      header("Refresh:$time"); 

     } 


    ?> 
    <div id="page-wrapper"> 
     <div class="row"> 
      <div class="col-lg-12"> 
       <h2 class="page-header">لیست گزارش تماس ها</h2> 
      </div> 
      <!-- /.col-lg-12 --> 
     </div> 
     <!-- /.row --> 
     <div class="row"> 
      <div class="col-lg-12"> 
       <div class="panel panel-yellow"> 
        <div class="panel-heading"> 
         <div class="panel-title pull-right"> 
          <i class="fa fa-file-text" aria-hidden="true"></i> نمایش اطلاعات ثبت شده 
         </div> 
         <form method="POST"> 
          <button type="submit" name="btnreferesh" class="btn btn-default pull-left"><i class="fa fa-refresh" aria-hidden="true"></i> بازسازی فرم</button> 
         </form> 
         <div class="clearfix"></div> 
        </div> 
        <div class="panel-body"> 
         <table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example"> 
          <thead> 
           <tr> 
            <th class="text-right">نام و نام خانوادگی مبدا</th> 
            <th class="text-right">شماره موبایل مبدا</th> 
            <th class="text-right">نام و نام خانوادگی مقصد</th> 
            <th class="text-right">شماره موبایل مقصد </th> 
            <th class="text-right">زمان شروع</th> 
            <th class="text-right">مدت زمان مکالمه</th> 
           </tr> 
          </thead> 
          <tbody> 
           <?php $arr = $p_call_loges->pages('20'); if($arr) { foreach($arr as $row) { ?> 
           <tr class="odd gradeX"> 
            <td><?php echo $row['source_name_family']; ?></td> 
            <td><?php echo $row['source_mobile_num']; ?></td> 
            <td><?php echo $row['destination_name_family']; ?></td> 
            <td><?php echo $row['destination_mobile_num']; ?></td> 
            <td><?php echo $row['call_time']; ?></td> 
            <td><?php echo $row['duration']; ?> دقیقه</td> 
           </tr> 
           <?php } } else { ?> 
            <?php echo all_noting; ?> 
           <?php } ?>                  
          </tbody> 
         </table> 
         <!-- /.table-responsive --> 
        </div> 
        <!-- /.panel-body --> 
        <div class="panel-footer"> 
         <form class="form-inline" method="POST"> 
          <div class="form-group"> 
           <label for="text">بازسازی صفحه براساس ثانیه</label> 
           <input type="text" class="form-control" name="refresh-time"> 
          </div> 
          <button type="submit" class="btn btn-default"><i class="fa fa-pencil" ></i> ثبت</button> 
         </form> 
        </div> 
        <!-- /.panel-footer --> 
       </div> 
       <!-- /.panel --> 
      </div> 
      <!-- /.col-lg-12 --> 
     </div> 
     <!-- /.row --> 
    </div> 
    <!-- /#page-wrapper --> 
    <?php 
     require_once dirname(__FILE__) . '/footer.php';  
    ?> 
+1

So funktioniert HTTP nicht. Das Senden von unbegrenzten Refresh-Headern, bis der Browser nicht mehr über genügend Speicher verfügt, löst keine unendlichen Umleitungen aus. –

Antwort

1

Verwenden Sie Ihre formular der Benutzer zu lassen, das Timeout ein. Mit dem folgenden PHP-Snippet wird ein HTML-Refresh in Ihren HTML-Code eingefügt. Stellen Sie sicher, dass der Ausgang im Kopf-Tag platziert ist. Fügen Sie das angegebene Zeitlimit als get-Parameter in die Refresh-URL ein. Bei der folgenden Aktualisierung erhält das PHP-Snippet das Timeout erneut und der HTML-Refresh wird erneut eingefügt.

Da Ihr Formular die Daten mit Post sendet, müssen Sie die Variable $ _REQUEST verwenden, die die Daten von $ _POST, $ _GET und $ _COOKIE enthält.

Oder Sie ändern Ihr Formular zu GET und verwenden $ _GET ['Refresh-Zeit'].

+0

Vielen Dank für die Antwort, aber ich möchte Benutzer eingegeben Aktualisierungszeit – davOOd

+0

@davOOd Was ist das Problem, sie? Diese Antwort basiert auf Ihrem eigenen Code. –

+0

Das Timeout wird vom Benutzer eingegeben. Ich habe meine Antwort bearbeitet, um das deutlicher zu machen. – radicarl

1

Im Gegensatz zu FTP oder IRC ist HTTP ein zustandsloses Protokoll. In einfachen Worten bedeutet das, dass der Browser eine Netzwerkverbindung herstellt, nach einer Ressource fragt, die Antwort empfängt und die Verbindung schließt (das ist nicht immer der Fall, aber es reicht schon). Darüber hinaus kann eine Antwort nur eine Umleitung anfordern, da es nicht sinnvoll ist, an mehr als einen Ort umzuleiten.

Das Senden von HTTP-Headern in einer Endlosschleife führt nur zu einem Timeout oder Absturz des Browsers.

Ihre Seite muss einmal umgeleitet werden und die Zeitüberschreitungsinformationen beim nächsten Laden der Seite einschließen. Wenn Sie eine reine serverseitige Lösung wollen, müssen Sie die Informationen in diesen beiden übertragen:

  1. als GET-Parameter in der Umleitungs-URL
  2. Als Cookie
  3. Als Sitzungsdaten

Ich würde für # 1 gehen, da es der einzige Mechanismus ist, der tab-aware ist.

// Simplified untested code 
$url = 'http://example.com/foo.php'; 
$timeout = null; 
if (isset($_POST['refresh-time']) && $_POST['refresh-time']>0) { 
    $timeout = $_POST['refresh-time']; 
} elseif (isset($_GET['refresh-time']) && $_GET['refresh-time']>0) { 
    $timeout = $_GET['refresh-time']; 
} 
if (!is_null($timeout)) { 
    header(sprintf('Refresh: %2$d; URL=$1$s?refresh-time=%2$d', $url, $timeout)); 
    exit; 
} 
// HTML comes here (form included) 
Verwandte Themen