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

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

Δημοσ.

Καλημέρα, εδώ και μία εβδομάδα παλεύω να διορθώσω ένα 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']==&& 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].

Κάθε βοήθεια δεκτή.

Ευχαριστώ προκαταβολικά.

Δημοσ.

Εμφανίζει την τελευταία εγγραφή που έχουμε καταχωρίσει...

 

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] => ) ) )

Δημοσ.

Επειδή δεν έχω χρόνο  τώρα, θα το κοιτάξω το απόγευμα και θα σας ενημερώσω.

Σας ευχαριστώ για τον χρόνο που αφιερώσατε.

  • Like 1
Δημοσ. (επεξεργασμένο)

Δεν ξέρω από πού πρέπει να βρει το 'type_of', αλλά όταν κάνω  echo $client[0]['contacts']['type_of'] μου εμφανίζει την τιμή του κανονικά ... έχω την αίσθηση ότι κάτι παίζει με το $client[0]['Client'][$field]

 

Διευκρίνισε λίγο αυτό που έγραψες για το [Contact] => Array ( )

 

Επίσης έκανα pr($field) και μου εμφάνισε τα name,email,mobile,phone,address,url

από τα οποία όλα εμφανίζονται εκτός το url ...

Επεξ/σία από Achis
Δημοσ.

Παιδιά είναι φανερό ότι το πρόβλημα είναι πως κάπου δεν υπάρχει ένα 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. Συνήθως (αλλά όχι πάντα) το να μην υπάρχει είναι εξαιτίας τσαπατσουλιάς ή λογικού λάθους, στην οποία περίπτωση προσωπικά θα προτιμούσα να φτιάξω το πρόβλημα "στην πηγή".

  • Like 1
Δημοσ.

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']

Δημοσ.
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,πρεπει παντού να χρησιμοποιείς το ίδιο όνομα.

  • Like 1
Δημοσ.

Στο 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

Υπάρχει περίπτωση να είναι θέμα βάσης δεδομένων ???

Δημοσ.

 

$this->loadModel('Column');

 

 

Υπάρχει τέτοιο Model ή όχι?

 

Δυστυχώς δεν έχω δουλέψει cakephp ποτέ οπότε σκέφτομαι με .net mvc σκεπτικό και μπορεί να προτείνω και λαλακίες.

 

Κοίτα και την βάση πάντως.

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

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

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

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

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

Σύνδεση

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

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