PHP: $ _GET değiştirerek, aynı sayfaya yönlendirelim

6 Cevap php

I have this PHP piece of code that gets $_GET['id'] (a number) and do some stuff with this. When its finished I need to increase that number ($_GET['id']) and redirect to the same page but with the new number (also using $_GET['id']).

Ben böyle bir şey yapıyorum:

$ID = $_GET['id'];

// Some stuff here

// and then:

$newID = $ID++;

header('Location: http://localhost/something/something.php?id='.$newID);
exit;

. Burada sorun, tarayıcı bunu yaparken beni durdurmak ve ben tarayıcı (Firefox) bu hatayı alıyorum ki: "sayfa sunucu şekilde bu adres için isteği yönlendirerek olduğunu Firefox algıladı düzgün yönlendirme olmadığını Tam asla. "

Bazıları burada lütfen yardım!

NOT: Bazı insanlar döngüsü için 'basit' demek, bir iç döngü yapmak için önerdi, ama ben bunu yaparken döngü bitirmek için daha fazla zaman alacak çünkü bir zaman sınırı hatası (60 saniye) olsun ..

6 Cevap

Peki cevabı bir 'for' döngü ve set_time_limit(0) 0 (sonsuz) için PHP deafult 60 saniye sınırını ayarlamak için ve tekrar aynı sayfaya yönlendirme değil kullanarak, benim localhost yerel bunu yapmak için tekrar.

Bu, sayfa yüklendiğinde, $_GET['id'] değiştirir ve yine kendisi yönlendirir, her zaman sonsuz bir döngü var. Sen değer (final) bunu nasıl olduğunu algılamak ve yönlendirme atlamak için bir yol gerekir.

I final kuruldu sayfa ikinci kez yüklediğinde, bu yönlendirmeyi atlıyor, çünkü böylece id, örneğin final olarak artmasından sonra ikinci bir parametre eklemek önermek .

yani:

if ($_GET['final'] != 1)
{
    header('Location: http://localhost/something/something.php?id=' . $newID . '&final=1');
}

Çünkü bence is, sonsuz bir döngüye tarayıcı.

Deftere bu kod üzerinde de ise something.php o zaman sayıyı artırmak olacaktır.

Ayrıca, ++ operatörü ($ID) otomatik olarak bu işlenen artacaktır çünkü $newID = $ID++ yapmak için hiçbir neden yoktur.

Ne istediğiniz döngü durdurmak için bazı mantık şeklidir. Belki de ...

if ($ID > 3) {
   // don't redirect
}

Ancak ben gerçekten iyi bir arka plan işlemi veya cron ile elde edilebilir bir şey yapmaya çalıştığınız sürece bir döngü olarak yönlendirme, hiç iyi bir fikir ne kadar göremiyorum.

Ben size ne yaptığınızı yeniden öneririm. Kendini geri yönlendiriliyor bir döngü devam etmek için gerekli bir kullanıcı girişi olmadan, bir kez daha asla olmayacak.

En kısa sürede tarayıcı KİT bile ufak olasılığı ve sonsuz bir döngü gibi onu kilitlenmesine. Eğer varsa bile if ($ ID == 100) {.. DUR ..} Eğer tarayıcı zaten döngü kırılmış olacak, endüstri standartlarına göre, o hemen kötü bir tasarım olarak kabul edilir çünkü ve bu yüzden 100 ulaşmak zaman Tarayıcınız zaten başlamak için böyle bir şeyi durdurmak için programlanmıştır.

Eğer gerçekten bu döngü ile yapmak için çalışıyoruz ne paylaşabilirsiniz. Birisi bu şekilde yapmadan ne istediğinizi elde etmek için bir yolu vardır eminim.

UPDATE TO COMMENT

Sonra AJAX veya PHP API içine bakmak isteyebilirsiniz. Ben bir döngü aksine kontrollü bir ortamda yapılması gerektiğini, ne demek görmek ve yapmak istiyorum. Tarayıcı döngü bu tür asla izin vermeyeceğiz. Yani, bunu yapmak için birkaç yolu vardır. Sen php başka bir kaynaktan tek bir kaynaktan içerik ajaxify size bir sayfa sunar bir istemci tarafı yöntemi ile yapabilirsiniz. Ya kesinlikle içeriği alıp doğrudan sunucuya geri getirmek için php API yöntemleri kullanarak php. Ancak, ne durumda bir başlayanlar kavramdır. :) Ne demek istediğimi biliyorum.

ob_start();
session_start(); 


if (  $_SESSION["id_old"] == $_GET['id']){ return false;}

 $ID = $_GET['id'];
 $newID = ++$ID;

 $_SESSION["id_old"]= $newID;


 header('Location: http://localhost/something/something.php?id='.$newID);

exit;

? testi localhost / şey / something.php id = 22 -> localhost / şey / something.php id = 23 return false;

Eğer harici bir kaynaktan veri büyük miktarda kazımak için çalıştığınız gibi görünüyor. Neden bunu kendi bilgisayarınızda yerel bir komut dosyası olarak yerine tarayıcı üzerinden çalıştırmak değil mi? Sonra da komut dosyası zaman aşımına veya tarayıcı sonsuz yönlendirmeler algılama hakkında endişelenmenize gerek yok.