koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 το visitor_name να πω οτι συμπληρωνεται αυτοματα απο την mysql,δηλαδη δεν το εισαγει ο χρηστης,μπαινει προκαθορισμενα.δεν ξερω αν αυτο εχει καμια σημασια. επισης,το collation ειναι utf8_unicode_ci. να και ενα screenshot απο ολη την βαση. οποτε defacer η απαντηση στο ερωτημα σου ειναι οτι δεν υπαρχει διαφορα αναμεσα στο city/area/name και το visitor_name βεβαια τωρα αρχισε να παρουσιαζεται και αλλο ενα προβλημα:οποτε καταχωρειται κατι με ελληνικους χαρακτηρες,δημιουργει μια κενη εγγραφη στην βαση και φυσικα δεν εμφανιζεται στην σελιδα..τι εγινε τωρα και χαλασε αυτο?:S παιζει ρολο το μεγεθος του varchar? ps:το αρχειο add.php ειναι αυτο: > <html> <?php session_start(); if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) ) { if(isset($_POST["name"])){ $name = htmlentities(mysql_real_escape_string($_POST["name"])); } else { echo "Παρακαλώ συμπληρώστε το όνομα του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["city"])){ $city = mysql_real_escape_string($_POST["city"]); } else { echo "Παρακαλώ συμπληρώστε την πόλη λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["street"])){ $street = mysql_real_escape_string($_POST["street"]); } else { echo "Παρακαλώ συμπληρώστε την οδό λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["area"])){ $area = mysql_real_escape_string($_POST["area"]); } else { echo "Παρακαλώ συμπληρώστε την οδό λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } $type = mysql_real_escape_string($_POST["eidos"]); $number = mysql_real_escape_string($_POST["number"]); $tk = mysql_real_escape_string($_POST["tk"]); $comments = mysql_real_escape_string($_POST["comments"]); include 'logic/db.php'; $sql = "INSERT INTO shops (name,type,city,area,street,number,tk,comments) VALUES ('$name','$type','$city','$area','$street','$number','$tk','$comments')"; if (!mysql_query($sql,$con)) { die('Σφάλμα: ' . mysql_error()); } echo 'Τα στοιχεία καταχωρήθηκαν επιτυχώς! Ευχαριστούμε για την βοήθεια σας!<br />'; echo '<a href=http://www.ksepoulima.com>Επιστροφή στην αρχική σελίδα</a>'; unset($_SESSION['security_code']); } else { echo "Wrong captcha!"; } ?> </html>
defacer Δημοσ. 27 Σεπτεμβρίου 2012 Δημοσ. 27 Σεπτεμβρίου 2012 Λοιπόν βάση των δεδομένων που μας έδωσες.... η πιο πρόσφατη θεωρία μου. Σίγουρα εκτελείται το SET NAMES σε όλες τις σελίδες; Γιατί τα δεδομένα που βλέπουμε στον πίνακά σου είναι κείμενο κωδικοποιημένο αρχικά σε ISO-8859-1. Δεδομένου ότι η MySql δεν έχει κανένα τρόπο να ξέρει αν το encoding είναι αυτό ή οποιοδήποτε άλλο single byte encoding πέρα από το SET NAMES που δίνεις (ή configuration του server τέλος πάντων) -- μήπως απλά κάπου δεν γίνεται το SET NAMES? Κατά τα άλλα το μόνο σίγουρο είναι ότι τα δεδομένα σου είναι αποθηκευμένα στη βάση λάθος. Με προβληματίζει επίσης ότι ενώ λέμε πως έχεις δώσει SET NAMES το οποίο εξαναγκάζει τη MySql πριν σου επιστρέψει δεδομένα να τα μετατρέψει από utf-8 σε iso-8859-7, δεν υπάρχει κανένα πρόβλημα. Οι συγκεκριμένοι χαρακτήρες που είδαμε στα screenshot δεν υπάρχουν στο iso-8859-7, οπότε τι κάνει εκεί η MySql; Δε θα έπρεπε να τα αντικαθιστά με ερωτηματικά ή τέλος πάντων κάτι πιο "ανθρώπινο" από τη μοναδική πιθανή εξήγηση για την συμπεριφορά που βλέπουμε; Άρα μήπως και πάλι το SET NAMES απλά δεν πιάνει; (Στην περίπτωση αυτή τα δεδομένα έρχονται λάθος από τη MySql αλλά εμφανίζονται σωστά στον browser γιατί κάνει αυτός τη "μετατροπή" από 8859-1 σε 8859-7, η οποία μετατροπή είναι σε εισαγωγικά γιατί δεν έχει κανένα λογικό νόημα αλλά είναι "προφανής" σε τεχνικό επίπεδο οπότε και "κατά τύχη" δουλεύουν όλα ρολόι). Update: όντως αυτό συμβαίνει. Δεν υπάρχει character set 'iso-8859-7' στη MySql. Το σωστό θα ήταν 'greek'. Tο SET NAMES query σου προκαλεί error αλλά δεν το βλέπεις γιατί δεν ελέγχεις καθόλου την επιστρεφόμενη τιμή (κακό παιδί...). Το πρόβλημά σου τώρα είναι πως αν κάνεις ότι αλλάζεις το charset σε greek θα αρχίσεις πιθανότατα να βλέπεις παντού ερωτηματικά αντί για ελληνικά.
koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 αν το αλλαξω σε greek,απο εδω και περα τουλαχιστον θα εμφανιζονται ολα κανονικα?και οσα ειναι με ???? θα τα σβησω.
defacer Δημοσ. 27 Σεπτεμβρίου 2012 Δημοσ. 27 Σεπτεμβρίου 2012 Να σου πώ την αλήθεια το καλύτερο θα ήταν να τα αλλάξεις όλα σε utf-8 με την ευκαιρία (συμπεριλαμβανομένων και των .php αρχείων σου). Αλλά ναι, αν το αλλάξεις σε greek απο δώ και πέρα όλα θα είναι κανονικά (μπορείς να το δοκιμάσεις εύκολα).
koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 το δοκιμασα και ειναι ολα οκ τωρα.το εβαλα greek.αν το θεσω ως utf-8,τοτε παλι επιστρεφουμε στα προβληματα με τα περιεργα συμβολα τα ερωτηματικα κτλπ.αφου λειτουργει ομως οκ με greek,δεν νομιζω οτι υπαρχει λογος να ασχοληθουμε περαιτερω με αυτο τωρα. οσον αφορα το αλλο,το οτι δεν εισαγονται στοιχεια στην βαση αλλα δημιουργουνται κενες εγγραφες,τι κανουμε τωρα με αυτο?προσπαθω να καταλαβω γιατι γινεται αυτο,αλλα και παλι δεν βγαζω ακρη.. ps:πριν μου ειπες "Tο SET NAMES query σου προκαλεί error αλλά δεν το βλέπεις γιατί δεν ελέγχεις καθόλου την επιστρεφόμενη τιμή (κακό παιδί...)."αν θελεις κανε εναν κοπο και γραψε μου ποια τιμη και πως να ελεγψω οταν επιστρεφεται,γιατι με μπερδεψες οφειλω να πω
defacer Δημοσ. 27 Σεπτεμβρίου 2012 Δημοσ. 27 Σεπτεμβρίου 2012 Εφόσον τα αρχεία σου είναι σε utf-8 (μόλις ξαναδιάβασα από την αρχή) τότε να τα κάνεις όλα utf-8 (έτσι κι αλλιώς όλα τα δεδομένα που έχεις αποθηκεύσει ήδη είσαι διατεθειμένος να τα σβήσεις, οπότε τι σε χαλάει?). Είναι ο μόνος τρόπος να μην έχεις σίγουρα κανένα τράβηγμα στο μέλλον. Αυτό που λες για το ότι δεν εισάγονται στοιχεία πρώτη φορά το ακούω... Τέλος, για το πώς ελέγχεις αν έγινε λάθος διάβασε το documentation: For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error. For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error. Το οποίο παρεμπιπτόντως λέει "μη χρησιμοποιείς άλλο πια τις mysql_ συναρτήσεις". Good advice.
koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 Εφόσον τα αρχεία σου είναι σε utf-8 (μόλις ξαναδιάβασα από την αρχή) τότε να τα κάνεις όλα utf-8 (έτσι κι αλλιώς όλα τα δεδομένα που έχεις αποθηκεύσει ήδη είσαι διατεθειμένος να τα σβήσεις, οπότε τι σε χαλάει?). Είναι ο μόνος τρόπος να μην έχεις σίγουρα κανένα τράβηγμα στο μέλλον. Αυτό που λες για το ότι δεν εισάγονται στοιχεία πρώτη φορά το ακούω... Τέλος, για το πώς ελέγχεις αν έγινε λάθος διάβασε το documentation: Το οποίο παρεμπιπτόντως λέει "μη χρησιμοποιείς άλλο πια τις mysql_ συναρτήσεις". Good advice. οκ λοιπον θα τα βαλω ολα utf-8 για να ξεμπερδευω. και ομως,δεν μπαινουν τα στοιχεια στην βαση,ειναι σιγουρα σωστο το add.php ετσι? θα διαβασω το documentation και σιγα σιγα θα αρχισω λοιπον να μην χρησιμοποιω αυτες τις συναρτησεις ευχαριστω για την βοηθεια μεχρι τωρα
koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 ειναι 4-5 ποστ παραπανω σε spoiler. να το κι εδω > <html> <?php session_start(); if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) ) { if(isset($_POST["name"])){ $name = htmlentities(mysql_real_escape_string($_POST["name"])); } else { echo "Παρακαλώ συμπληρώστε το όνομα του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["city"])){ $city = mysql_real_escape_string($_POST["city"]); } else { echo "Παρακαλώ συμπληρώστε την πόλη λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["street"])){ $street = mysql_real_escape_string($_POST["street"]); } else { echo "Παρακαλώ συμπληρώστε την οδό λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } if(isset($_POST["area"])){ $area = mysql_real_escape_string($_POST["area"]); } else { echo "Παρακαλώ συμπληρώστε την οδό λειτουργίας του καταστήματος και καταχωρήστε ξανά."; } $type = mysql_real_escape_string($_POST["eidos"]); $number = mysql_real_escape_string($_POST["number"]); $tk = mysql_real_escape_string($_POST["tk"]); $comments = mysql_real_escape_string($_POST["comments"]); include 'logic/db.php'; $sql = "INSERT INTO shops (name,type,city,area,street,number,tk,comments) VALUES ('$name','$type','$city','$area','$street','$number','$tk','$comments')"; if (!mysql_query($sql,$con)) { die('Σφάλμα: ' . mysql_error()); } echo 'Τα στοιχεία καταχωρήθηκαν επιτυχώς! Ευχαριστούμε για την βοήθεια σας!<br />'; echo '<a href=http://www.ksepoulima.com>Επιστροφή στην αρχική σελίδα</a>'; unset($_SESSION['security_code']); } else { echo "Wrong captcha!"; } ?> </html>
defacer Δημοσ. 27 Σεπτεμβρίου 2012 Δημοσ. 27 Σεπτεμβρίου 2012 Δεν ξέρω, κάνε echo το query και δώστο με το χέρι για να δεις τι γίνεται. Πάντως έχει αρκετά θέματα αυτό το script, π.χ. είναι λάθος το htmlentities() στην $_POST["name"] session_start() μετά την αποστολή περιεχομένου (<html>) ανασφαλής χρήση της mysql_real_escape_string (δεν υπάρχει ακόμα connection οπότε μπλα μπλα θεωρία μπλα μπλα δε μπορεί να κάνει σωστά τη δουλειά της πάντα)
kalogeros Δημοσ. 27 Σεπτεμβρίου 2012 Δημοσ. 27 Σεπτεμβρίου 2012 Για αυτό που λες με την κενή εγγραφή, μπορεί να παίζει ρόλο το μέγεθος του varchar. Οι 20 χαρακτήρες που χρησιμποποιείς είναι πολύ δεσμευτικοί και εάν προσπαθήσεις να εισάγεις κάτι με μεγαλύτερο μέγεθος, η MySQL θα το απορρίψει. Δοκίμασε να αλλάξεις το μέγεθος με την ALTER. Θα σου πρότεινα να χρησιμοποιήσεις το μέγιστο (255), εκτός εάν έχεις πρόβλημα χώρου στο δίσκο σου.
koslibpro Δημοσ. 27 Σεπτεμβρίου 2012 Μέλος Δημοσ. 27 Σεπτεμβρίου 2012 το query επιστρεφει αυτο INSERT INTO shops (name,type,city,area,street,number,tk,comments) VALUES ('','','','','','','',''). αρα δεν περνανε σωστα τα δεδομενα απο την φορμα.. θα λαβω υποψιν μου και τις παρατηρησεις που εκανες
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα