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

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

Δημοσ.

το visitor_name να πω οτι συμπληρωνεται αυτοματα απο την mysql,δηλαδη δεν το εισαγει ο χρηστης,μπαινει προκαθορισμενα.δεν ξερω αν αυτο εχει καμια σημασια.

 

επισης,το collation ειναι utf8_unicode_ci.

 

να και ενα screenshot απο ολη την βαση.

56644507.png

 

οποτε 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>

 

Δημοσ.

Λοιπόν βάση των δεδομένων που μας έδωσες.... η πιο πρόσφατη θεωρία μου.

 

Σίγουρα εκτελείται το 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 θα αρχίσεις πιθανότατα να βλέπεις παντού ερωτηματικά αντί για ελληνικά.

Δημοσ.

Να σου πώ την αλήθεια το καλύτερο θα ήταν να τα αλλάξεις όλα σε utf-8 με την ευκαιρία (συμπεριλαμβανομένων και των .php αρχείων σου). Αλλά ναι, αν το αλλάξεις σε greek απο δώ και πέρα όλα θα είναι κανονικά (μπορείς να το δοκιμάσεις εύκολα).

Δημοσ.

το δοκιμασα και ειναι ολα οκ τωρα.το εβαλα greek.αν το θεσω ως utf-8,τοτε παλι επιστρεφουμε στα προβληματα με τα περιεργα συμβολα τα ερωτηματικα κτλπ.αφου λειτουργει ομως οκ με greek,δεν νομιζω οτι υπαρχει λογος να ασχοληθουμε περαιτερω με αυτο τωρα.

 

οσον αφορα το αλλο,το οτι δεν εισαγονται στοιχεια στην βαση αλλα δημιουργουνται κενες εγγραφες,τι κανουμε τωρα με αυτο?προσπαθω να καταλαβω γιατι γινεται αυτο,αλλα και παλι δεν βγαζω ακρη..:(

 

ps:πριν μου ειπες "Tο SET NAMES query σου προκαλεί error αλλά δεν το βλέπεις γιατί δεν ελέγχεις καθόλου την επιστρεφόμενη τιμή (κακό παιδί...)."αν θελεις κανε εναν κοπο και γραψε μου ποια τιμη και πως να ελεγψω οταν επιστρεφεται,γιατι με μπερδεψες οφειλω να πω:D

Δημοσ.

Εφόσον τα αρχεία σου είναι σε 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.

Δημοσ.

Εφόσον τα αρχεία σου είναι σε utf-8 (μόλις ξαναδιάβασα από την αρχή) τότε να τα κάνεις όλα utf-8 (έτσι κι αλλιώς όλα τα δεδομένα που έχεις αποθηκεύσει ήδη είσαι διατεθειμένος να τα σβήσεις, οπότε τι σε χαλάει?). Είναι ο μόνος τρόπος να μην έχεις σίγουρα κανένα τράβηγμα στο μέλλον.

 

Αυτό που λες για το ότι δεν εισάγονται στοιχεία πρώτη φορά το ακούω... :)

 

Τέλος, για το πώς ελέγχεις αν έγινε λάθος διάβασε το documentation:

 

 

 

Το οποίο παρεμπιπτόντως λέει "μη χρησιμοποιείς άλλο πια τις mysql_ συναρτήσεις". Good advice.

οκ λοιπον θα τα βαλω ολα utf-8 για να ξεμπερδευω.

 

και ομως,δεν μπαινουν τα στοιχεια στην βαση,ειναι σιγουρα σωστο το add.php ετσι?

 

θα διαβασω το documentation και σιγα σιγα θα αρχισω λοιπον να μην χρησιμοποιω αυτες τις συναρτησεις :)

 

ευχαριστω για την βοηθεια μεχρι τωρα:)

Δημοσ.

ειναι 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>

Δημοσ.

Δεν ξέρω, κάνε echo το query και δώστο με το χέρι για να δεις τι γίνεται.

 

Πάντως έχει αρκετά θέματα αυτό το script, π.χ.

  • είναι λάθος το htmlentities() στην $_POST["name"]
  • session_start() μετά την αποστολή περιεχομένου (<html>)
  • ανασφαλής χρήση της mysql_real_escape_string (δεν υπάρχει ακόμα connection οπότε μπλα μπλα θεωρία μπλα μπλα δε μπορεί να κάνει σωστά τη δουλειά της πάντα)

Δημοσ.

Για αυτό που λες με την κενή εγγραφή, μπορεί να παίζει ρόλο το μέγεθος του varchar. Οι 20 χαρακτήρες που χρησιμποποιείς είναι πολύ δεσμευτικοί και εάν προσπαθήσεις να εισάγεις κάτι με μεγαλύτερο μέγεθος, η MySQL θα το απορρίψει. Δοκίμασε να αλλάξεις το μέγεθος με την ALTER. Θα σου πρότεινα να χρησιμοποιήσεις το μέγιστο (255), εκτός εάν έχεις πρόβλημα χώρου στο δίσκο σου.

Δημοσ.

το query επιστρεφει αυτο INSERT INTO shops (name,type,city,area,street,number,tk,comments) VALUES ('','','','','','','','').

 

αρα δεν περνανε σωστα τα δεδομενα απο την φορμα..

 

θα λαβω υποψιν μου και τις παρατηρησεις που εκανες:)

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

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

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

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

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

Σύνδεση

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

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