bscyb Δημοσ. 21 Αυγούστου 2012 Δημοσ. 21 Αυγούστου 2012 Καλησπέρα έχω ξεκινήσει να φτιάχνω ένα site στο οποίο παρουσιάζω αλγόριθμους ταξινόμησης και αναζήτησης (οι αλγόριθμοι είναι υλοποιημένοι στις εξής γλώσσες προγραμματισμού:C,C++,JAVA) αυτό που προσπαθώ τώρα να φτιάξω είναι μια σελίδα αναζήτησης αλγόριθμου όπως βλέπεται στην εικόνα έχω βάλει 2 <select>, 1 για το όνομα αλγόριθμου και 1 για την γλώσσα προγραμματισμού αυτό που θέλω να γίνεται είναι όταν κάποιος π.χ επιλέξει ταξινόμηση με συγχώνευση σε Java και πατήσει αναζήτηση να του ανοίγει κατευθείαν η σελίδα στην οποία παρουσιάζεται αυτός ο αλγόριθμος Ξέρω πώς γίνεται με PHP αλλά επειδή δεν έχω ασχοληθεί σχεδόν καθόλου με PHP δεν έχω ιδέα πως να το υλοποιήσω. ο HTML κώδικας της σελίδας αναζήτησης: > <body> <div id="content"> <ul id="mbmenuebul_table" class="mbmenuebul_menulist" style="width: 963px; height: 33px;"> <li class="spaced_li"><a href="index.php" target="_self"><img id="mbi_mbmenu_1" src="img/menu_images/index.png" name="mbi_mbmenu_1" width="123" height="33" style="vertical-align: bottom;" border="0" alt="Αρχική Σελίδα" title="" /></a></li> <li class="spaced_li"><a href="calgorithms.php" target="_self"><img id="mbi_mbmenu_2" src="img/menu_images/c.png" name="mbi_mbmenu_2" width="168" height="33" style="vertical-align: bottom;" border="0" alt="Αλγόριθμοι σε C" title="" /></a></li> <li class="spaced_li"><a href="cppalgorithms.php" target="_self"><img id="mbi_mbmenu_3" src="img/menu_images/cpp.png" name="mbi_mbmenu_3" width="168" height="33" style="vertical-align: bottom;" border="0" alt="Αλγόριθμοι σε C++" title="" /></a></li> <li class="spaced_li"><a href="javaalgorithms.php" target="_self"><img id="mbi_mbmenu_4" src="img/menu_images/java.png" name="mbi_mbmenu_4" width="168" height="33" style="vertical-align: bottom;" border="0" alt="Αλγόριθμοι σε JAVA" title="" /></a></li> <li class="spaced_li"><a href="search.php" target="_self"><img id="mbi_mbmenu_5" src="img/menu_images/search.png" name="mbi_mbmenu_5" width="168" height="33" style="vertical-align: bottom;" border="0" alt="Αναζήτηση Αλγορίθμου" title="" /></a></li> <li><a href="links.php" target="_self"><img id="mbi_mbmenu_6" src="img/menu_images/links.png" name="mbi_mbmenu_6" width="168" height="33" style="vertical-align: bottom;" border="0" alt="Προτεινόμενα Links" title="" /></a></li> </ul> <script type="text/javascript" src="js/menu.js"></script> <div id="text"> <div id="searchform"> <h3 class="searchalg">Αναζήτηση Αλγορίθμου</h3> <div id="form2"> <form name="sform" id="sform" method="post" action="submitsform.php"> <label for="algname">Όνομα Αλγορίθμου:</label> <select name="algname" tabindex="1"> <option></option> <option value="linear">Αλγόριθμος γραμμικής αναζήτησης (Linear search)</option> <option value="binary">Αλγόριθμος δυαδικής αναζήτησης (Binary search)</option> <option value="bst">Δυαδικά δένδρα αναζήτησης (Βinary search trees)</option> <option value="dfs">Αναζήτηση Κατά Βάθος (Depth-first search (DFS))</option> <option value="bfs">Αναζήτηση κατά πλάτος (Breadth-first search (BFS))</option> <option value="Dijkstra">Αλγόριθμος του Dijkstra (Dijkstra's algorithm)</option> <option value="bubble">Ταξινόμηση φυσαλίδας (Bubble sort)</option> <option value="selection">Ταξινόµηση µε Επιλογή (Selection sort)</option> <option value="insertion">Ταξινόµηση µε Εισαγωγή (Insertion sort)</option> <option value="merge">Ταξινόμηση με συγχώνευση (Merge sort)</option> <option value="quick">Γρήγορη ταξινόµηση (Quick sort)</option> <option value="shell">Ταξινόμηση του Shell (Shell sort)</option> <option value="heap">Ταξινόμηση σωρού (Heap sort)</option> </select> <div style="clear:both;"></div> <label for="proglanduage">Γλώσσα Προγραμματισμού:</label> <select name="proglanguage" tabindex="2"> <option></option> <option value="C">C</option> <option value="C++">C++</option> <option value="JAVA">JAVA</option> </select> <div style="clear:both;"></div> <button type="submit" name="submitsform" id="submitsform">Αναζήτηση</button> </div> </div> <div id="endsform"> </div> </div> </div> <div id="footer"> <ul class="bottom-menu"> <li><a href="contact.php" target="_self">Επικοινωνία</a></li> <li><a href="help.php" target="_self">Βοήθεια</a></li> <li><a href="sitemap.php" target="_self">Sitemap</a></li> </ul> </div> </body>
merianos Δημοσ. 22 Αυγούστου 2012 Δημοσ. 22 Αυγούστου 2012 Στο header της σελίδας σου, που έχει τα δύο select πεδία βάλε τον ακόλουθο κώδικα : > <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> <script type="text/javascript"> jQuery(document).ready( function($) { $('#submitsform').click( function(e) { var alg = $('select[name="algname"]').val(); var lang = $('select[name="proglanguage"]').val(); if(alg == '') { alert('You have not select any algorithm'); return; } if(lang == '') { alert('You have not select any programming language'); return; } window.location.href = 'do_search.php?lang=' + lang + '&alg=' + alg; e.preventDefault(); } ); } ); </script> Επίσης δημιούργησε ένα νέο αρχείο στον ίδιο κατάλογο με όνομα do_search.php στο οποίο θα εμφανίζεις τα αποτελέσματα της αναζήτησης σου. Μέσα στο αρχείο αυτό θα πάρεις τις μεταβλητές σου από το URL με $_GET όπως στο παράδειγμα που ακολουθεί: > $alg = $_GET['alg']; $lang = $_GET['lang']; Λογικά όλο αυτό θα λειτουργήσει, εκτός και έχω κάνει κάποιο συντακτικό λάθος.
bscyb Δημοσ. 22 Αυγούστου 2012 Μέλος Δημοσ. 22 Αυγούστου 2012 Στο do_search.php δεν κατάλαβα τι πρέπει να κάνω αν μπορούσες να μου το εξηγήσεις λίγο καλύτερα.. Επίσης ξέχασα να γράψω στο αρχικό post ότι ο κάθε αλγόριθμος στο site μου παρουσιάζεται σε διαφορετική σελίδα δηλαδή π.χ ο αλγόριθμος γραμμικής αναζήτησης σε c παρουσιάζεται στην σελίδα clinear.php, ο αλγόριθμός του Dijsktra σε java παρουσιάζεται στην σελίδα javadijkstra.php κ.ο.κ
defacer Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Έτσι που τα βλέπω τότε στο do_search.php δε χρειάζεται να κάνεις κάτι παραπάνω από π.χ. > $filename = $_GET['lang'].$_GET['alg']; if (is_file($filename)) { header('Location: '.$filename); die; } else { // error page } Πάντως δεν είναι αυτός ο τρόπος με τον οποίο θα επέλεγα να το κάνω εγώ. Αφού παίζεις με Javascript και jQuery κιόλας, θα μπορούσες να κάνεις τη δουλειά με AJAX, π.χ. ενδεικτικά > var $alg = $('select[name="algname"]'); var $lang = $('select[name="proglanguage"]'); $alg.add($lang).change(function() { var alg = $alg.val(); var lang = $lang.val(); if (alg == "" || lang == "") { return; } var url = $lang + $alg + ".php"; $("#endsform").load(url); });
bscyb Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 Έβαλα αυτό στο do_search.php : > <?php $filename = $_GET['lang'].$_GET['alg']; if (is_file($filename)) { header('Location: '.$filename); die; } else { echo "error"; } ?> αλλά και πάλι δεν λειτουργεί
defacer Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Πρώτον, τι ακριβώς εννοείς "δεν λειτουργεί"? Please, απέκτησε μια καλή συνήθεια και γίνε συγκεκριμένος. Δεν λειτουργεί σημαίνει echo "error" ή σημαίνει 404 από τον browser? Δεύτερον, πιθανότατα θα χρειαστεί να φτιάξεις τα paths (μπορεί και στο is_file αλλά και στο Location: αν κρίνω από το URL που βλέπω στο screenshot σου).
bscyb Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 όταν πατάω αναζήτηση μου βγάζει το echo "error" . τα paths πώς τα φτιάχνω? π.χ για τον αλγόριθμο γραμμικής αναζήτησης σε c το path είναι (http://localhost/Ptyxiaki%20Ergasia/clinear.php) αν μπορούσες να μου δόσεις ένα παράδειγμα για αυτό το path θα τα καταφέρω πιστεύω.
defacer Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Αφού βγάζει error, τότε σημαίνει πως η is_file() επιστρέφει false. Επομένως πρέπει να βρεις γιατί. Επομένως τυπώνεις το getcwd().'/'.$filename και βλέπεις ποιό είναι. Το συγκρίνεις με το αρχείο που όντως υπάρχει (το βλέπεις στο δίσκο σου) και κάνεις αυτό που χρειάζεται για να διορθωθεί η "διαφορά". Debugging 101 που λένε. ΥΓ: Τώρα που το ξαναβλέπω μάλλον το πρόβλημα είναι πως λείπει ένα .php στο τέλος (και θα ορκιζόμουν πως το είχα βάλει...). Δεν είναι κρίμα να χρειάζεται να βρεί άλλος κάτι το τόσο απλό; 1
bscyb Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 δεν κατάλαβα καθόλου τι πρέπει να κάνω, όπως είπα και στο αρχικό post δεν έχω ασχοληθεί σχεδόν καθόλου με PHP και όλα αυτά τα is_file, getcwd() μου είναι τελείως αγνώστα
defacer Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 To google σου είναι γνωστό όμως έτσι? Επίσης, το υστερόγραφο το διάβασες? Anyway μέχρι εδώ είναι η δική μου συνεισφορά, καλή συνέχεια. 1
thanocaster Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Όταν έχεις πρόβλημα με το περιεχόμενο των μεταβλητών καλό είναι να κάνεις echo τις μεταβλητές σου για να βλέπεις τί έχουν μέσα: > <?php $filename = $_GET['lang'].$_GET['alg']; if (is_file($filename)) { header('Location: '.$filename); die; } else { echo "error"; } echo $filename; ?>
bscyb Δημοσ. 24 Αυγούστου 2012 Μέλος Δημοσ. 24 Αυγούστου 2012 έβαλα το echo $filename; και επέλεξα linear search σε java και μου έβγαλε αυτό : errorJAVAlinear όποτε η $filename μεταβλητή πρέπει να είναι εντάξει αλλά και πάλι υπάρχει κάποιο πρόβλημα καθώς βγάζει το error.
thanocaster Δημοσ. 24 Αυγούστου 2012 Δημοσ. 24 Αυγούστου 2012 Οκ, για να μην παιδεύεσαι άλλο, το θέμα είναι πως η is_file() κοιτάει στο όρισμά της, το οποίο οφείλει να είναι της μορφής: > path/to/filename.ext Οπότε, στο παράδειγμά σου, η $filename πρέπει όταν την κάνεις echo να τυπώνει όλο το path του php script που θες να φορτώσεις: > $filename = $_GET['lang'] . $_GET['alg'] . '.php'; if ( is_file($filename) ) { header ( 'Location:' . $filename ); die; } ... Απλά, σαν φιλική συμβουλή, όταν γράφεις κώδικα φρόντιζε να ψάχνεις τί κάνει το κάθε τί που έχεις στον κώδικά σου. Μην αντιγράφεις ξερά ό,τι βρίσκεις αλλού. Με 5' διάβασμα θα είχες λύσει το πρόβλημά σου αντί να χάσεις 1-2 μέρες, όπως έγινε τώρα.
bscyb Δημοσ. 24 Αυγούστου 2012 Μέλος Δημοσ. 24 Αυγούστου 2012 Σωστά τώρα δουλεύει κανονικά ευχαριστώ. θα ήθελα να κάνω και κάτι άλλο αλλά δεν ξέρω πόσο δύσκολο θα είναι να το υλοποιήσω. όταν κάποιος κάνει αναζήτηση και επιλέξει μόνο το όνομα του αλγόριθμου (π.χ bubble sort) και δεν επιλέξει καμία γλώσσα προγραμματισμού τότε να του εμφανίζονται όλοι οι αλγόριθμοι bubble sort σε όλες τις γλώσσες προγραμματισμού (αυτά σαν links δηλαδή στο παράδειγμα μας θα του ανοίξει μια καινούργια σελίδα με links για bubble sort σε C,C++ και java). Επίσης θα ήθελα να γίνεται και το αντίθετο δηλαδή αν κάποιος επιλέξει μόνο γλώσσα προγραμματισμού π.χ java τότε πάλι με τον ίδιο τρόπο να του εμφανίζονται τα links όλων των αλγόριθμων σε java.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα