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

[PHP] Πως να περάσω url παράμετρο από μία σελίδα στην άλλη


me3ikan

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

Καλησπέρα,

Ας υποθέσουμε ότι έχω μια σελίδα όπου υπάρχει αυτή η φόρμα:

<form action="send.php" class="order_form" method="post">
            <label><select class="country_select" id="country" name="country" ><option value="gr">Greece</option><option value="cy">Cyprus</option></select></label><label><input name="name" placeholder="Πλήρες όνομα" type="text"></label><label><input name="phone" placeholder="Τηλέφωνο" type="text"></label><button class="button lt101" type="submit">παραγγελία</button>
              <input type="hidden" name="landing" value="www.com">
          </form>

O χρήστης έχει επισκεφτεί τη σελίδα ως www.com?par1=xxxx

Το αρχείο send.php

<?php

    if (!empty($_REQUEST["phone"])) {
        send_the_order($_REQUEST);
    }

    function send_the_order($request)
    {
        $params = array(
            "flow_hash" => "cj8k",
            "landing" => "www.com",
            "phone" => $request["phone"],
            "name" => $request["name"],
            "country" => $request["country"],
            "referrer" => $request["referrer"],
            "address" => $request["address"],
            "email" => $request["email"],
            "lastname" => $request["lastname"],
            "comment" => $request["comment"],
            "layer" => $request["layer"],
            "sub1" => $request["sub1"],
            "sub2" => $request["sub2"],
            "sub3" => $request["sub3"],
            "sub4" => $request["sub4"],
            "sub5" => $request["sub5"],
        );

        $url = "12345";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

        $return = curl_exec($ch);
        curl_close($ch);

        header("Location: success.html");
    }
        

Πως θα βάλω την τιμή της par1 (στην περίπτωση μας xxxx) μέσα στο array $params στη θέση sub1;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

Δοκίμασε πρώτα με το παρακάτω να δεις αν λαμβάνει σωστά την τιμή:

echo $_GET['par1'] ?? 'Fallback value';

Αν παίρνεις σωστά την τιμή, μπορείς να ορίσεις το value ενός κρυφού πεδίου προσθέτοντας ένα ακόμα στη φόρμα και έπειτα να περνάς στο sub1 που θέλεις την τιμή του πεδίου όπως ήδη κάνεις για παράδειγμα με το πεδίο name κλπ.

Ή με Javascript αν δεν παίζεις σε php:

<input type="text" id="hiddenInput" name="hiddenInput" style="display: none;">
<s c r i p t>
	let myParam = location.search.split('par1=')[1]
	document.getElementById("hiddenInput").value = myParam;
</s c r i  p t>

 

Επεξ/σία από ulb
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 Συγνώμη αλλά οι γνώσεις μου είναι περιορισμένες.

Καταλαβαίνω τι λες απλά δεν ξέρω πως αυτό το hidden πεδίο θα πάρει την τιμή της παραμέτρου.

πχ αυτό αρκεί;

<input type="hidden" name="par1">

και έπειτα στο send.php αυτό;

"sub1" => $request["par1"],

Ο κώδικας δεν είναι δικός μου εγώ μια παρέμβαση θέλω να κάνω απλά.🙂

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εντός της φόρμας και κάτω από το τηλέφωνο για παράδειγμα θα προσθέσεις ένα ακόμα πεδίο το οποίο δε θα είναι ορατό (display: none / css).

<input type="text" id="par1" name="par1" style="display: none;">
Άλλαξα το id & το name ώστε να μη χρειαστεί να πειράξεις το send.php.

Έπειτα στο αρχείο που υπάρχει η φόρμα, πριν το </body> θα προσθέσεις τον παρακάτω Javascript κώδικα εντός script tag.

let myParam = location.search.split('par1=')[1]
document.getElementById("hiddenInput").value = myParam;

Ο παραπάνω κώδικας κοιτάει στο URL και ψάχνει την παράμετρο "par1". Έπειτα κάνει την τιμή του κρυφού πεδίου ίση με την τιμή της παραμέτρου του URL.

Όταν πατάς αποστολή πλέον θα στέλνει την τιμή ενός ακόμα πεδίου, του κρυφού που θα είναι ίση με την τιμή του par1 του URL όπου αυτή θα εκχωρείτε στην συνέχεια στη μεταβλητή sub1 του send.php.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δυστυχώς δεν παίρνει την τιμή. Σίγουρα δεν θέλει κάποια αλλαγή στο send.php? Απ' ότι καταλαβαίνω έχουμε πάρει την τιμή της παραμέτρου και την στέλνουμε μέσω της φόρμας.

Δεν πρέπει να αλλάξουμε κάτι εδώ ώστε η par1 να μπει στον πίνακα $params?

$params = array(
            "flow_hash" => "cj8k",
            "landing" => "www.com",
            "phone" => $request["phone"],
            "name" => $request["name"],
            "country" => $request["country"],
            "referrer" => $request["referrer"],
            "address" => $request["address"],
            "email" => $request["email"],
            "lastname" => $request["lastname"],
            "comment" => $request["comment"],
            "layer" => $request["layer"],
            "sub1" => $request["sub1"],
            "sub2" => $request["sub2"],
            "sub3" => $request["sub3"],
            "sub4" => $request["sub4"],
            "sub5" => $request["sub5"],

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

έτσι πρέπει να είναι το input

<input name = "par1" value = "<?= $_GET['par1']?>" type = "hidden">

Ελπίζω ότι ο κώδικας δεν ο αυθεντικός γιατί εκτός από τα χαζά λάθη έχει και το θέμα της ασφάλειας λοίπουν filtering / validation, και cross reference protection

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

4 λεπτά πριν, me3ikan είπε

Δυστυχώς δεν παίρνει την τιμή. Σίγουρα δεν θέλει κάποια αλλαγή στο send.php? Απ' ότι καταλαβαίνω έχουμε πάρει την τιμή της παραμέτρου και την στέλνουμε μέσω της φόρμας.

Ναι, συγνώμη, λογικό να μην παίζει. Έχει διάφορα λαθάκια που λόγο κεκτημένης ταχύτητας δεν τα εντόπισα και τώρα δε με αφήνει να το επεξεργαστώ. Πρέπει στο παραπάνω μου μήνυμα να αλλάξεις όπου "par1" σε "sub1" και στο "document.getElementById" να το κάνεις επίσης "sub1" και όχι "hiddenInput".

Συνοψίζοντας. Αν η φόρμα σου είναι σε .php αρχείο, προσθέτεις απλά το παρακάτω εντός της φόρμας:

<input type="hidden" id="sub1" name="sub1" value ="<?= $_GET['par1'] ?? 'Fallback value' ?>">

Διαφορετικά:

Προσθέτεις το παρακάτω εντός της φόρμας:
<input type="hidden" id="sub1" name="sub1">
και το παρακάτω πριν το </body>
<s c r i p t>
	let myParam = location.search.split('par1=')[1]
	document.getElementById("sub1").value = myParam;
</s c r i p t>

Το input είναι προτιμότερο να είναι type="hidden" όπως ανέφερε ο φίλος @k33theod και όχι να γίνεται μη ορατό μέσω css, οπότε το άλλαξα και αυτό. Και οι δύο τρόποι όμως λειτουργούν.

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

26 λεπτά πριν, k33theod είπε

έτσι πρέπει να είναι το input

<input name = "par1" value = "<?= $_GET['par1']?>" type = "hidden">

Ελπίζω ότι ο κώδικας δεν ο αυθεντικός γιατί εκτός από τα χαζά λάθη έχει και το θέμα της ασφάλειας λοίπουν filtering / validation, και cross reference protection

Δοκιμάζοντας αυτό δε δουλεύει τίποτα. Μόλις πάω να κάνω submit τη φόρμα μου πετάει 403 forbidden

Ίσως να φταίει αυτό; Ότι δηλαδή δεν επιτρέπεται να γίνει post το url για security reasons? Δεν έχω ιδέα😁

3 λεπτά πριν, ulb είπε

Ναι, συγνώμη, λογικό να μην παίζει. Έχει διάφορα λαθάκια που λόγο κεκτημένης ταχύτητας δεν τα εντόπισα και τώρα δε με αφήνει να το επεξεργαστώ. Πρέπει στο παραπάνω μου μήνυμα να αλλάξεις όπου "par1" σε "sub1" και στο "document.getElementById" να το κάνεις επίσης "sub1" και όχι "hiddenInput".

Συνοψίζοντας. Αν η φόρμα σου είναι σε .php αρχείο, προσθέτεις απλά το παρακάτω εντός της φόρμας:

<input type="hidden" id="sub1" name="sub1" value ="<?= $_GET['par1'] ?? 'Fallback value' ?>">

Διαφορετικά:

Προσθέτεις το παρακάτω εντός της φόρμας:
<input type="hidden" id="sub1" name="sub1">
και το παρακάτω πριν το </body>
<s c r i p t>
	let myParam = location.search.split('par1=')[1]
	document.getElementById("sub1").value = myParam;
</s c r i p t>

Το input είναι προτιμότερο να είναι type="hidden" όπως ανέφερε ο φίλος @k33theod και όχι να γίνεται μη ορατό μέσω css, οπότε το άλλαξα και αυτό. Και οι δύο τρόποι όμως λειτουργούν.

Το δοκιμάζω και επανέρχομαι

Oh yeah! This did the trick!

Προσθέτεις το παρακάτω εντός της φόρμας:
<input type="hidden" id="sub1" name="sub1">
και το παρακάτω πριν το </body>
<s c r i p t>
	let myParam = location.search.split('par1=')[1]
	document.getElementById("sub1").value = myParam;
</s c r i p t>

Σας υπέρ ευχαριστώ και τους 2🙂

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν το αρχείο της φόρμας δέν είναι .php ο κώδικας που σου έστειλα δεν δουλεύει πρέπει να βάλεις κατάληξη .php Ξαναλέω όμως άν ο κώδικας είναι production πρέπει να τα ξαναδείς όλα για θέματα ασφάλειας. Θα πρέπει να πάρεις το get['par'] να το ελέγξεις να μην έχει κάτι χάζο και μετά να το κάνεις echo στο inpup. To ίδιο εννοείται και για ta post data

58 λεπτά πριν, me3ikan είπε

Δυστυχώς δεν παίρνει την τιμή. Σίγουρα δεν θέλει κάποια αλλαγή στο send.php? Απ' ότι καταλαβαίνω έχουμε πάρει την τιμή της παραμέτρου και την στέλνουμε μέσω της φόρμας.

Δεν πρέπει να αλλάξουμε κάτι εδώ ώστε η par1 να μπει στον πίνακα $params?

 

Εννοείται ότι την παίρνεις στο send.php ώς post παράμετρο πλέον

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η HTML form στέλνει δεδομένα με POST στο PHP script άρα θα ψάξεις σε αυτό το array για τις αντίστοιχες τιμές π.χ. $_POST['name']

Αν θέλεις να πάρεις τις τιμές των παραμέτρων από το url τότε θα πρέπει να ψάξεις στο $_GET array δηλαδή $_GET['par1']

Επίσης όπως πολύ σωστά ειπώθηκε, το πρώτο σου μέλημα είναι η ασφάλεια. Ρίξε μια ματιά εδώ ώστε να εφαρμόσεις τις βασικές πρακτικές ασφαλείας για production κώδικα. Είναι πολύ απλό και έχει παραδείγματα.

https://www.w3schools.com/php/php_form_validation.asp

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Ή μπορείς να μην ασχολείσαι με προβλήματα που έχουν λυθεί εδώ και χρόνια και να χρησιμοποιήσεις κάποιο framework. Αν είναι ένα project για να κάνεις το χόμπυ σου οκ, κάνε ό,τι θες και πέρνα καλά. Αν όμως είναι ένα σύστημα που προορίζεται να βγει στον έξω κόσμο τότε όχι μόνο δεν υπάρχει κανένα νόημα ή όφελος να γράψεις κάτι τέτοιο μόνος σου και από την αρχή, αλλά πιθανότατα θα φας και τα μούτρα σου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...