2011-09-19 17 views
39

मैं वर्तमान में डेटाबेस के साथ PHP सत्रों का उपयोग कर प्रमाणीकरण के साथ एक मोबाइल साइट पर काम कर रहा हूं। मेरे पास एक फॉर्म के साथ एक लॉगिन पृष्ठ है जो सबमिट पर server_login.php पर जाता है। php फ़ाइल फिर कुछ सत्र डेटा ($ _SESSION में स्टोर) बनाता है, और उपयोगकर्ता सूचकांक पृष्ठ पर वापस पुनर्निर्देश:PHP शीर्षलेख (स्थान: ...): पता बार में बल यूआरएल परिवर्तन

header("location:../../index.php"); 

नए वेब पेज (index.php) भार सही ढंग से; हालांकि, जब हेडर पृष्ठ को रीडायरेक्ट करता है, तो पता बार पर यूआरएल नहीं बदला जाता है; //localhost/php/server/server_login.php* http के बजाय: यह * http में रहता है और इस तरह मेरे सभी अन्य संसाधनों है कि बनाता है //localhost/index.php रिश्तेदार पथ के उपयोग लोड नहीं किया जा सकता है। ऐसा लगता है कि वेब पेज अभी भी सोचता है कि यह/बजाय/php/सर्वर पर रहता है।

अजीब, शीर्ष लेख के मेरे अन्य प्रयोग ("स्थान: ...") logout.php काम करता है पर और पृष्ठ सफलतापूर्वक एक यूआरएल को बदलने के साथ पुनर्निर्देश।

मैंने यह सुनिश्चित कर लिया है कि हेडर रीडायरेक्ट से पहले मेरे * server_login.php * में कोई आउटपुट नहीं है (इसके ऊपर केवल MySQL कॉल करने के लिए कॉल हैं) और मैंने ob_start() और ob_end_flush() भी उपयोग किया है।

वहाँ रहे हैं बदलने के लिए पता पट्टी पर यूआरएल के लिए मजबूर कर के किसी भी तरीके (और इस तरह उम्मीद है कि रिश्तेदार पथ समस्या को ठीक)? या मुझ से कुछ गलत हो रहा है?

पी/एस: मैं jQuery मोबाइल का उपयोग कर रहा हूँ।

संपादित करें: सर्वर एक सही पुनर्निर्देशन हेडर भेजता है, तो

// some other stuff not shown 


$sql = "SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'"; 
$login_result = mysql_query($sql, $connection); 

$count = mysql_num_rows($login_result); 

if ($count == 1) { 

    // Successfully verified login information 

    session_start(); 

    if (!isset($_SESSION['is_logged_in'])) { 
     $_SESSION['is_logged_in'] = 1; 
    } 

    if (!isset($_SESSION['email'])) { 
     $_SESSION['email'] = $myemail; 
    } 
    if (!isset($_SESSION['password'])) { 
     $_SESSION['password'] = $mypassword; 
    } 

    // Register user's name and ID 
    if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { 
     $row = mysql_fetch_assoc($login_result); 
     $_SESSION['name'] = $row['name']; 
     $_SESSION['user_id'] = $row['user_id']; 
    } 

    header("Location: http://localhost:8080/meet2eat/index.php"); 

} else { 
    // Not logged in. Redirect back to login page 
    header("Location: http://localhost:8080/meet2eat/php/login.php?err=1"); 

} 
+1

क्या आप कोड दिखा सकते हैं कि आप डेटा कैसे पोस्ट करते हैं? – xdazz

उत्तर

26

खैर, ब्राउज़र को और इसलिए "URL परिवर्तन": यहाँ पुनर्निर्देशन कि URL नहीं बदलता है के लिए मेरे कोड है। यह तब एक ब्राउज़र मुद्दा हो सकता है। मुझे नहीं पता कि इसके साथ क्या करने के लिए कुछ भी है, लेकिन आपको स्थान शीर्षलेख में एक सापेक्ष यूआरएल नहीं भेजना चाहिए ("HTTP/1.1 को एक पूर्ण यूआरआई के लिए तर्क के रूप में आवश्यकता है» स्थान: योजना, होस्टनाम और पूर्ण पथ सहित , लेकिन कुछ ग्राहकों रिश्तेदार यूआरआई स्वीकार ", http://php.net/manual/en/function.header.php), और", स्थान "पूंजीकृत किया जाना चाहिए की तरह:।

header('Location: http://myhost.com/mypage.php'); 
+0

मैं देखता हूं। मैंने कोड तय किया है (ऊपर दिखाया गया है), लेकिन मुझे अभी भी वही यूआरएल त्रुटि मिल रही है। :/मैंने HTTP प्रमाणीकरण में बदल दिया है क्योंकि मुझे एहसास हुआ कि यह मेरी असाइनमेंट आवश्यकता का हिस्सा है, लेकिन मैं अभी भी इस अजीब 'बग' से चिंतित हूं। – vemoxy

+0

क्या आपने ब्राउज़र बग को बाहर करने के लिए विभिन्न ब्राउज़रों का प्रयास किया है? – schneck

+0

नोट करें कि 'कैच-ऑल' की तरह जो कि WP की रूट में सामान्य है। Htacces: रीवाइटकंड% {REQUEST_FILENAME}! -f रिवाइटकंड% {REQUEST_FILENAME}! -d रिवाइटरूल। /index.php [एल] चेक (यानी।लॉगिंग के माध्यम से) यदि आपको रीडायरेक्ट के बाद दो पास मिलते हैं, तो आपके जानबूझकर रीडायरेक्ट (index.php द्वारा फिर से पकड़ा गया) और उसके बाद एक और जो इसे गलत हो जाता है ... add_filter ('[pre_] option_siteurl | home' को कार्यान्वित करना); चतुर्भुज नई जगह को लागू करने में मदद कर सकता है ... –

6

मैं एक रूप पोस्टिंग के साथ एक ही समस्या थी। मैंने जो किया वह डेटा-एजेक्स को बंद कर रहा था।

+0

यह सुनिश्चित नहीं है कि यह क्यों मतदान किया गया था, वह सही है। Jquery मोबाइल के साथ करना होगा। http://stackoverflow.com/questions/8403242/php-header-and-jquery-mobile/8403345#8403345 – kackleyjm

+0

एक ही समस्या थी। आपको केवल उस तत्व पर डेटा-एजेक्स जोड़ने की आवश्यकता है जिसके लिए AJAX की आवश्यकता नहीं है (उदा।, लिंक) ताकि jQuery मोबाइल हस्तक्षेप न करे ... भले ही यह jQuery मोबाइल ब्लॉक/फ़ॉर्म में न हो। – Andy

53

बदलने का प्रयास करें:

header("Location : blabla") 
       ^
       | 
      (whitespace) 

header("Location: blabla") 
17

करने के लिए अपने प्रपत्र तत्व में data-ajax="false" जोड़ें। मुझे jquery मोबाइल का उपयोग कर एक ही समस्या थी।

+0

मैं jquery मोबाइल का उपयोग करते समय हमेशा इसे भूल जाता हूं! मेरे लिए काम किया;) – Bugdr0id

+0

मुझे एक ही समस्या मिली। यह 'डेटा-AJAX = झूठा' मेरे मामले में काम किया। – hyip

+0

मेरे लिए काम किया। – merlin

-7

क्यों इस स्थान यूआरएल के सभी?

http://localhost:8080/meet2eat/index.php 

तुम सिर्फ

index.php 

उपयोग कर सकते हैं php फ़ाइलें एक ही फ़ोल्डर में हैं और क्योंकि अगर आप फ़ाइलों होस्ट या पोर्ट बदलना आप कोई समस्या नहीं होगा करना चाहते हैं यह बेहतर है इस यूआरएल तक पहुंचे

+1

बात यह है कि 'index.php' एक ही फ़ोल्डर में नहीं है। – icedwater

-3

आप अगर यह किसी अन्य फ़ोल्डर

4

में header(Location:../index.php) की तरह उपयोग करने के लिए किसी भी सफेद स्थान का प्रयोग न करें लगता है कर रहे हैं। मेरी भी यही समस्या थी। फिर मैंने सफेद जगह को हटा दिया:

header(location:index.php); 

फिर यह काम किया।

1

क्या आप सुनिश्चित हैं कि जिस पृष्ठ पर आप रीडायरेक्ट कर रहे हैं, उसमें कोई रीडायरेक्शन नहीं है यदि कोई सत्र डेटा नहीं मिला है? यह आपकी समस्या हो सकती है

इसके अलावा हाँ हमेशा @ पीटर ओ सुझाए गए व्हाइटस्पेस को जोड़ते हैं।

0

मैं तुम्हारे लिए एक समाधान है, तुम क्यों नहीं बल्कि विस्फोट का उपयोग न यदि आपके url

Url-> website.com/test/blog.php

$StringExplo=explode("/",$_SERVER['REQUEST_URI']); 
$HeadTo=$StringExplo[0]."/Index.php"; 
Header("Location: ".$HeadTo); 
-3

उपयोग

की तरह कुछ है

शीर्षलेख ("स्थान: index.php"); // यह साइट मेरी साइट

PHP दस्तावेज़ पर header() पर और पढ़ें।

+0

अन्य उत्तरों पहले से ही बताते हैं कि – Bowdzone

0

बस अपने पसंद के हिसाब से घर बदल

$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/home'; 

header('Location: ' . $home_url); 
1

// रजिस्टर उपयोगकर्ता का नाम और आईडी

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { 
    $row = mysql_fetch_assoc($login_result); 
    $_SESSION['name'] = $row['name']; 
    $_SESSION['user_id'] = $row['user_id']; 
} 

header("Location: http://localhost:8080/meet2eat/index.php"); 

परिवर्तन

को

// रजिस्टर उपयोगकर्ता का नाम और आईडी

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { 
    $row = mysql_fetch_assoc($login_result); 
    $_SESSION['name'] = $row['name']; 
    $_SESSION['user_id'] = $row['user_id']; 
header("Location: http://localhost:8080/meet2eat/index.php"); 
} 
3

आप पु करना चाहते हैं एक ब्रेक; अपने स्थान के बाद:

header("HTTP/1.1 301 Moved Permanently"); 
header('Location: '. $YourArrayName["YourURL"] ); 
break; 
+0

आप पहली 2 पंक्तियों को एक में जोड़ सकते हैं: हेडर ('स्थान:'। $ YourArrayName ["YourURL"], true, 301); – kurdtpage

0

"cfphpflex" जैसा कि सुझाव आप शीर्ष लेख सेट करने के बाद break; जोड़ सकते हैं। आप कुछ भी गूंज सकते हैं, जैसे कि echo 'test';

संबंधित मुद्दे