bill@ki Δημοσ. 18 Απριλίου 2012 Μέλος Δημοσ. 18 Απριλίου 2012 Μη μπερδεύεσαι Γράφοντας το αρχείο στο C:\TEMP ή στο %TEMP% μέσα από php script, η ενέργεια γίνεται στον server κι όχι τοπικά. Αν το τρέχεις στον τοπικό wamp που έχεις, ναι η αποθήκευση γίνεται τοπικά (γιατί αναφερόμαστε στο ίδιο μηχάνημα). Όταν όμως ανεβάσεις το script στον production server, η αποθήκευση θα γίνει τοπικά στον server όχι στο development μηχάνημα. Δοκίμασέ το, θα δουλέψει αν ο χρήστης κάτω από τον οποίο τρέχει ο web server έχει δικαιώματα εγγραφής στα C:\TEMP ή %TEMP%. Μπερδεύτικα Ωραία να το δοκιμάσω, αλλά έχοντας αυτή τη διαδρομή στο server για τη δημιουργία του xml: >$myFile = "test.xml"; Για να το γράψω στο temp το αρχειο θα γράψω έτσι: >$myFile = "C:\\TEMP\\test.xml";
hawkpilot Δημοσ. 18 Απριλίου 2012 Δημοσ. 18 Απριλίου 2012 ... Για να το γράψω στο temp το αρχειο θα γράψω έτσι: >$myFile = "C:\\TEMP\\test.xml"; Σωστά, τρέξτο για να δούμε αν θα σε αφήσει. Είτε δουλέψει, είτε όχι δοκίμασε και με τη βοήθεια της sys_get_temp_dir να δημιουργήσεις το path του αρχείου
bill@ki Δημοσ. 18 Απριλίου 2012 Μέλος Δημοσ. 18 Απριλίου 2012 Σωστά, τρέξτο για να δούμε αν θα σε αφήσει. Είτε δουλέψει, είτε όχι δοκίμασε και με τη βοήθεια της sys_get_temp_dir να δημιουργήσεις το path του αρχείου Δυστυχώς με τίποτα δε λέει να δουλέψει Τουλάχιστον μπορώ να δουλέψω τοπικά μέχρι να δω τι θα γίνει, κάτι είναι και αυτό. Να ρωτήσω και κάτι άλλο. Θελω να δημιουργήσω ένα xml σαν αυτό: > <apotelesmata> <stoixeia> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> . . . </apotelesmata> Δηλαδή να μπορώ να εισάγω στοιχεία από μια φόρμα ΜΕΧΡΙ και 10 [stoixeia(onoma,eponymo,arithmos)] και όταν ολοκληρωθούν τα 10 στοιχεία να πατάει πάνω στη τελευταία εγγραφή. Τι πρέπει να χρησιμοποιήσω για να το πετύχω αυτό; Υπάρχει κάποιο online παράδειγμα ή από κάπου να ξεκινήσω; Αυτό που κατάφερα είναι να προσθέτει κάθε φορά ολόκληρη τη δομή του xml.
hawkpilot Δημοσ. 18 Απριλίου 2012 Δημοσ. 18 Απριλίου 2012 Δυστυχώς με τίποτα δε λέει να δουλέψει Τουλάχιστον μπορώ να δουλέψω τοπικά μέχρι να δω τι θα γίνει, κάτι είναι και αυτό. Να ρωτήσω και κάτι άλλο. Θελω να δημιουργήσω ένα xml σαν αυτό: > <apotelesmata> <stoixeia> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> . . . </apotelesmata> Δηλαδή να μπορώ να εισάγω στοιχεία από μια φόρμα ΜΕΧΡΙ και 10 [stoixeia(onoma,eponymo,arithmos)] και όταν ολοκληρωθούν τα 10 στοιχεία να πατάει πάνω στη τελευταία εγγραφή. Τι πρέπει να χρησιμοποιήσω για να το πετύχω αυτό; Υπάρχει κάποιο online παράδειγμα ή από κάπου να ξεκινήσω; Αυτό που κατάφερα είναι να προσθέτει κάθε φορά ολόκληρη τη δομή του xml. Θα κάνω δοκιμή και στο linux που χρησιμοποιώ, έτσι από περιέργεια, για να δω αν δουλεύει. Όσον αφορά το ερώτημά σου για τη φόρμα, δεν καταλαβαίνω ακριβώς τί θέλεις να κάνεις. Εννοείς ότι θες να γράφεις το τελικό xml αφού ο χρήστης έχει εισάγει 10 εγγραφές?
bill@ki Δημοσ. 19 Απριλίου 2012 Μέλος Δημοσ. 19 Απριλίου 2012 Θα κάνω δοκιμή και στο linux που χρησιμοποιώ, έτσι από περιέργεια, για να δω αν δουλεύει. Όσον αφορά το ερώτημά σου για τη φόρμα, δεν καταλαβαίνω ακριβώς τί θέλεις να κάνεις. Εννοείς ότι θες να γράφεις το τελικό xml αφού ο χρήστης έχει εισάγει 10 εγγραφές? Δοκίμασε το για να μας φύγει η απορία. Οσο για το ερώτημα. Εχω μια φόρμα όπου συμπληρώνω 3 εγγραφές κάθε φορά: όνομα, επώνυμο και αριθμό. Θέλω αυτές οι εγγραφές/στοιχεια να αποθηκεύονται σε ένα xml. Οι maximum εγγραφές που θέλω να κρατάει το xml να είναι 10. ΑΛΛΑ αν πάω πχ να κάνω 11η εγγραφή να πατάει πάνω από την αρχική(την πιο παλια) κτλ. Οι εγγραφές δεν θα γίνονται ταυτόχρονα την ίδια στιγμή. Στη συνέχεια κάνω parser τα αποτελέσματα και τα εμφανίζω σε πίνακα. Στην ουσία το τελικό xml με τις εγγραφές να είναι αυτής της μορφής: > <apotelesmata> <stoixeia> <onoma>xxxxx</onoma> <eponymo>xxxxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxx</onoma> <eponymo>xxxxx</eponymo> <arithmos>xxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxx</onoma> <eponymo>xxxxx</eponymo> <arithmos>xxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxx</onoma> <eponymo>xxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxx</onoma> <eponymo>xxxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxx</onoma> <eponymo>xxxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxxx</onoma> <eponymo>xxxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxxx</onoma> <eponymo>xxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxxxx</onoma> <eponymo>xxxxxx</eponymo> <arithmos>xxxxx</arithmos> </stoixeia> <stoixeia> <onoma>xxx</onoma> <eponymo>xxxx</eponymo> <arithmos>xxxx</arithmos> </stoixeia> </apotelesmata>
hawkpilot Δημοσ. 19 Απριλίου 2012 Δημοσ. 19 Απριλίου 2012 Έχεις pm. Αυτό που θες να κάνεις με το xml (δλδ να κρατάς max 10 records και το πιο παλιό να χάνεται για χάρη του πιο καινούργιου) απαιτεί custom κώδικα. Αν ήθελα να το υλοποιήσω θα έκανα χρήση database (πχ mysql) ή αν δεν υπάρχει αυτή η δυνατότητα θα έγραφα στο xml και ένα αριθμητικό πεδίο το οποίο θα αυξάνεται κάθε φορά που καταχωρείται μία νέα εγγραφή. Για τη διαχείρηση των εγγραφών θα χρησιμοποιούσα το SimpleXMLElement (μέσω των simplexml_load_string ή simplexml_load_file).
Uberalles_gr Δημοσ. 19 Απριλίου 2012 Δημοσ. 19 Απριλίου 2012 Τα δεδομένα σου από την καταχώρηση της φόρμας σου τα κρατάς και σε βάση;;
bill@ki Δημοσ. 19 Απριλίου 2012 Μέλος Δημοσ. 19 Απριλίου 2012 Τα δεδομένα σου από την καταχώρηση της φόρμας σου τα κρατάς και σε βάση;; Τα δεδομένα τα κρατάω μόνο σε xml. Δεν "πρέπει" να χρησιμοποιήσω κάτι διαφορετικό στην περίπτωση μου, γιατί είναι για πτυχιακή. Είδα κάποια παραπλήσια ποστ και άλλα πόσα μέσω google, αλλά δεν έχω καταλάβει ακριβώς τι πρέπει να κάνω. Επομένως η λογική να ποστάρω τα δεδομενα μου σε μια σελιδα και να δημιουργήσω τη δομή του xml αρχείου δεν κάνει για μένα; Από την άλλη όμως όταν ολοκληρωθούν οι 10 εγγραφές το xml θα έχει στάνταρ μορφή. Απλά οι εγγραφές μετά τη 10η θα "πατάνε" τις παλιες. Έχεις pm. Αυτό που θες να κάνεις με το xml (δλδ να κρατάς max 10 records και το πιο παλιό να χάνεται για χάρη του πιο καινούργιου) απαιτεί custom κώδικα. Αν ήθελα να το υλοποιήσω θα έκανα χρήση database (πχ mysql) ή αν δεν υπάρχει αυτή η δυνατότητα θα έγραφα στο xml και ένα αριθμητικό πεδίο το οποίο θα αυξάνεται κάθε φορά που καταχωρείται μία νέα εγγραφή. Για τη διαχείρηση των εγγραφών θα χρησιμοποιούσα το SimpleXMLElement (μέσω των simplexml_load_string ή simplexml_load_file). Οκ για το pm. Δυστυχώς όπως ξανα είπα πρέπει να χρησιμοποιήσω μόνο xml, αλλιώς τα πράγματα θα ήταν διαφορετικά. Οταν λες "αριθμητικό πεδίο" εννοείς ένα μετρητή, για να μετράει τις εγγραφές; Αν το πάρουμε διαφορετικά το θέμα. Δηλαδή να καταχωρήσω εξαρχής 10 εγγραφές σε ένα xml (ας πούμε και χειροκίνητα), απλά ο κώδικας μετά να ανανεώνει τις επόμενες εγγραφές με τις πιο παλιές. Το όλο σκηνικό αλλάζει; Βέβαια δεν ξέρω κατά πόσο είναι "σωστό" αυτό.
hawkpilot Δημοσ. 19 Απριλίου 2012 Δημοσ. 19 Απριλίου 2012 Τα δεδομένα τα κρατάω μόνο σε xml. Δεν "πρέπει" να χρησιμοποιήσω κάτι διαφορετικό στην περίπτωση μου, γιατί είναι για πτυχιακή. Είδα κάποια παραπλήσια ποστ και άλλα πόσα μέσω google, αλλά δεν έχω καταλάβει ακριβώς τι πρέπει να κάνω. Επομένως η λογική να ποστάρω τα δεδομενα μου σε μια σελιδα και να δημιουργήσω τη δομή του xml αρχείου δεν κάνει για μένα; Από την άλλη όμως όταν ολοκληρωθούν οι 10 εγγραφές το xml θα έχει στάνταρ μορφή. Απλά οι εγγραφές μετά τη 10η θα "πατάνε" τις παλιες. Οκ για το pm. Δυστυχώς όπως ξανα είπα πρέπει να χρησιμοποιήσω μόνο xml, αλλιώς τα πράγματα θα ήταν διαφορετικά. Οταν λες "αριθμητικό πεδίο" εννοείς ένα μετρητή, για να μετράει τις εγγραφές; Αν το πάρουμε διαφορετικά το θέμα. Δηλαδή να καταχωρήσω εξαρχής 10 εγγραφές σε ένα xml (ας πούμε και χειροκίνητα), απλά ο κώδικας μετά να ανανεώνει τις επόμενες εγγραφές με τις πιο παλιές. Το όλο σκηνικό αλλάζει; Βέβαια δεν ξέρω κατά πόσο είναι "σωστό" αυτό. Επιτρέπεται να αλλάξεις τη δομή του xml? Αν ναι, αυτό που θα έκανα είναι να τροποποιήσω τη δομή έτσι... > <apotelesmata> <stoixeia> <id>1</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> <stoixeia> <id>2</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> . <stoixeia> <id>10</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> </apotelesmata> Φορτώνω το xml μέσω του SimpleXMLElement και γνωρίζω ότι το max id που έχω είναι το 10. Άρα, προσθέτοντας μία ακόμα εγγραφή, γνωρίζω ότι θα έχει id 11. Τώρα, είτε διαγράφω το element με id 1 και γράφω το xml στο δίσκο, είτε γράφω όλες τις (11) εγγραφές και όταν πρόκειται να εμφανίσω τις 10 πιο πρόσφατες, πάλι με το SimpleXMLElement βρίσκω τα id, κάνω descending sorting με το id και τυπώνω τις πρώτες 10 εγγραφές.
bill@ki Δημοσ. 20 Απριλίου 2012 Μέλος Δημοσ. 20 Απριλίου 2012 Την δομή την κάνω ότι θέλω, δεν υπάρχει περιορισμός. Ακολουθώντας τις οδηγίες σου κατάφερα να δημιουργήσω το xml αρχείο και να προσθέτω τις καινούργιες εγγραφές στην αρχή του αρχείου (τελικά όπως είπες και εσύ τις εγγραφές δεν θα τις σβήνω, άσχετα με το πόσες θα εμφανίσω στο τέλος). Αυτό που δεν κατάφερα ΜΕ ΤΙΠΟΤΑ μέχρι στιγμής είναι να αυξάνω το id κατα 1 σε κάθε εγγραφή. Πως στο καλό μπορεί να γίνει αυτό; Εβαλά μια μεταβλητή στο σημείο που παίρνει τιμή και χρησιμοποίησα και ένα counter για να αυξάνει σε κάθε βήμα, αλλά τίποτα. Στο σημείο αυτό αυξάνεται το id: > $id = $xml->createElement("id"); $idText = $xml->createTextNode("1"); $id->appendChild($idText); Επίσης θέλω να περνάω στο xml 2 τιμές (όχι χειροκίνητα). Μπορώ από την σελίδα που βρίσκονται να τις φορτώνω απευθείας στο xml ή καλύτερος τρόπος θα ήταν να τις φορτώσω στη φόρμα που συμπληρώνω τα στοιχεία και από εκεί να ακολουθήσουν τη πορεία προς το xml αρχείο;
hawkpilot Δημοσ. 20 Απριλίου 2012 Δημοσ. 20 Απριλίου 2012 Την δομή την κάνω ότι θέλω, δεν υπάρχει περιορισμός. Ακολουθώντας τις οδηγίες σου κατάφερα να δημιουργήσω το xml αρχείο και να προσθέτω τις καινούργιες εγγραφές στην αρχή του αρχείου (τελικά όπως είπες και εσύ τις εγγραφές δεν θα τις σβήνω, άσχετα με το πόσες θα εμφανίσω στο τέλος). Αυτό που δεν κατάφερα ΜΕ ΤΙΠΟΤΑ μέχρι στιγμής είναι να αυξάνω το id κατα 1 σε κάθε εγγραφή. Πως στο καλό μπορεί να γίνει αυτό; Εβαλά μια μεταβλητή στο σημείο που παίρνει τιμή και χρησιμοποίησα και ένα counter για να αυξάνει σε κάθε βήμα, αλλά τίποτα. Στο σημείο αυτό αυξάνεται το id: > $id = $xml->createElement("id"); $idText = $xml->createTextNode("1"); $id->appendChild($idText); ... Καλημέρα, όταν ανέφερα την αύξηση του id προφανώς εννοούσα στις νέες εγγραφές που προσθέτεις. Για να μπορέσεις να υπολογίσεις το επόμενο νούμερο του id θα χρειαστεί στο post της φόρμας να φορτώσεις το xml και να κρατήσεις σε μία μεταβλητή το max id που θα βρεις στις εγγραφές του κάνοντας ένα απλό iteration. ... Επίσης θέλω να περνάω στο xml 2 τιμές (όχι χειροκίνητα). Μπορώ από την σελίδα που βρίσκονται να τις φορτώνω απευθείας στο xml ή καλύτερος τρόπος θα ήταν να τις φορτώσω στη φόρμα που συμπληρώνω τα στοιχεία και από εκεί να ακολουθήσουν τη πορεία προς το xml αρχείο; Δεν καταλαβαίνω τί εννοείς. Ποιές 2 τιμές? Μπορείς να βάλεις ένα παράδειγμα με xml?
bill@ki Δημοσ. 21 Απριλίου 2012 Μέλος Δημοσ. 21 Απριλίου 2012 Καλημέρα, όταν ανέφερα την αύξηση του id προφανώς εννοούσα στις νέες εγγραφές που προσθέτεις. Για να μπορέσεις να υπολογίσεις το επόμενο νούμερο του id θα χρειαστεί στο post της φόρμας να φορτώσεις το xml και να κρατήσεις σε μία μεταβλητή το max id που θα βρεις στις εγγραφές του κάνοντας ένα απλό iteration. Λοιπόν έβγαλα άκρη (τουλάχιστον φαίνεται να λειτουργεί). Μετράω τα id και τα αποθηκεύω σε μια μεταβλητή την $countnum. Και στη συνέχεια χρησιμοποιώ τη μεταβλητή $max για να αυξάνω την τιμή του. > $countnum = $xml->getElementsByTagName('id')->length+1; $max = $countnum; Με αυτό το τελευταίο ολοκλήρωσα την αποθήκευση των στοιχείων. Τώρα για την προβολή των στοιχείων σε πίνακα χρησιμοποιούσα αυτό το parser, στο οποίο φορτώνω το xml και το xsl αρχείο: > function loadXMLDoc(dname) { if (window.XMLHttpRequest) { xhttp = new XMLHttpRequest(); } else { xhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xhttp.open("GET", dname, false); xhttp.send(""); return xhttp.responseXML; } function displayResult() { xml = loadXMLDoc("../xml/test.xml"); xsl = loadXMLDoc("../xml/styleXML.xsl"); // code for IE if (window.ActiveXObject) { ex = xml.transformNode(xsl); document.getElementById("result").innerHTML = ex; } // code for Mozilla, Firefox, Opera, etc. else if (document.implementation && document.implementation.createDocument) { xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); resultDocument = xsltProcessor.transformToFragment(xml, document); document.getElementById("result").appendChild(resultDocument); } } Μπορώ να χρησιμοποιήσω το ίδιο parser και τώρα; Η μόνη διαφορά είναι ότι τροποποίησα λίγο το αρχικό xml, δηλαδή έγινε έτσι: > <result> <skor> . . <stoixeia> <id>3</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> <stoixeia> <id>2</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> <stoixeia> <id>1</id> <onoma></onoma> <eponymo></eponymo> <arithmos></arithmos> </stoixeia> </skor> </result> Δεν καταλαβαίνω τί εννοείς. Ποιές 2 τιμές? Μπορείς να βάλεις ένα παράδειγμα με xml? Αυτό με τις τιμές το έλυσα οκ. Απλά να ρωτήσω κάτι. Περνάω τις τιμές στη φορμα μια χαρά, αλλά αν κάνω τα πεδία τις φορμας disabled="disabled" για να μην μπορεί ο χρήστης να πειράξει τις τιμές, τότε δεν τις αποθηκεύει στο xml. Γιατί; Με ποιο τρόπο μπορώ να τις κλειδώσω ώστε ο χρήστης να μην μπορεί να τις αλλάξει;
hawkpilot Δημοσ. 22 Απριλίου 2012 Δημοσ. 22 Απριλίου 2012 ... Με αυτό το τελευταίο ολοκλήρωσα την αποθήκευση των στοιχείων. Τώρα για την προβολή των στοιχείων σε πίνακα χρησιμοποιούσα αυτό το parser, στο οποίο φορτώνω το xml και το xsl αρχείο: > ... Μπορώ να χρησιμοποιήσω το ίδιο parser και τώρα; Η μόνη διαφορά είναι ότι τροποποίησα λίγο το αρχικό xml, δηλαδή έγινε έτσι: ... Υποθέτω πως ναι, γιατί δεν το δοκιμάζεις? Δε φαίνεται να έχει hardcoded τα children/attributes. Αυτό με τις τιμές το έλυσα οκ. Απλά να ρωτήσω κάτι. Περνάω τις τιμές στη φορμα μια χαρά, αλλά αν κάνω τα πεδία τις φορμας disabled="disabled" για να μην μπορεί ο χρήστης να πειράξει τις τιμές, τότε δεν τις αποθηκεύει στο xml. Γιατί; Με ποιο τρόπο μπορώ να τις κλειδώσω ώστε ο χρήστης να μην μπορεί να τις αλλάξει; Σε αυτή την απορία δε μπορώ να σε βοηθήσω πολύ γιατί μάλλον αφορά html - υποθέτω ότι το πρόβλημα που έχεις είναι ότι στο post της φόρμας δε σου μεταφέρει τις παράμετρους που είναι disabled, σωστά?
bill@ki Δημοσ. 22 Απριλίου 2012 Μέλος Δημοσ. 22 Απριλίου 2012 Υποθέτω πως ναι, γιατί δεν το δοκιμάζεις? Δε φαίνεται να έχει hardcoded τα children/attributes. Περνάει κανονικά τις εγγραφές σε html πίνακα. Το θέμα είναι ότι εγώ δεν θέλω να τις εμφανίζει όλες, αλλά τις 10-15 τελευταίες εγγραφές. Ο κώδικας αυτός έχει τη δυνατότητα να τροποποιηθεί για κάτι τέτοιο ή δεν κάνει; Σε αυτή την απορία δε μπορώ να σε βοηθήσω πολύ γιατί μάλλον αφορά html - υποθέτω ότι το πρόβλημα που έχεις είναι ότι στο post της φόρμας δε σου μεταφέρει τις παράμετρους που είναι disabled, σωστά? Το έλυσα τελικά αυτό, ήταν θέμα εντολής στην φόρμα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα