2012-02-23 4 views
1

Это то, чего я пытаюсь достичь. Если All выбрано в раскрывающемся меню, я выбираю всех клиентов из своей базы данных. Для каждого клиента он запускает скрипт, создающий html-страницу, а затем pdf. Это то, к чему я пришел, но я не могу заставить его генерировать html-страницу и pdf для каждого клиента.PHP для каждого цикла

<?php 
$client_id=$_POST["client_id"]; 
$date_start=$_POST["date_start"]; 
$date_end=$_POST["date_end"]; 

if ($client_id == 'ALL') 
{ 
    $con = mysql_connect("localhost","user","password"); 
    if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("mydatabase", $con); 

    $query = "select client_id from ca_client_account"; 

    $result = mysql_query($query) or die(mysql_error()); 

    while($row = mysql_fetch_array($result)) 
    { 
    $command="php $result.php $result $date_start $date_end > $result.html"; 
    exec($command, $output, $status); 
    echo $command; 
    if ($status!=0) {print_r($output); die("wget failed with status $status"); } 

    $command="wkhtmltopdf-i386 --margin-left 5mm --margin-right 5mm $result.html $result.pdf"; 
    exec($command, $output, $status); 
    if ($status!=0) die("htmltopdf failed"); 
    } 

} 
else 
{ 
    $command="php $client.php $client_id $date_start $date_end > $client.html"; 
    exec($command, $output, $status); 
    if ($status!=0) {print_r($output); die("wget failed with status $status"); } 

    $command="wkhtmltopdf-i386 --margin-left 5mm --margin-right 5mm $client.html $client.pdf"; 
    exec($command, $output, $status); 
    if ($status!=0) die("htmltopdf failed"); 
} 
?> 

Для одного клиента все идеально. Когда я пытаюсь сгенерировать все клиентские заявления, я не могу заставить его работать.

Что я делаю неправильно?

Большое спасибо

+0

Какой выход вы получаете. Любые ошибки? –

+0

переменная $ result не выводит каждый client_id, как предполагалось. Он выводит идентификатор ресурса 3. –

+0

Любопытно, почему вы 'exec' файл php вместо того, чтобы просто« включать »в файл и запускать такие функции, как и любой другой? Кажется, мне меньше хлопот. –

ответ

2

$result не будет поставлять то, что вы ожидаете отсюда. Вам нужно указать точное поле, которое вы собираетесь эхо. В этом случае $row['client_id'] будет работать.

+0

Спасибо, его почти там, но я получаю Undefined offset: 1 сейчас. Я использовал $ row [1] вместо $ row ['client_id'] - уверен, что это не причина tho –

+0

@ TheManiac вы правы. Я не хотел их менять, это статический файл myfile.php. Я изменил их, не задумываясь при копировании здесь, чтобы сделать сообщение общим. –

+0

Отлично. Еще одна вещь: если вы хотите использовать '$ row ['client_id' ] 'вместо' $ row [1] '(первый из них более описательный и более эффективный в целом) заменит ваш вызов' mysql_fetch_array' на ['mysql_fetch_assoc'] (http://php.net/manual/en /function.mysql-fetch-assoc.php) –

2

У вас есть фундаментальное непонимание того, как база данных требует работы. В вашем $command вы используете $result, который является запросом базы данных РЕЗУЛЬТАТЫ РЕЗУЛЬТАТОВ. Это не значение из запроса, оно не может использоваться ничем иным, кроме функций mysql _ *(). Стандартная последовательность запросов выглядит примерно так:

$sql = "SELECT ..."; 
$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_array($result); 

echo $row['some_field']; 

$ result содержит дескриптор инструкции, представляющий результаты вашего запроса. Вы используете этот дескриптор инструкции для FETCH строки данных. В пределах этого $row данных, которые вы выбрали, будут отдельные поля данных, которые вы указали в своем запросе. Это THESE бит данных, который вы передадите своему внешнему скрипту.

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