Autor Zpráva
peter_r
Profil
Prosím o pomoc, mám funkciu, kde mi vytvorí tabuľku, uloží do pdf a odošle na email, toto funguje. Ale neviem si rady, potrebujem tam pridať ešte druhú tabuľku z druhého selectu SELECT * FROM tabulka2

Ďakujem.

<?php
 
//index.php
 
$message = '';
 
$connect = new PDO("mysql:host=;dbname=", "", "");
 
function fetch_customer_data($connect)
{
 $query = "SELECT * FROM tabulka1 WHERE prac_id=" .intval($_GET['prac_id']) ." LIMIT 1";
 $statement = $connect->prepare($query);
 $statement->execute();
 return $statement->fetch(PDO::FETCH_ASSOC);
}
 
function generate_table($row)
 {
return '
<table .....

</table>

 ';
}


 
$data = fetch_customer_data($connect);
 
if(isset($_POST["action"]))
{ include('pdf.php');
 $file_name = md5(rand()) . '.pdf';
 $html_code = '<meta charset="utf-8"><link rel="stylesheet" href="styl1.css"><style>* { font-family: DejaVu Sans !important; }</style>';
 $html_code .= generate_table($data);
 $pdf = new Pdf();
 $pdf->load_html($html_code);
 $pdf->render();
 $file = $pdf->output();
 file_put_contents($file_name, $file);
 
 require 'class/class.phpmailer.php';
 $mail = new PHPMailer;
 $mail->IsSMTP();        //Sets Mailer to send message using SMTP
 $mail->Host = 'mailsrv.sk';            //Sets the SMTP hosts of your Email hosting, this for Godaddy
 $mail->Port = '465';                                //Sets the default SMTP server port
 $mail->SMTPAuth = true;                            //Sets SMTP authentication. Utilizes the Username and Password variables
 $mail->Username = '';                    //Sets SMTP username
 $mail->Password = '';                    //Sets SMTP password
 $mail->SMTPSecure = 'ssl';                            //Sets connection prefix. Options are "", "ssl" or "tls"
 $mail->From = 'email@email.sk';            //Sets the From email address for the message
 $mail->FromName = 'faktúra';                    //Sets the From name of the message
 $mail->AddAddress($data['email']);        //Adds a "To" address
 $mail->AddCC('email@email.sk');        //Adds a "Cc" address
 $mail->WordWrap = 50;                            //Sets word wrapping on the body of the message to a given number of characters
 $mail->IsHTML(true);      //Sets message type to HTML    
 $mail->AddAttachment($file_name, $data['priezvisko'].'_' . $data['meno'] . '_' . $data['fa_id'] . '.pdf');         //Adds an attachment from a path on the filesystem
 $mail->Subject = 'Faktúra za mesiac '. $data["mesiac"];   //Sets the Subject of the message
 $mail->Body = 'Dobrý deň, v prílohe Vám posielam Vašu  faktúru.';    //An HTML or plain text message body
 if($mail->Send())        //Send an Email. Return true on success or false on error
 {
  $message = '<label class="text-success">Odoslanie úspešné ...</label>';
 }
 unlink($file_name);
}
 
?>
<!DOCTYPE html>
<html>
 <head>
  <title>Odoslanie fakúry emailom</title>
  <script src="jquery.min.js"></script>
  <link rel="stylesheet" href="styl1.css" />
  <script src="bootstrap.min.js"></script>
 </head>
 <body>
  <br />
  <div class="container">
   <form method="post"><?php echo $data['email']; ?>
    <input type="submit" name="action" class="btn btn-danger" value="PDF" /><?php echo $message; ?>
   </form>
   <br />
   <?php
   echo generate_table($data);
   ?>   
  </div>
  <br />
  <br />
 </body>
</html>
Keeehi
Profil
A s čím konkrétně si nevíš rady? Obecně se dá říct, že je potřeba do kódu přidat další dotaz do databáze a za řádek 35 přidat další pro jeho převedení na tabulku
$html_code .= generate_table($data_z_druheho_dotazu);
peter_r
Profil
čiže za riadok 29 dám nový $connect2 so SELECT na tabuľku 2 a za to

$data_z_druheho_dotazu = fetch_customer_data($connect2)
Keeehi
Profil
Tak nějak, ale je to trochu špatně.
Ta tabulka je ve stejné databázi, ne? Tudíž připojení můžete zrecyklovat (pouzijete stále $connect)

Dále
Možnost 1: Musíte vytvořit novou funkci fetch_customer_data_něco (samozřejmě se může jmenovat úplně jinak) protože v ní máte určený dotaz který se do databáze posílá a v ní si dotaz upravíte. Budete pak volat tuto novou funkci.

Možnost 2: pokud je dotaz stejný a liší se jen tabulkou, můžete upravit funkci fetch_customer_data tak, že bude mít druhý parametr, kterým se určí, jaké tabulky se má ptát.
function fetch_customer_data($connect, $table)
{
 $query = "SELECT * FROM $table WHERE prac_id=" .intval($_GET['prac_id']) ." LIMIT 1";
 $statement = $connect->prepare($query);
 $statement->execute();
 return $statement->fetch(PDO::FETCH_ASSOC);
}
Volání je pak
$data = fetch_customer_data($connect, "tabulka1");
$data_z_druheho_dotazu = fetch_customer_data($connect, "tabulka2");

Možnost 3: upravíte funkci na posílání dotazů tak, že bude obecná.
function fetch_data($connect, $query)
{
 $statement = $connect->prepare($query);
 $statement->execute();
 return $statement->fetch(PDO::FETCH_ASSOC);
}
Volání pak bude
$data = fetch_data($connect, "SELECT * FROM tabulka1 WHERE prac_id=" .intval($_GET['prac_id']) ." LIMIT 1");
$data_z_druheho_dotazu = fetch_data($connect, "SELECT * FROM tabulka2 WHERE prac_id=" .intval($_GET['prac_id']) ." LIMIT 1");
peter_r
Profil
tá druhá možnosť sa mi zdá najlepšia, lebo budem používať viac tabuliek a v podstate som to aj pochopil

ďakujem pekne za váš čas, dúfam že to nejak rozbehnem a potom už len napíšem, že to funguje :-)


tak, emailom odošle obidve tabuľky čo je super ale najskôr ich má zobraziť a zobrazuje stále len tú prvú

čo mi až tak nevadí

skôr si lámem hlavu, že ak niektorá tabuľka je prázdna tak aby ju celú preskočilo

v každej tabuľke je položka fa_id, ak je prázdna tak preskočiť na ďalšiu

podmienku if (!empty($row["fa_id"])) by som asi vypotil ale neviem kde to dať
peter_r
Profil
tak tú prvú vec som už našiel (také jednoduché) že prečo mi zobrazovalo len jednu tabuľku

ale stále dumem kde dať podmienku, že ak je položka fa_id z tej ktorej tabuľky prázdna, tak aby aby z nej $data... nevytváral pdf

to by malo byť niekde sem si myslím

$html_code .= generate_table($data);
$html_code .= generate_table($data1);
anonym_
Profil *
peter_r:
Do funkce generate_table.
peter_r
Profil
tak už som to vyriešil
peter_r
Profil
a ešte prosím o radu, všetky tabuľky sú z jednej databázy

$connect = new PDO("mysql:host=;dbname=databaza1", "", "");

poradíte prosím ako urobiť, ak potrebujem ešte aby tam doplnilo tabuľku z inej databazy?
Keeehi
Profil
Uděláš si $connect2 a tam kde se bude používat ta další tabulka tam použiješ nový identifikátor spojení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0