2012-04-06 4 views
0

Я новичок в PHP и пытаюсь изучить его, создав базу данных всех моих заданий (я внештатный дизайнер). Я создал код, приведенный ниже, чтобы создать таблицу для отображения всех рабочих мест, где описание содержит логотип, который прекрасно работает и создает несколько строк ....Создание функции, которая содержит цикл while

<?php 
$logojobs = mysql_query("SELECT * FROM hlgd_projects WHERE description LIKE '%logo%'", $connection); 
?> 

<a href="index.php?report=logo">View logo jobs</a> 

<?php 
if ($report == 'logo') {   
echo "<h1>Logo jobs</h1>"; 
echo "<table id='report'> 
    <tr> 
    <th></th> 
    <th>Status</th> 
    <th>Lead</th> 
    <th>Start</th> 
    <th colspan='2'>Codes</th> 
    <th>Client</th> 
    <th>Description</th> 
    <th>Fee</th> 
    <th>Contact</th> 
    <th colspan='2'>Invoice</th> 
    <th>Paid</th> 
    </tr>"; 
while ($logojob = mysql_fetch_array($logojobs)) { 
    echo "<tr> 
     <td class='id'>" . $logojob['id'] . "</td> 
     <td>" . $logojob['status_id'] . "</td> 
     <td>" . $logojob['lead_id'] . "</td> 
     <td>" . $logojob['date_start'] . "</td> 
     <td>" . $logojob['code_lead'] . "</td> 
     <td>" . $logojob['code_hlgd'] . "</td> 
     <td>" . $logojob['client'] . "</td> 
     <td>" . $logojob['description'] . "</td> 
     <td>&pound;" . $logojob['fee'] . "</td> 
     <td>" . $logojob['contact'] . "</td> 
     <td>" . $logojob['invoice'] . "</td> 
    <td>" . $logojob['date_inv'] . "</td> 
     <td>" . $logojob['date_paid'] . "</td>  
    </tr>";    
} 
echo "</table>";   
} 
?> 

Однако я хотел бы иметь возможность создавать отчеты для партий разные вещи и поэтому хотели бы создать функцию для генерации таблицы и передавать соответствующие аргументы каждый раз. Я сделал это следующим образом, но он генерирует только первую строку, поэтому я предполагаю, что она игнорирует это время? Может ли кто-нибудь сказать мне, где я ошибаюсь, или как лучше поставить код выше в функцию?

<?php 
function report_bytype($title,$job_set,$job_name) { 
    $reporthead = "<h1>$title</h1> 
    <table id='report'> 
    <tr> 
    <th></th> 
    <th>Status</th> 
    <th>Lead</th> 
    <th>Start</th> 
    <th colspan='2'>Codes</th> 
    <th>Client</th> 
    <th>Description</th> 
    <th>Fee</th> 
    <th>Contact</th> 
    <th colspan='2'>Invoice</th> 
    <th>Paid</th> 
    </tr>"; 
    while ($job_name = mysql_fetch_array($job_set)) { 
    $reportrows = " 
     <tr> 
     <td class='id'>" . $job_name['id'] . "</td> 
     <td>" . $job_name['status_id'] . "</td> 
     <td>" . $job_name['lead_id'] . "</td> 
     <td>" . $job_name['date_start'] . "</td> 
     <td>" . $job_name['code_lead'] . "</td> 
     <td>" . $job_name['code_hlgd'] . "</td> 
     <td>" . $job_name['client'] . "</td> 
     <td>" . $job_name['description'] . "</td> 
     <td>&pound;" . $job_name['fee'] . "</td> 
     <td>" . $job_name['contact'] . "</td> 
     <td>" . $job_name['invoice'] . "</td> 
     <td>" . $job_name['date_inv'] . "</td> 
     <td>" . $job_name['date_paid'] . "</td>  
    </tr>";    
    }        
    $reportfoot = "</table>"; 
    $reporttable = $reporthead . $reportrows . $reportfoot; 
    echo $reporttable; 
    return $reporttable; 
} 
?> 

<?php 
if($report == 'logo') { 
report_bytype("logo",$logojobs,$logojob); 
} 
if($report == 'stationery') { 
report_bytype("stationery",$stationeryjobs,$stationeryjob); 
} 
?> 

Большое спасибо заранее, Helen

+0

Как вы инициализации '$ logojobs' и' $ stationeryjobs'? – C2H5OH

+0

установить register_globals на «off» в вашем конфигурационном файле php.ini –

ответ

2

Проблема эта линия:

while ($job_name = mysql_fetch_array($job_set)) { 
    $reportrows = "lots of html" 
} 

Каждый раз, когда это петли $ reportrows устанавливается в HTML только для этой строки.

Вместо этого следует использовать $reportrows .= "some html";, который добавит каждую строку в $ reportrows, а не заменяет $ reportsrows этой строкой.

Редактировать: Замена += на .=.

+1

это не '+ =' в PHP для конкатенации строк, это '. =' –

+0

'+ =' для Java, Javascript ... только в при добавлении в 'PHP' – Baba

+0

Doh, слишком много java для меня. Закрепление. – Jim

2

Я могу понять, почему у вас есть ошибки, вы не concatenating ваш результат

Пожалуйста, см http://php.net/manual/en/language.operators.string.php более подробных объяснений

Заменить

$reportrows = " 

С

$reportrows .= " 

Полный сценарий

function report_bytype($title, $job_set, $job_name) { 
    $reporthead = "<h1>$title</h1> 
    <table id='report'> 
    <tr> 
    <th></th> 
    <th>Status</th> 
    <th>Lead</th> 
    <th>Start</th> 
    <th colspan='2'>Codes</th> 
    <th>Client</th> 
    <th>Description</th> 
    <th>Fee</th> 
    <th>Contact</th> 
    <th colspan='2'>Invoice</th> 
    <th>Paid</th> 
    </tr>"; 

    $reportrows = ""; 
    while ($job_name = mysql_fetch_array ($job_set)) { 
     $reportrows .= " 
    <tr> 
    <td class='id'>" . $job_name ['id'] . "</td> 
    <td>" . $job_name ['status_id'] . "</td> 
    <td>" . $job_name ['lead_id'] . "</td> 
    <td>" . $job_name ['date_start'] . "</td> 
    <td>" . $job_name ['code_lead'] . "</td> 
    <td>" . $job_name ['code_hlgd'] . "</td> 
    <td>" . $job_name ['client'] . "</td> 
    <td>" . $job_name ['description'] . "</td> 
    <td>&pound;" . $job_name ['fee'] . "</td> 
    <td>" . $job_name ['contact'] . "</td> 
    <td>" . $job_name ['invoice'] . "</td> 
    <td>" . $job_name ['date_inv'] . "</td> 
    <td>" . $job_name ['date_paid'] . "</td> 
    </tr>"; 
    } 
    $reportfoot = "</table>"; 
    $reporttable = $reporthead . $reportrows . $reportfoot; 
    echo $reporttable; 
    return $reporttable; 
} 

Благодаря

+0

Отлично, спасибо! –

+0

@Helen Lee приветствую вас ... дайте знать, есть ли у вас какие-либо проблемы – Baba

Смежные вопросы