impel123 Δημοσ. 10 Σεπτεμβρίου 2010 Δημοσ. 10 Σεπτεμβρίου 2010 Καλησπερα παιδια, Δν εχω πολυ εμπειρια με php/mysqli αλλα το παλευω.. Σημερα παρατηρησα το εξής.. εστω οτι εχεις τον παρακατω κώδικα: > $query="INSERT INTO companies(company_username,company_password)"; $query.=" VALUES ('$company_username','$company_password)"; //execute query $r=mysqli_query($db_connection_pointer,$query); //check query if($r){ //success } else{ //fail die("Error:".mysqli_error($db_connection_pointer)); } Αν τωρα πειραξω το ονομα της μεταβλητης "$company_username" και το κανω επίτηδες "$company_username123" για να διαπιστωσω τι θα συμβει αν κατι παει στραβα (δηλαδη αν θα εκτελεστει το κοματι else //fail επειδη μια μεταβλητη δεν υπαρχει) , το ερωτημα εκτελειται κανονικα...και απλα βγαζει ενα μηνυμα: Notice: Undefined variable: company_username123 βεβαια αποθηκευεται μονο ο κωδικός και οχι το username...δεν εινια λιγο περιέργο να συνεχίζει η εκτέλεση του script μετα απο αγνωστη μεταβλητη? Μπορω να κανω κατι για να μην συμβαινει αυτο? Μοιαζει σαν κενο ασφαλειας..
Maniakos Δημοσ. 10 Σεπτεμβρίου 2010 Δημοσ. 10 Σεπτεμβρίου 2010 Το Notice καταρχάς προέρχεται απο την PHP και όχι από την mysql (απλά το ξεκαθαρίζω) και πολύ ορθά σου λέει οτι πας να χρησιμοποιήσεις ένα variable το οποίο είναι un-initialized ουσιαστικά. Δεν είναι λάθος αυτό γιατί πολύ απλά η PHP είναι interpreted language και όχι compiled άρα το variable declaration από εσένα δεν είναι απαραίτητο αλλά το αναλαμβάνει ο interpreter κοιτάζοντας το value που είναι assigned στο variable σου χάρη στο Dynamic Typing. Επειδή λοιπόν δεν έχεις κανένα value assigned εξού και το notice, αλλά το variable σαν οντότητα είναι valid. Μπορείς να ρυθμίσεις στο php.ini το error_reporting για να βλέπεις όλα τα errors/notices τώρα που είσαι σε development ώστε να μην σου ξεφύγει κάτι: http://php.net/manual/en/errorfunc.configuration.php Η mysql το δέχεται το query σου επειδή προφανώς το company_username column στο table σου μπορεί να είναι null. Αν πας και το κάνεις edit και το κάνεις NOT NULL τότε θα πάρεις error από την mysql. Το πιο σωστό φυσικά είναι να κάνεις NOT NULL και τα 2 columns και επίσης να ελέγχεις τα company_username και company_password στην php αν είναι empty και να επιστρέφεις error πριν κάν κάνεις το query. Επίσης να τα κάνεις και escape αν δεν τα έχεις κάνει ήδη. Δες την real_escape_string
impel123 Δημοσ. 11 Σεπτεμβρίου 2010 Μέλος Δημοσ. 11 Σεπτεμβρίου 2010 Ευχαριστω φιλε και χαιρομαι για το επιπεδο σου.. Ναι κανω ελεγχους για να μην ειναι κενα τα πεδια μεσω regular expressions τα οποια οριζουν 5-20 χαρακτηρες αλφαριθμητικα και το underscore..και επισης ελεγχω αν υπαρχουν ηδη στην βαση.. Επειδη το error reporting δεν το χω κοιταξει, εχει κατι επιπλεον να ενεργοποιησω αποτι ειναι το default reporting? Γιατι εχω το default. Οποτε η λυση στο προβλημα μου ειναι το NOT NULL. Το ειχα σκεφτει απλα ρωτησα μηπως μου ξεφευγει κατι αλλο. Και μου θυμισες καποια βασικα πραγματα οτι δλδ η php ειναι interpreted language..
Maniakos Δημοσ. 12 Σεπτεμβρίου 2010 Δημοσ. 12 Σεπτεμβρίου 2010 Κοίταξε απλά στο php.ini σου και ψάξε για error_reporting. Πάνω από αυτό θα έχει ένα μεγάλο comment για το πως να το χρησιμοποιήσεις. Ενεργοποιημένο είναι ήδη, απλά πρέπει να ρυθμίσεις τι θες να δείχνει.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.