Digital.Mind Δημοσ. 9 Μαρτίου 2011 Δημοσ. 9 Μαρτίου 2011 Είναι λιγος καιρος που εχω αρχισει με php/mysql και εχω μερικα προβλήματα. Ποιο συγκεκριμένα έχω μια φόρμα έγγραφης (register.php) η οποια στέλνει τα δεδομένα του χρήστη σε ένα αρχείο (inlude.php) το οποίο τα προσθέτει/ανανεώνει (update) σε ενα ήδη υπάρχων table (customer_info) φτιαγμένο απο έμενα (server). Το table πρεπει να ανανεωνετε μόνο εαν τα ήδη υπάρχον δεδομένα αντιστοιχούν στα δεδομένα που έχει δώσει ο χρήστης στην φορμα εγγραφής. Ενα απο τα προβλήματα που έχω είναι ότι ενώ κάνει update τα δεδομένα, αν αυτα ειναι σωστά, δεν μου βγάζει κάποιο error οταν τα δεδομένα είναι διαφορετικά ή όταν η φόρμα εγγραφής είναι κενή. Οποιαδήποτε βοήθεια ευπρόσδεκτη! >$con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("bank", $con); MYSQL_QUERY("UPDATE customer_info SET Email='$useremail',Password='$userpassword' WHERE Name='$fname' AND Surname='$sname' ") or die(mysql_error()); echo "update is successfull"; mysql_close($con)
jeconom Δημοσ. 9 Μαρτίου 2011 Δημοσ. 9 Μαρτίου 2011 Αν τα $useremail, $userpassword κτλ είναι κενά, τότε θα τρέξεις την εντολή: >UPDATE customer_info SET Email='',Password='' WHERE Name='' AND Surname='' Αυτό δεν είναι προγραμματιστικά λάθος, είναι απόλυτα σωστή sql. Είναι λογικά λάθος, αλλά αυτό πρέπει να το ελέγχεις εσύ με php. Επίσης ένα SQL Update δεν ελέγχει τι δεδομένα προϋπάρχουν σε κάποια εγγραφή, αλλά τα αντικαθιστά και αυτό που έχεις γράψει θα αντικαταστήσει τα στοιχεία όλων των εγγραφών. Αν θες να τα ελέγχεις πρέπει πρώτα να διαλέγεις τα κατάλληλα δεδομένα από την βάση με SELECT και να τα συγκρίνεις με τα αποτελέσματα.
At0m0 Δημοσ. 10 Μαρτίου 2011 Δημοσ. 10 Μαρτίου 2011 SQL INJECTION Πριν προχωρήσεις το πρόγραμμά σου, διάβασε - τουλάχιστον - τα παρακάτω όπως και δήποτε (οπωσδήποτε) sql injection 1 sql injection 2 sql injection 3 sql prepare statements και ότι άλλο σχετικό βρείς Update με έλεγχο. Εγώ κάνω αυτό που λέει ο jeconom αλλά οverkilled. υποθέτω ότι όταν δείχνεις μια εγγραφή στον χρήστη έχεις κάτι σαν: (π.x. με πίνακα με 3 πεδία, εσύ βάλε όσα θες) $result = mysql_query("SELECT field_1, field_2, field_3 FROM mytable WHERE field_1=something AND field_2=something_else"); $row = mysql_fetch_array($result) ή $row = mysql_fetch_row($result); εδώ υποθέτω ότι το $row έχει μία και μόνο μία εγγραφή. υποθέτω ότι μπορείς να κάνεις κάτι σαν: $row_orig = array_values($row); δεν ξέρω αν χρειάζεται αυτό το "copy" και πως γίνεται σωστά στην PHP αλλά αν πρέπει να γίνει τότε το $row_orig πρέπει είναι νέα "μεταβλητή" και όχι reference στην $row οπότε το update έχει την μορφή: UPDATE mytable SET field_1=something_new_1, field_2=something_new_2 WHERE field_1=$row_orig['field_1'] AND field_2=$row_orig['field_2'] AND field_3=$row_orig['field_3'] με αυτόν τον τρόπο, ότι και να έχει συμβεί (διαγραφή, αλλαγή στοιχείων από άλλον χρήστη, κ.λπ.) στην εγγραφή που διάβασες αρχικά ($row_orig), δεν προκειται να κάνει UPDATE με τίποτα. προσοχή τα όποια συντακτικά λάθη παραπάνω στην PHP και SQL δεν με ενδιαφέρουν, ξέρετε εσείς να τα διορθώνετε
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.