Δημοσιεύτηκε: 17 Ιουν 2012, 08:49
koslibpro έγραψε:
[...]
res = mysql_query('SELECT username FROM users WHERE username = "' . $username . '";');
if ( mysql_num_rows( $res ) == 0 ) {
mysql_query('INSERT INTO users SET username = "' . $username . '", password = "' . $password . '", email = "' . $email . '";');
[...]
Ποτέ, μα ποτέ μην γράφεις το mysql_query έτσι, εκτός κι αν θέλεις να ρισκάρεις να σε χακάρουν.
Υπάρχουν οδηγοί στο php.net ειδικά γι' αυτό το λόγο: http://php.net/manual/en/function.mysql-query.php
- Κώδικας: Επιλογή όλων
// Formulate Query
// This is the best way to perform an SQL query
// For more examples, see mysql_real_escape_string()
$query = sprintf("SELECT firstname, lastname, address, age FROM friends
WHERE firstname='%s' AND lastname='%s'",
mysql_real_escape_string($firstname),
mysql_real_escape_string($lastname));
// Perform Query
$result = mysql_query($query);
Ο λόγος είναι επειδή αν ο χρήστης χρησιμοποιήσει το ερωτηματικό (;) σε ένα από τα πεδία, τότε θα μπορέσει να εκτελέσει οποιαδήποτε εντολή θέλει μέσω mysql. Φυσικά πρέπει κι άλλες προϋποθέσεις να εκπληρωθούν ούτως ώστε να εμφανιστούν μερικά ευαίσθητα δεδομένα, αλλά είναι μια πιθανότητα την οποία κανείς δεν θα πρέπει να ρισκάρει.
parenthesis έγραψε:Εμένα μου πετάει αυτό το σφάλμα μόνο όταν επιχειρώ να κάνω registrate κάποιο χρήστη που ήδη υπάρχει (δηλ το username του υπάρχει στη βάση).
Μολις το δοκίμασα, συμφωνώ, το ίδιο και σε μένα.
Ίσως το echo ( 'Error encountered during registration.' ); θα έπρεπε να είναι echo ( 'Error: User already in database' );