Achis Δημοσ. 9 Σεπτεμβρίου 2013 Δημοσ. 9 Σεπτεμβρίου 2013 Καλημέρα, εδώ και μία εβδομάδα παλεύω να διορθώσω ένα notice (8) που μου εμφανίζει σε μία εφαρμογή γραμμένη σε cake php, την οποία έγραψε κάποιος άλλος και μου έχει ανατεθεί σαν εργασία . Μου εμφανίζει : Notice (8): Undefined index: url [APP/View/Clients/index.ctp, line 98] if(isset($client[0]) && $client[0]['contacts']['type_of']==3 && isset($var) && $var=='clients_with_contacts' && $this->Paginator->current()==1){ line 98 : echo '<td style="background:lightblue">'.$client[0]['Client'][$field].'</td>'; Και αντίστοιχα μου εμφανίζει σφάλμα σε κάθε γραμμή που υπάρχει το $client[0]['Client'][$field]. Κάθε βοήθεια δεκτή. Ευχαριστώ προκαταβολικά.
sougiasdj Δημοσ. 9 Σεπτεμβρίου 2013 Δημοσ. 9 Σεπτεμβρίου 2013 Κανε ενα print_r και πες μας τι θα σου δώσει. 1
Achis Δημοσ. 9 Σεπτεμβρίου 2013 Μέλος Δημοσ. 9 Σεπτεμβρίου 2013 Εμφανίζει την τελευταία εγγραφή που έχουμε καταχωρίσει... Array ( [Client] => Array ( [id] => 131 [joomlauser_id] => 214 [country_id] => 82 [department_id] => 23 [city_id] => 18 [bin] => [name] => ΓΙΩΡΓΟΣ Γ => [email protected] [mobile] => 6972344566 [phone] => 23102523488 [address] => [birth] => => ) [Contact] => Array ( ) [Clientprofession] => Array ( [0] => Array ( [id] => 198 [profession_id] => 33 [client_id] => 131 [todelete] => ) ) [Clientservice] => Array ( [0] => Array ( [id] => 71 [service_id] => 7 [client_id] => 131 [todelete] => [toadd] => ) ) )
sougiasdj Δημοσ. 9 Σεπτεμβρίου 2013 Δημοσ. 9 Σεπτεμβρίου 2013 Αν τα στοιχεία είναι αληθινά κάνε τα edit. 1
nucleus Δημοσ. 9 Σεπτεμβρίου 2013 Δημοσ. 9 Σεπτεμβρίου 2013 $client[0]['contacts'] Δεν υπάρχει το field contacts στο Array Client. Υπάρχει το Contact 1
Achis Δημοσ. 9 Σεπτεμβρίου 2013 Μέλος Δημοσ. 9 Σεπτεμβρίου 2013 Δεν είναι αληθινά Αντικατέστησα το $client[0]['contacts'] με το $client[0]['contact']και $client[0]['Contact'] και πάλι μου βγάζει σφάλματα , υπάρχει περίπτωση να φταίει το ότι => δεν παίρνει καμία τιμή ;;;
nucleus Δημοσ. 9 Σεπτεμβρίου 2013 Δημοσ. 9 Σεπτεμβρίου 2013 υπάρχει περίπτωση να φταίει το ότι => δεν παίρνει καμία τιμή ;;; Δεν νομίζω μιας και το [address],[birth] είναι πριν από το και είναι επίσης άδεια και υποθέτω είναι επίσης τύπου text όπως και το .Μπορείς να δοκιμάσεις να του δώσεις μια τιμή και να δεις. Κάτι άλλο που πρόσεξα if(isset($client[0]) && $client[0]['contacts']['type_of']==3 αυτό ισχύει? Που πρέπει να βρει το 'type_of'? μέσα στο Αrray Contact ή κάπου αλλού? Αν ναι αυτό είναι το λάθος [Contact] => Array ( ) Το contact είναι κενό αν δεν πρέπει να είναι εκεί μέσα κάνε σαν να μην το είπα . 1
Achis Δημοσ. 9 Σεπτεμβρίου 2013 Μέλος Δημοσ. 9 Σεπτεμβρίου 2013 Επειδή δεν έχω χρόνο τώρα, θα το κοιτάξω το απόγευμα και θα σας ενημερώσω. Σας ευχαριστώ για τον χρόνο που αφιερώσατε. 1
Achis Δημοσ. 10 Σεπτεμβρίου 2013 Μέλος Δημοσ. 10 Σεπτεμβρίου 2013 (επεξεργασμένο) Δεν ξέρω από πού πρέπει να βρει το 'type_of', αλλά όταν κάνω echo $client[0]['contacts']['type_of'] μου εμφανίζει την τιμή του κανονικά ... έχω την αίσθηση ότι κάτι παίζει με το $client[0]['Client'][$field] Διευκρίνισε λίγο αυτό που έγραψες για το [Contact] => Array ( ) Επίσης έκανα pr($field) και μου εμφάνισε τα name,email,mobile,phone,address,url από τα οποία όλα εμφανίζονται εκτός το url ... Επεξ/σία 10 Σεπτεμβρίου 2013 από Achis
Uberalles_gr Δημοσ. 10 Σεπτεμβρίου 2013 Δημοσ. 10 Σεπτεμβρίου 2013 Εμφανίζει την τελευταία εγγραφή που έχουμε καταχωρίσει... Array ( [Client] => Array ( [id] => 131 [joomlauser_id] => 214 [country_id] => 82 [department_id] => 23 [city_id] => 18 [bin] => [name] => ΓΙΩΡΓΟΣ Γ => [email protected] [mobile] => 6972344566 [phone] => 23102523488 [address] => [birth] => => ) [Contact] => Array ( ) [Clientprofession] => Array ( [0] => Array ( [id] => 198 [profession_id] => 33 [client_id] => 131 [todelete] => ) ) [Clientservice] => Array ( [0] => Array ( [id] => 71 [service_id] => 7 [client_id] => 131 [todelete] => [toadd] => ) ) ) Λάθος κομμάτι έχεις κάνει print_r. Εδώ δεν υπάρχει πουθενά το contracts. Θα πρέπει να δεις την δομή του $clients. Αυτός είναι ο πίνακας σου που μέσα περιέχει και άλλους πίνακες. Γράψε αυτό var_dump($clients) και πες μας τι σου έβγαλε. 1
defacer Δημοσ. 10 Σεπτεμβρίου 2013 Δημοσ. 10 Σεπτεμβρίου 2013 Παιδιά είναι φανερό ότι το πρόβλημα είναι πως κάπου δεν υπάρχει ένα key "url". Στον κώδικα που δίνει ο φίλος δεν υπάρχει κανένα hardcoded key "url", οπότε εκ του αποκλεισμού το μόνο που θα μπορούσε να φταίει είναι ότι η $field παίρνει κάποια στιγμή την τιμή "url". Αυτό το επιβεβαιώνει πανηγυρικά και ο φίλος που αναφέρει πως το ίδιο notice εμφανίζεται και σε κάθε άλλη γραμμή που περιέχει $client[0]['Client'][$field]. Δεν ξέρω τι ακριβώς κάνει αυτός ο κώδικας αλλά υποθέτωντας πως δουλεύει σωστά κατά τα άλλα, αυτό που πρέπει να σιγουρευτείς είναι πως δε θα κάνεις το access $client[0]['Client'][$field] εφόσον το key $field δεν υπάρχει. Άρα:echo '<td>'.(isset($client[0]['Client'][$field]) ? $client[0]['Client'][$field] : null).'</td>'; Για πιο pro καταστάσεις, αν είχες το ίδιο πρόβλημα με πολλά keys και δεν ήθελες να γεμίσεις τον κώδικα με isset θα μπορούσες να δώσεις τιμές σε όλους τους συνήθεις υπόπτους ως εξής: $client[0]['Client'] += array_fill_keys(['url', 'more', 'fields', 'here', ...], null);και μετά να συνεχίσεις πλέον άνετα χωρίς isset. Πάντως συστήνω να ψάξεις για ποιό λόγο δεν υπάρχει πάντα αυτό το "url" key. Συνήθως (αλλά όχι πάντα) το να μην υπάρχει είναι εξαιτίας τσαπατσουλιάς ή λογικού λάθους, στην οποία περίπτωση προσωπικά θα προτιμούσα να φτιάξω το πρόβλημα "στην πηγή". 1
Achis Δημοσ. 10 Σεπτεμβρίου 2013 Μέλος Δημοσ. 10 Σεπτεμβρίου 2013 var_dump($client) array(1) { [0]=> array(5) { ["Client"]=> array(7) { ["id"]=> string(3) "130" ["joomlauser_id"]=> string(3) "222" ["name"]=> string(17) "ΕΙΡΗΝΗ Χα" ["email"]=> string(17) "[email protected]" ["mobile"]=> string(10) "6981221477" ["phone"]=> string(10) "2311258189" ["address"]=> string(0) "" } ["contacts"]=> array(1) { ["type_of"]=> string(1) "3" } ["Contact"]=> array(1) { [0]=> array(5) { ["id"]=> string(3) "116" ["joomlauser_id"]=> string(3) "214" ["client_id"]=> string(3) "130" ["type"]=> string(1) "3" ["datetime"]=> string(19) "2013-09-27 08:00:00" } } ["Clientprofession"]=> array(2) { [0]=> array(4) { ["id"]=> string(3) "197" ["profession_id"]=> string(2) "33" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) } [1]=> array(4) { ["id"]=> string(3) "201" ["profession_id"]=> string(2) "32" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) } } ["Clientservice"]=> array(1) { [0]=> array(5) { ["id"]=> string(2) "68" ["service_id"]=> string(1) "7" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) ["toadd"]=> bool(false) } } } } Υπάρχει το contacts και Contact... Στον έλεγχο που έφτιαξα: if($field=="url"){ if(isset($client[0]['Client']['url'])){ echo "<span style='color:green'>Υπάρχει \$client[0]['Client']['url']:</span> ".$client[0]['Client']['url']; } else{ echo "<span style='color:red'> Δεν υπάρχει \$client[0]['Client']['url'] </span>"; } } Μου εμφανίζει Δεν υπάρχει $client[0]['Client']['url']
nucleus Δημοσ. 10 Σεπτεμβρίου 2013 Δημοσ. 10 Σεπτεμβρίου 2013 array(1) { [0]=> array(5) { ["Client"]=> array(7) { ["id"]=> string(3) "130" ["joomlauser_id"]=> string(3) "222" ["name"]=> string(17) "ΕΙΡΗΝΗ Χα" ["email"]=> string(17) "[email protected]" ["mobile"]=> string(10) "6981221477" ["phone"]=> string(10) "2311258189" ["address"]=> string(0) "" } ["contacts"]=> array(1) { ["type_of"]=> string(1) "3" } ["Contact"]=> array(1) { [0]=> array(5) { ["id"]=> string(3) "116" ["joomlauser_id"]=> string(3) "214" ["client_id"]=> string(3) "130" ["type"]=> string(1) "3" ["datetime"]=> string(19) "2013-09-27 08:00:00" } } ["Clientprofession"]=> array(2) { [0]=> array(4) { ["id"]=> string(3) "197" ["profession_id"]=> string(2) "33" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) } [1]=> array(4) { ["id"]=> string(3) "201" ["profession_id"]=> string(2) "32" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) } } ["Clientservice"]=> array(1) { [0]=> array(5) { ["id"]=> string(2) "68" ["service_id"]=> string(1) "7" ["client_id"]=> string(3) "130" ["todelete"]=> bool(false) ["toadd"]=> bool(false) } } } } Όντως δεν υπάρχει το πεδίο url στο Client. 'Ελεγξε το Model και τον αντίστοιχο Controller ,αν δεν υπάρχει εκεί θα πρέπει να το προσθέσεις στο Model του Client και στον controller να του αναθέτεις τιμή.Αν υπάρχει στο Model έλεγξε το όνομα όπως και στον controller και στο View,πρεπει παντού να χρησιμοποιείς το ίδιο όνομα. 1
Achis Δημοσ. 11 Σεπτεμβρίου 2013 Μέλος Δημοσ. 11 Σεπτεμβρίου 2013 Στο Clients/ view.ctp έχουμε : <?php foreach ($all_columns as $column) :?> <?php $field=$column['Column']['name']; klp,klp Στο ClientsController.php στην function index() έχουμε : $this->loadModel('Column'); $all_columns=$this->Column->find('all',array('order'=>'Column.order ASC','conditions'=>array('visible'=>1))); $this->set('all_columns',$all_columns); Και στο Model / Client.php : var $name = "Client"; public $hasMany=array( 'Contact'=>array( 'className' => 'Contact', 'foreignKey' => 'client_id', 'dependent' => true ), 'Clientprofession'=>array( 'className' => 'Clientprofession', 'foreignKey' => 'client_id', 'dependent' => true ), 'Clientservice'=>array( 'className' => 'Clientservice', 'foreignKey' => 'client_id', 'dependent' => true ) ); var $validate = array( 'name'=>array( 'name_must_not_be_blank'=>array( 'rule'=>'notEmpty', 'message'=>'Εισάγετε Ονοματεπώνυμο' ) ), 'phone'=>array( 'phone_must_not_be_blank'=>array( 'rule'=>'notEmpty', 'message'=>'Εισάγετε Τηλέφωνο' ) ) );//validate }//end Υπάρχει περίπτωση να είναι θέμα βάσης δεδομένων ???
nucleus Δημοσ. 11 Σεπτεμβρίου 2013 Δημοσ. 11 Σεπτεμβρίου 2013 $this->loadModel('Column'); Υπάρχει τέτοιο Model ή όχι? Δυστυχώς δεν έχω δουλέψει cakephp ποτέ οπότε σκέφτομαι με .net mvc σκεπτικό και μπορεί να προτείνω και λαλακίες. Κοίτα και την βάση πάντως.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα