Προς το περιεχόμενο

php - get method


gitz

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια χαρά, έχω ένα scriptάκι σε php και θέλω να κάνω redirect σε μία άλλη σελίδα

με παράμετρο ένα string που δημιουργείται μέσα στο script.. πχ..

>
<? php

$str="blah blah blah..."

header=('Location: page.php?param=*****');

?>

 

τι χρειάζεται να γράψω αντί τα αστεράκια ώστε στην σελίδα page.php το $_GET['param']

να έχει την τιμή του str... ??

Δημοσ.

φιλε μου το scriptακι που έχω, είναι για να δημιουργεί ένα xml

αρχείο απο μια database.. και αυτό που θέλω να κάνω είναι να

μεταφέρω το xml string σε μία άλλη σελίδα..

 

έγραψα αυτό που μου είπες και μου βγάζει το εξής error

 

XML Parsing Error: junk after document element

Location ....

Line Number ....

 

</alert><br />

-------^

Δημοσ.

λοιπόν ο κώδικας είναι ο παρακάτω...

 

>
<?php
header("Content-type: text/xml");
$alert_id=$_GET['alert'];
$host="localhost";
$user="root";
$pass="*******";
$database="test";
$linkID=mysql_connect($host, $user, $pass) or die ("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");
$xml_output = "<?xml version=\"1.0\"?>\n";
$query= SELECT *FROM alerts WHERE id='alert_id'"
$resultID=mysql_query($query, %linkID) or die("Data not found.");
$xml_output .= "<alert>\n";

//... προσθήκη πληροφοριών στο xml

$xml_output .= "\t</alert>";
echo $xml_output;
header("Location: mysite.com/send.php?xml=".$xml_output);
?>

 

λοιπόν.. όπως καταλάβατε η σελίδα δεν περιέχει html tags κτλ...

 

αν αφαιρεσω το τελευταίο header, μου τυπώνει το xml κανονικά... ενώ αν το αφήσω

μου πετάει το παραπάνω error...

Δημοσ.

Δοκίμασε να βγάλεις αυτή τη γραμμή από το php αρχείο

>
header("Content-type: text/xml");

Το αρχείο που στέλνεις λες ότι είναι xml και ίσως ο τελευταίος header (που κάνει το redirect) να μην είναι συμβατός και να μπερδεύει τον browser.

Δημοσ.

Δεν έχω καταλάβει τι ακριβώς προσπαθείς να κάνεις μ΄ αυτό τον κώδικα που δίνεις.

 

Εντάξει, θέλεις να κάνεις redirect σε μια άλλη σελίδα με το XML σαν παράμετρο. Το echo στην "τρέχουσα" σελίδα τι το θέλεις; Αφού υποτίθεται ότι θα κάνεις redirect, ήτοι o browser δε θα επεξεργαστεί την τρέχουσα σελίδα καν!

 

Λοιπόν έτσι που το έχεις κάνει καταρχήν ο browser σου δίνει πόρτα γιατί τον έχεις βάλει σε mode να κανει parse XML, στην οποία περίπτωση το document που στέλνεις πρέπει να είναι valid XML (και φυσικά δεν είναι, αν μη τι άλλο γιατί βάζεις κάτι αδέσποτα tags στο τέλος).

 

Οπότε πρώτον: πρέπει ο header("Content-type: text/xml") να φύγει. Μ' αυτό τον τρόπο θα σταματήσει ο browser να σου ρίχνει άκυρο.

 

Δεύτερον: πρέπει να φύγει και το echo $xml_output γιατί α) δεν έχει νόημα όπως είπα στην αρχή και β) δεν επιτρέπεται να στείλεις content πριν τους HTTP headers. Απλά φρόντισε να μην υπάρχει ούτε ένα byte εξόδου πριν καλέσεις την header(). Μετά από αυτό θα σταματήσει και η PHP να παραπονιέται, και ο browser να μη σε κάνει redirect.

 

Τρίτον: σύμφωνα με το RFC 1945 οι χαρακτήρες στην κατηγορία "reserved" δεν είναι επιτρεπτοί σε πεδίο τύπου absoluteURI (που είναι η τιμή που δίνεις μετά το "Location:"), και θα πρέπει να γίνουν url-encoded αν θέλεις να είσαι σίγουρος ότι ο browser δε θα παραπονεθεί. Επειδή reserved είναι εκτός των άλλων τα < και > και εσύ στέλνεις XML, it goes without saying ότι αυτό σε πιάνει. Ο ευκολότερος τρόπος είναι να περάσεις το URL σου από την rawurlencode, αλλά έτσι θα αυξηθεί κατά πολύ το μήκος του σαν string, οπότε...

 

Τέταρτον: παρόλο που το RFC 2616 (δεύτερη παράγραφος) δε διατυπώνει κάποιο όριο για το μέγεθος μιας GET request, στην πράξη ανάλογα με τον browser μπορεί να έχεις προβλήματα αν η XML σου βγαίνει πάνω από 2KB. Σε τέτοια περίπτωση θα χρειαστεί να κάνεις POST request το οποίο δεν γίνεται με redirect και θα αναγκαστείς μάλλον να το κάνεις με curl.

Δημοσ.

guys έβγαλα το πρώτο header και αφαίρεσα και το echo.. κ τώρα μου βγάζει ένα

warning: Header may not contain more than a single header, new line detected

στη γραμμή που κάνω το redirect

 

φίλε defacer έστω ότι το xml δεν είναι περισσοτερα απο 2KB.. οπότε προς το παρόν

μπορώ να χρησιμοποιώ get.. αργότερα μπορεί να κάνω κάποια ανανέωση για παν ενδεχόμενο.

Δημοσ.

Δεν έχεις κάνει rawurlencode το URL σου και η XML περιέχει newlines. Αυτά μπορείς να τα διώξεις με

 

>$url = strtr($url, array("\n" => '', "\r" => '', ' ' => ''));

 

αλλά και πάλι: rawurlencode.

Δημοσ.

1) απ ότι κατάλαβα η rawurlencode είναι μια συνάρτηση που θα αφαιρέσει τα newlines απο το xml?

 

2) στην επόμενη σελίδα που θα πρέπει να χρησιμοποιήσω το xml θα έχει newlines? ή το όρισμα που

θα έχει περαστεί θα είναι χωρίς newlines?

 

φιλαράκι 1000 ευχαριστώ.. έψαξα περισσότερο το rawurlencode-decode ...

πραγματικά σου λύνει τα χέρια...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...