Cyklus v cyklu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Cyklus v cyklu – PHP – Fórum – Programujte.comCyklus v cyklu – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Fraggo0
Duch
1. 11. 2015   #1
-
0
-

Ahoj nejsem programátor, ale nějak jsem si řekl, že to dokážu ... nakonec se obracím na vás :)

Mám cyklus do kterého potřebuji udělat další, který mi vylistuje všechny položky dané objednávky. Teď to vypíše jen tu první.

$query = "SELECT * FROM  `orders__order`, `orders__items` WHERE  `orders_flag` =3 LIMIT 0 , 10";
        
      $database->query = $query;
      $database->set_query();
//      ob_start();
      if ($database->result) {

$i = 1;
		 
         while ($row = mysql_fetch_object($database->result)) {
		  
echo '<div class="container">
<h2>Invoice for purchase #';echo $row->number; echo '</h2>
<hr>
<table class="table table-condensed">

// ZAČÁTEK tohle potřebuji vylistovat tak ať tam jsou všechny položky

	<tr>
		<td>';echo $row->name;echo '</td>
		<td class="text-center">';echo $row->moc;echo ' Kč</td>
                <td class="text-center">';echo $row->amount;echo '</td>
                <td class="text-right">';echo $sub = round($row->moc * ($row->amount));echo ' Kč</td>
	</tr>

// KONEC listu

</table>

</div>

            $i++;
         }
      }
;

Díky moc za radu, už na tom trávím celej víkend a pořád nějaká chyba nebo tam těch položek mám nějak moc :)

Nahlásit jako SPAM
IP: 109.81.211.–
Fraggo0
Duch
1. 11. 2015   #2
-
0
-

Stejně v tom selektu mám něco špatně. Jak na to koukám, že sice to vypíše první položku, ale na všech objednávkách je stejná. :(

Nahlásit jako SPAM
IP: 109.81.211.–
Fraggo0
Duch
2. 11. 2015   #3
-
0
-

Ahoj tak mám ještě jeden snad poslední problém.

Objednávky se generují do PDF ... vygeneruje to 10 objednávek vč. čísla v názvu PDF jen obsah všech 10ti  objednávek je naplněn obsahem 1 objednávky.

$query = "SELECT * FROM  `orders__order` WHERE  `orders_flag` =3 LIMIT 0, 10";
  $database->query = $query;
  $database->set_query();

	  if ($database->result) {
		 
		 ob_start();
		 $i = 1;
         while ($row = mysql_fetch_object($database->result)) {

		OBJEDNÁVKY
		';
        
        $html=ob_get_contents();
                
        $mpdf->WriteHTML($stylesheet,1);
        $mpdf->WriteHTML($html,2);
        
        $name = _ABS_PATH."temp/order_".$row->number.'.pdf';
        $mpdf->Output($name,"F"); 
        ob_end_clean();
        ob_end_flush();
       $i++;
         }
      }
;

Nevidíte kde by mohla být chyba? Díky moc za tip.

Nahlásit jako SPAM
IP: 90.176.169.–
peter
~ Anonymní uživatel
4014 příspěvků
2. 11. 2015   #4
-
0
-

Pulka kodu tam asi chybi, zkus neco jako jsfiddle, pokud se neprobouras s tim pres zdejsi filtry.
Z toho, co tam je, bys soudil, ze to je nedodelane, ze to vubec nejede. Kdo vi, zda jsou spravne zavorky pro while cyklus a kdo vi, co jde do promenne $html.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:94f2:37...–
Fraggo0
Duch
2. 11. 2015   #5
-
0
-

Celé to vypadá takhle ...

Vypíše to co má

Vygeneruje to 10 PDF

Jen v každém PDF je obsah první objednávky...

   <div class="container">


      <?php
      define('_INDEX_CALL', true);
      require("config.php");
	  
		require_once(_ABS_PATH."mpdf60/mpdf.php");
		$mpdf = new mPDF('utf-8','A4'); 
		$mpdf->useOnlyCoreFonts = true;
		$mpdf->SetDisplayMode('fullpage');
		//$mpdf->SetAutoFont(0);
		
		// CSS soubor
		$stylesheet = file_get_contents(_ABS_PATH.'css/bootstrap.min.css');
		
      require_once(_ABS_PATH . "system/lib/database.class.php");
      $database = new database($host, $user, $db_name, $password);
	  $database_obj = new database($host, $user, $db_name, $password);
		
		

      $query = "SELECT * FROM  `orders__order` WHERE  `orders_flag` =3 LIMIT 0, 10";
	  $database->query = $query;
      $database->set_query();
	  
	  if ($database->result) {
		ob_start(); 
		 
		 $i = 1;
		 
         while ($row = mysql_fetch_object($database->result)) 	{
		 
	  
echo '<div class="container">
    <div class="row">
        <div class="col-xs-12">
            <div class="text-center">
                <h2>Invoice for purchase #';echo $row->number; echo ' / date ';echo $row->updated; echo '</h2>
            </div>
            <hr>
            <div class="row">
                <div class="col-md-12 col-xs-3 col-lg-4 pull-left">
                    <div class="panel panel-default height">
                        <div class="panel-heading">Billing Details</div>
                        <div class="panel-body">
                            <strong>xxx</strong><br>
                            xxx<br>
                            xxx<br>
                            Czech republic<br>
                            <strong>IC: xxx<br>DIC: xxx</strong><br>
                        </div>
                    </div>
                </div>
		
				                
                <div class="col-xs-12 col-xs-4 col-lg-4 print-container">
                    <div class="panel panel-default height">
                        <div class="panel-heading">Payment Information</div>
                        <div class="panel-body">
                            <strong>Payment method:</strong> ';echo $row->payment_name; echo '<br>
                            <strong>Bank:</strong> UniCredit Bank, a. s.<br>
                            <strong>Address of bank:</strong> xxx<br><br>
                            <strong>IBAN:</strong> xxx<br>
                            <strong>SWIFT:</strong> xxx<br>
                        </div>
                    </div>
                </div>

                <div class="col-xs-12 col-xs-3 col-lg-4 pull-right">
                    <div class="panel panel-default height">
                        <div class="panel-heading">Shipping Address</div>
                        <div class="panel-body">
                            <strong>';echo $row->fak_name_surname; echo '</strong><br>
                            ';echo $row->fak_street_cp; echo '<br>
                            ';echo $row->fak_town; echo '<br>
                            ';echo $row->fak_psc; echo '<br>
                            ';echo $row->fak_country; echo '<br>
							<strong>Phone:</strong> ';echo $row->fak_telephone; echo '
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="text-center"><strong>Order summary</strong></h3>
                </div>
                <div class="panel-body">
                    <div class="table-responsive">
                        <table class="table table-condensed">
                            <thead>
                                <tr>
                                    <td><strong>Item Name</strong></td>
                                    <td class="text-center"><strong>Item Price</strong></td>
                                    <td class="text-center"><strong>Item Quantity</strong></td>
                                    <td class="text-right"><strong>Total</strong></td>
                                </tr>
                            </thead>
                            <tbody>';
							
							$i = 1;
							 $query_obj = "SELECT * FROM  `orders__items` WHERE  `order_id` =" . $row->id;
								$database_obj->query = $query_obj;
								$database_obj->set_query();
		 
         	  while ($obj = mysql_fetch_object($database_obj->result)) {
			  $price_dph = $obj->price * (1 + $obj->shop_vat / 100);
			 
			 echo '
                                <tr>
                                    <td class="line">';echo $obj->name;echo '</td>
                                    <td class="text-center line">';echo round($price_dph);echo ' Eur</td>
                                    <td class="text-center line">';echo $obj->amount;echo '</td>
                                    <td class="text-right line">';echo $sub = round($price_dph * ($obj->amount));echo ' Eur</td>
                                </tr>';
			$i++;
     }
;
                                
								echo '<tr>
                                    <td class="highrow bline"></td>
                                    <td class="highrow bline"></td>
                                    <td class="highrow bline text-center"><strong>Subtotal</strong></td>
                                    <td class="highrow bline text-right">';echo $subtotal = $row->price - ($row->payment_price + $row->delivery_price); echo ' Eur</td>
                                </tr>
                                <tr>
                                    <td class="highrow"></td>
                                    <td class="highrow"></td>
                                    <td class="highrow text-center"><strong>Fees for payment</strong></td>
                                    <td class="highrow text-right">';echo $row->payment_price; echo ' Eur</td>
                                </tr>
                                <tr>
                                    <td class="emptyrow"></td>
                                    <td class="emptyrow"></td>
                                    <td class="emptyrow text-center"><strong>Shipping</strong></td>
                                    <td class="emptyrow text-right">';echo $row->delivery_price; echo ' Eur</td>
                                </tr>
                                <tr>
                                    <td class="emptyrow"><i class="fa fa-barcode iconbig"></i></td>
                                    <td class="emptyrow"></td>
                                    <td class="emptyrow text-center"><strong>Total</strong></td>
                                    <td class="emptyrow text-right">';echo $row->price; echo ' Eur</td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
';

$html=ob_get_contents();
ob_end_clean(); 

$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html,2);

$name = _ABS_PATH."temp/order_".$row->number.'.pdf';
$mpdf->Output($name,"F"); 
       $i++;
         }
      }
;
ob_end_flush();



      ?>
    
      </div>
Nahlásit jako SPAM
IP: 90.176.169.–
peter
~ Anonymní uživatel
4014 příspěvků
3. 11. 2015   #6
-
0
-

 Zjednodusil jsem to. Sis na sablony mel udelat funkci, te predat $row, abys to mel prehlednejsi. Tak schvalne, jestli tam ted vidis to, co vidim ja?

<?php
define('_INDEX_CALL', true);
require("config.php");

require_once(_ABS_PATH . "mpdf60/mpdf.php");
$mpdf                   = new mPDF('utf-8', 'A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
//$mpdf->SetAutoFont(0);

// CSS soubor
$stylesheet = file_get_contents(_ABS_PATH . 'css/bootstrap.min.css');

require_once(_ABS_PATH . "system/lib/database.class.php");
$database     = new database($host, $user, $db_name, $password);
$database_obj = new database($host, $user, $db_name, $password);

$query           = "SELECT * FROM  `orders__order` WHERE  `orders_flag` =3 LIMIT 0, 10";
$database->query = $query;
$database->set_query();

if ($database->result) {
    ob_start();
    
    $i = 1;
    
    while ($row = mysql_fetch_object($database->result)) {
        echo 'x';
        echo $row->number;
        echo 'x';
        echo $row->updated;
        echo 'x';
        echo $row->payment_name;
        echo 'x';
        echo $row->fak_name_surname;
        echo 'x';
        echo $row->fak_street_cp;
        echo 'x';
        echo $row->fak_town;
        echo 'x';
        echo $row->fak_psc;
        echo 'x';
        echo $row->fak_country;
        echo 'x';
        echo $row->fak_telephone;
        echo 'x';
        
        $i = 1;

        $query_obj = "SELECT * FROM  `orders__items` WHERE  `order_id` =" . $row->id;
        $database_obj->query = $query_obj;
        $database_obj->set_query();
        
        while ($obj = mysql_fetch_object($database_obj->result)) {
            $price_dph = $obj->price * (1 + $obj->shop_vat / 100);
            echo 'y';
            echo $obj->name;
            echo 'y';
            echo round($price_dph);
            echo 'y';
            echo $obj->amount;
            echo 'y';
            echo $sub = round($price_dph * ($obj->amount)); // kdo vi, co to vypise...
            echo 'y';
            $i++;
        }
        
        echo 'z';
        echo $subtotal = $row->price - ($row->payment_price + $row->delivery_price);
        echo 'z';
        echo $row->payment_price;
        echo 'z';
        echo $row->delivery_price;
        echo 'z';
        echo $row->price;
        echo 'z';
        
        $html = ob_get_contents();
        ob_end_clean();
        
        $mpdf->WriteHTML($stylesheet, 1);
        $mpdf->WriteHTML($html, 2);
        
        $name = _ABS_PATH . "temp/order_" . $row->number . '.pdf';
        $mpdf->Output($name, "F");

        $i++;
    }
}

ob_end_flush();
?>
Nahlásit jako SPAM
IP: 2001:718:2601:26c:508e:71...–
Fraggo0
Duch
3. 11. 2015   #7
-
0
-

Vypíše to to stejné co mě vč. těch PDFek kde je v každném to stejné, ale už jsem to vyřešil.

Jedna změna je tady 

            if ($database->result) {

                $i = 1;

                while ($row = mysql_fetch_object($database->result)) {

                    ob_start();
                    echo '<div class="container">

A druhá ta nejpodstatnější je u výpisu položek 

$a = 1;
                    $query_obj = "SELECT * FROM  `orders__items` WHERE  `order_id` =" . $row->id;

...

 $a++;
}

Změnil jsem to z $i na $a protože $i používám nahoře.

Vše ostatní zůstalo a chodí to jak hodinky.

Ale jinak díky za tip určitě to jde ještě zoptimalizovat.

Nahlásit jako SPAM
IP: 109.81.211.–
peter
~ Anonymní uživatel
4014 příspěvků
3. 11. 2015   #8
-
0
-

Jo, presne to jsi mel videt :) Ja teda pouzivam i,j,k,... male L spis ne, protoze vypada jako i a 1. "i" jako index nebo osovy kriz x,y,z, i,j,k.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:508e:71...–
Kit+15
Guru
3. 11. 2015   #9
-
0
-

#8 peter
Čtvrtý level zanoření cyklu by se v programu stejně neměl vyskytovat (už třetí je obvykle na pováženou), takže v mých programech na "l" či "L" řada nikdy nepřijde.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 53 hostů

Podobná vlákna

Vysvětlení cyklu for — založil Thalorn

FOR - proměnné v cyklu — založil Michael

Prerusenie cyklu — založil Anonymní uživatel

Vysvětlení cyklu — založil Jarda

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý