отправка параметра в функцию контроллера не удалась

1

Это мой первый проект codeigniter, и я получаю некоторые ошибки.

Я попытался отправить параметры функции контроллера со следующим кодом. Но он показывает ошибку в файле контроллера, что 'Missing arguement 1 for school::add_topic'

Вот мой код: -view file- Я включил только важные части кода

<?php
$createdby='';
?>
<a class="admin-btn" href="<?php echo base_url(); ?>index.php/school/add_topic/<?php echo myfunction(); ?>">Add Topic</a>
<?php
foreach ($r as $new)
{
    ?>
    <?php 
    if($new->id_class==$class && $new->id_subject==$sub)
    {
        $createdby=$new->id_login;
        ?>
        <tr><th>Class</th><td> <?php echo $new->class_name; ?></td></tr>
        <tr><th>Subject</th><td>
        <?php echo $new->subject_name; ?></td></tr>
        <tr><th>Created By</th><td>
        <?php echo $new->staff_name; ?></td>
        <th>Created On</th><td>
        <?php echo $new->created_on; ?></td></tr>


    <?php
    }
}
function myfunction()
{
global $createdby;
return $createdby;
}
?>  

То, что я хочу сделать, это отправить переменную '$createdby' в мою функцию контроллера 'add_topic()'.

Это моя функция контроллера:

public function add_topic($createdby)
{
    $data['createdby'] = $createdby;
    $this->load->view('topic_add',$data);
}

Заранее спасибо.

Теги:
codeigniter

2 ответа

0

На самом деле ваш поток кода неверен, так что вызванный $ createdby был вызван до его инициализации. Вы можете попробовать этот код:

<?php
$createdby='';
$selected = '';
if (!empty($r)) {
    foreach ($r as $new)
    {
        if($new->id_class==$class && $new->id_subject==$sub)
        {
            $createdby=$new->id_login;
            $selected = $new;
            break;
        }
    }
}
?>
<a class="admin-btn" href="<?php echo base_url().'index.php/school/add_topic/'. myfunction(); ?>">Add Topic</a>
<?php
if (!empty($selected)) {
    ?>
        <tr><th>Class</th><td> <?php echo $selected->class_name; ?></td></tr>
        <tr><th>Subject</th><td>
        <?php echo $selected->subject_name; ?></td></tr>
        <tr><th>Created By</th><td>
        <?php echo $selected->staff_name; ?></td>
        <th>Created On</th><td>
        <?php echo $selected->created_on; ?></td></tr> <?php
}

function myfunction()
{
global $createdby;
return $createdby;
}
?> 

А также может быть вероятность того, что $ createdby не инициализируется, поэтому функция контроллера должна иметь необязательный параметр, чем фиксированный.

public function add_topic($createdby = '')
{
    $data['createdby'] = $createdby;
    $this->load->view('topic_add',$data);
}
  • 0
    Благодарю. Второе решение легко решило эту ошибку. (публичная функция add_topic ($ creationby = '')
  • 0
    Ошибка не отображается сейчас. Но «$ createby» ничего не передает представлению «topic_add».
Показать ещё 1 комментарий
0

index.php/school/add_topic/ - это просто вызов функции add_topic в school контроллера, но нет никакого параметра, поэтому функция ничего не получает. Добавьте параметр после косой черты (например, index.php/school/add_topic/xyz), а $createdby будет xyz.

Кроме того, вы можете использовать функцию site_url() помощника URL вместо записи index.php/xxxxx

site_url('school/add_topic/param');

В вашем примере у вас очень сложная структура - почему бы не использовать ее так:

<a class="admin-btn" href="<?=site_url('school/add_topic/'.$createdby)?>">Add Topic</a>

Еще один намек: <?php echo $xyz;?> <?php echo $xyz;?> можно записать <?=$xyz?> while = быть эхом.

  • 0
    Спасибо за ответ. Я использовал параметр после школы / add_topic /, то есть "<? Php echo myfunction ();?>". Я получаю значение $, созданное позже в коде (внутри foreach), поэтому я думаю, что не могу напрямую добавить $ create by. Поэтому я использовал функцию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню