2016-04-28 4 views
-1

Ich versuche, eine MySQL-Abfrage durchzuführen, in der es Daten nur von auswählt, was der Benutzer während dieser Sitzung hergestellt hat. Der Benutzer zeichnet beispielsweise eine Reihe von Aktivitätssitzungen auf, und wenn die Datei coast.php ausgeführt wird, werden nur die Sitzungen angezeigt, die der angemeldete Benutzer für diese Sitzung in der PDF-Ausgabe aufgezeichnet hat.Problem, das nur Sitzungsdaten von der MySQL-Abfrage erhält

Ich habe es bisher geschafft, die Abfrage zu einem gewissen Grad zu arbeiten, aber es ist immer noch alles aus der Datenbank auswählen und ich kann nicht herausfinden, wie man das richtig macht. Jede Hilfe würde sehr geschätzt werden.

Hier ist mein Code so weit ...

coast.php

<?php 
session_start(); 
require_once('../tcpdf/examples/lang/eng.php'); 
require_once('../tcpdf/tcpdf.php'); 
// create new PDF document 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
// set document information 
$pdf->SetCreator(PDF_CREATOR); 
$pdf->SetAuthor('Ash Williams'); 
$pdf->SetTitle('Coastline Coasteer Invoice'); 
$pdf->SetSubject('ASHLEY'); 
$pdf->SetKeywords('wILLIAMS'); 
// set default monospaced font 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 
// set default header data 
$pdf->SetHeaderData("ibill logo.png", PDF_HEADER_LOGO_WIDTH, '', 
''); 
//Set header margin 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
// set header and footer fonts 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 
//set margins 
$pdf->SetMargins(12, 35, 12, true); 
//set auto page breaks 
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 
//set image scale factor 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 
//set some language-dependent strings 
$pdf->setLanguageArray($l); 
// --------------------------------------------------------- 
// set default font subsetting mode 
$pdf->setFontSubsetting(true); 
// Set font 
// dejavusans is a UTF-8 Unicode font, if you only need to 
// print standard ASCII chars, you can use core fonts like 
// helvetica or times to reduce file size. 
$pdf->SetFont('helvetica', '', 12, '', true); 
// Add a page 
// This method has several options, check the source code documentation for more information. 
$pdf->AddPage(); 
// Set some content to print 
$html = '<style> 
      h1 { 
       letter-spacing: 1px; 
       font-family: times; 
       font-size: 30px; 
       text-align: center; 
       text-transform: uppercase; 
       text-decoration:underline; 
      } 
      h2 { 
       font-weight: normal; 
       text-align: left; 
      } 
     </style> 
       <h1>Invoice</h1> 
       <h2>Coastline Coasteer</h2> 

       <h3>22 Headland Road,</h3> 

       <h3>Newquay, Cornwall</h3> 
       <h3>TR7 1HN</h3> 
       <h3>Tel: 01637 879571</h3>'; 

$tbl_header = '<table border="1" cellpadding="6" cellspacing="4" nobr="true">'; 
$tbl_footer = '</table>'; 
$tbl =''; 
$tbl .= ' 
      <tr> 
      <th style="border: 3px solid black";>Type of Activity</th> 
      <th style="border: 3px solid black";>Employer</th> 
      <th style="border: 3px solid black";>Date</th> 
      <th style="border: 3px solid black";>Time</th> 
      <th style="border: 3px solid black";>Amount (GBP)</th> 
      </tr> 
     '; 
$con=mysqli_connect("localhost","root","****","****"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
$tusername=$_SESSION["user_session"]; 
$queryString = "SELECT * FROM session_details, users WHERE employer = 'Coastline Coasteer' AND username = '" .$tusername. "';"; 
//print $queryString; 
$result = mysqli_query($con,$queryString); 
//if (!$result) { 
// print 'failed'; 
//} 

while($row = mysqli_fetch_array($result)) 
    { 
    $typeofactivity = $row['typeofactivity']; 
    $employer = $row['employer']; 
    $date = $row['date']; 
    $time = $row['amount']; 
    $tbl .= '<tr> 
      <td>'.$row["typeofactivity"].'</td> 
      <td>'.$row["employer"].'</td> 
      <td>'.$row["date"].'</td> 
      <td>'.$row["time"].'</td> 
      <td>'.$row["amount"].'</td> 
      </tr>'; 
} 
// Print text using writeHTMLCell() 
$pdf->writeHTML($html . $tbl_header . $tbl . $tbl_footer, true, false, false, false, ''); 
// --------------------------------------------------------- 
// Close and output PDF document 
// This method has several options, check the source code documentation for more information. 
$pdf->Output('coastline_invoice.pdf', 'D'); 
//============================================================+ 
// END OF FILE 
//============================================================+ 
?> 
+0

Sie haben // print $ querystring; Auskommentiert in deinem Code. Führen Sie das aus und führen Sie das SQL in Ihrer Datenbank aus, und versuchen Sie, es dort zu arbeiten. Das meiste, was Sie hier aufgelistet haben, ist nicht sinnvoll, um das Problem zu lösen. Wir müssten sehen, wie Datensätze in Ihre DB oder die DB-Tabellen selbst eingefügt werden. Viel Glück! – DaOgre

+0

Hi @DaOgre, ich habe den Ausdruck auskommentiert, da meine TCPDF-Klasse nicht damit läuft. Ich habe die Abfrage in meine DB eingefügt und zeigt alle Werte in der DB mit 'Coastline Coasteer' an. Danke für den Zeiger – asharoo85

+0

Sie könnten es zu $ ​​pdf-> writeHTML hinzufügen ($ html. $ Tbl_header. $ Tbl. $ Tbl_footer. $ QueryString); wenn Sie es sehen wollen. Ich würde mir vorstellen, dass Informationen nicht ordnungsgemäß in user_session gespeichert werden, so dass Sie dort nur einen leeren Wert haben, aber Sie müssen sich die Werte in der DB ansehen, um dies zu bestätigen. – DaOgre

Antwort

0

Das Problem ist, dass Sie weder implizit noch haben, noch expliziter Zustand zwischen session_details und Benutzer Tabellen verbinden. Die Syntax session_details, users ohne Join-Bedingung erstellt eine kartesische Verknüpfung zwischen den beiden Tabellen, dh jeder Datensatz aus der Tabelle session_details wird mit jedem einzelnen Datensatz in der Tabelle users abgeglichen.

Sie müssen eine Bedingung zwischen den zwei Tabellen verbinden definieren, etwas in diese Richtung:

SELECT * 
FROM session_details sd 
INNER JOIN users u ON sd.user_id=u.user_id 
WHERE employer = 'Coastline Coasteer' AND username = '...' 

Ich nehme nur die Feldnamen im Ausdruck kommen, aber der Punkt ist, in der session_details Tabelle sollte in irgendeiner Weise durch ein gemeinsames Feld mit der Benutzertabelle verknüpft sein. Sie müssen bestimmen, was dieses Feld (oder diese Felder) ist, um die entsprechenden Datensätze aus den beiden Tabellen miteinander zu vergleichen.

+0

Danke @Shadow, ich habe eine ID-Spalte in beiden Tabellen. Ich habe gerade versucht, sie nach Ihrer Abfrage in MySQL zu verknüpfen, aber es gibt immer noch leere Werte zurück. – asharoo85

+0

Es tut mir leid, aber ich kann nicht sagen, warum Ihre Abfrage leere Daten anzeigt, wenn ich Ihre Daten nicht sehen kann. Stellen Sie Beispieldaten für beide Tabellen, die genaue Abfrage, die Sie versuchten, die Ergebnisse, die von Ihrer Abfrage neu festgelegt werden, und die erwarteten Ergebnisse bereit. Sie sollten jedoch nicht erwarten, dass wir herausfinden, auf welchen Feldern Ihre Tabellen verknüpft werden können. Das liegt an dir zu bestimmen! – Shadow

+0

Ich verstehe das und schätze Ihre Hilfe! Beispieldaten für session_details: id = 1, typeofactivity = coasteer, Arbeitgeber = Küsten-Coasteer, Datum = 2016-04-11, Zeit = 12: 00: 00 Beispieldaten für Benutzer: ID = 1, Benutzername = Nametest-Passwort = Passwort, Vorname = Name, Nachname = Test [email protected] – asharoo85

0

Das Problem, das Sie hier haben, ist, dass Ihre Sitzung keine Informationen speichert. In der Zeile:

$tusername=$_SESSION["user_session"]; 

Sie beziehen sich auf den Wert user_session, der auf dieser Seite nicht zu sehen ist. Sie können versuchen, die Variable $ _SESSION mit print_r($_SESSION) auszudrucken. $ _SESSION ist jedoch nur ein Array. Wenn Sie also hier keinen Wert speichern, beziehen Sie sich auf einen leeren Wert. Wenn Sie Ihre eigentliche Abfrage ausführen, werden Sie nach einem leeren Wert gefragt.

Sie können dies demonstrieren mit einem neuen Test PHP-Seite, die die folgende gerade hat:

<?php 
session_start(); 
print_r($_SESSION); 

Ihr Ausgang wird: Array()

+0

Ich habe dies in meiner loginform.php gespeichert, die die Anmeldesitzung startet: $ _SESSION ["user_session"] = $ username; Brauche ich es auch auf dieser Seite? – asharoo85

+0

dies erhält den Benutzernamen auf Eingabe aus dem Login-Formular – asharoo85

+0

Session-Daten können in anderen PHP-Seiten gesetzt werden, das ist der Zweck der Sitzung: Daten zwischen Anrufen persistent zu halten. – Shadow

Verwandte Themen