me3ikan Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 Καλησπέρα, Ας υποθέσουμε ότι έχω μια σελίδα όπου υπάρχει αυτή η φόρμα: <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;
ulb Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 (επεξεργασμένο) Καλησπέρα, Δοκίμασε πρώτα με το παρακάτω να δεις αν λαμβάνει σωστά την τιμή: 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> Επεξ/σία 12 Μαρτίου 2022 από ulb
me3ikan Δημοσ. 12 Μαρτίου 2022 Μέλος Δημοσ. 12 Μαρτίου 2022 Συγνώμη αλλά οι γνώσεις μου είναι περιορισμένες. Καταλαβαίνω τι λες απλά δεν ξέρω πως αυτό το hidden πεδίο θα πάρει την τιμή της παραμέτρου. πχ αυτό αρκεί; <input type="hidden" name="par1"> και έπειτα στο send.php αυτό; "sub1" => $request["par1"], Ο κώδικας δεν είναι δικός μου εγώ μια παρέμβαση θέλω να κάνω απλά.🙂
ulb Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 Εντός της φόρμας και κάτω από το τηλέφωνο για παράδειγμα θα προσθέσεις ένα ακόμα πεδίο το οποίο δε θα είναι ορατό (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.
me3ikan Δημοσ. 12 Μαρτίου 2022 Μέλος Δημοσ. 12 Μαρτίου 2022 Δυστυχώς δεν παίρνει την τιμή. Σίγουρα δεν θέλει κάποια αλλαγή στο 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"],
k33theod Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 (επεξεργασμένο) έτσι πρέπει να είναι το input <input name = "par1" value = "<?= $_GET['par1']?>" type = "hidden"> Ελπίζω ότι ο κώδικας δεν ο αυθεντικός γιατί εκτός από τα χαζά λάθη έχει και το θέμα της ασφάλειας λοίπουν filtering / validation, και cross reference protection Επεξ/σία 12 Μαρτίου 2022 από k33theod
ulb Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 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, οπότε το άλλαξα και αυτό. Και οι δύο τρόποι όμως λειτουργούν. 1
me3ikan Δημοσ. 12 Μαρτίου 2022 Μέλος Δημοσ. 12 Μαρτίου 2022 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🙂 1
k33theod Δημοσ. 12 Μαρτίου 2022 Δημοσ. 12 Μαρτίου 2022 Αν το αρχείο της φόρμας δέν είναι .php ο κώδικας που σου έστειλα δεν δουλεύει πρέπει να βάλεις κατάληξη .php Ξαναλέω όμως άν ο κώδικας είναι production πρέπει να τα ξαναδείς όλα για θέματα ασφάλειας. Θα πρέπει να πάρεις το get['par'] να το ελέγξεις να μην έχει κάτι χάζο και μετά να το κάνεις echo στο inpup. To ίδιο εννοείται και για ta post data 58 λεπτά πριν, me3ikan είπε Δυστυχώς δεν παίρνει την τιμή. Σίγουρα δεν θέλει κάποια αλλαγή στο send.php? Απ' ότι καταλαβαίνω έχουμε πάρει την τιμή της παραμέτρου και την στέλνουμε μέσω της φόρμας. Δεν πρέπει να αλλάξουμε κάτι εδώ ώστε η par1 να μπει στον πίνακα $params? Εννοείται ότι την παίρνεις στο send.php ώς post παράμετρο πλέον
MANOWARR1OR Δημοσ. 13 Μαρτίου 2022 Δημοσ. 13 Μαρτίου 2022 Η HTML form στέλνει δεδομένα με POST στο PHP script άρα θα ψάξεις σε αυτό το array για τις αντίστοιχες τιμές π.χ. $_POST['name'] Αν θέλεις να πάρεις τις τιμές των παραμέτρων από το url τότε θα πρέπει να ψάξεις στο $_GET array δηλαδή $_GET['par1'] Επίσης όπως πολύ σωστά ειπώθηκε, το πρώτο σου μέλημα είναι η ασφάλεια. Ρίξε μια ματιά εδώ ώστε να εφαρμόσεις τις βασικές πρακτικές ασφαλείας για production κώδικα. Είναι πολύ απλό και έχει παραδείγματα. https://www.w3schools.com/php/php_form_validation.asp
me3ikan Δημοσ. 13 Μαρτίου 2022 Μέλος Δημοσ. 13 Μαρτίου 2022 Θέλει λίγο διαβασματάκι απ' ότι βλέπω για να είμαστε ασφαλείς.
Moderators Kercyn Δημοσ. 15 Μαρτίου 2022 Moderators Δημοσ. 15 Μαρτίου 2022 Ή μπορείς να μην ασχολείσαι με προβλήματα που έχουν λυθεί εδώ και χρόνια και να χρησιμοποιήσεις κάποιο framework. Αν είναι ένα project για να κάνεις το χόμπυ σου οκ, κάνε ό,τι θες και πέρνα καλά. Αν όμως είναι ένα σύστημα που προορίζεται να βγει στον έξω κόσμο τότε όχι μόνο δεν υπάρχει κανένα νόημα ή όφελος να γράψεις κάτι τέτοιο μόνος σου και από την αρχή, αλλά πιθανότατα θα φας και τα μούτρα σου.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα