2016-04-28 2 views
-1

Я пытаюсь выполнить запрос MySQL, в котором он выбирает данные только из того, что пользователь создал во время этого сеанса. Например, пользователь записывает несколько сеансов активности и когда выполняется файл coast.php, он отображает только сеансы, которые зарегистрированный пользователь записал для этого сеанса в выходном файле PDF.Проблема с получением только данных сеанса из запроса MySQL

Мне до сих пор удалось получить запрос в некоторой степени, но он все еще выбирает все из базы данных, и я не могу понять, как это сделать правильно. Любая помощь будет принята с благодарностью.

Вот мой код до сих пор ...

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

У вас есть // печать $ QueryString; прокомментировал ваш код. Запустите это и выполните SQL в своей базе данных и попробуйте заставить его работать там, большая часть того, что вы указали здесь, не имеет смысла для решения проблемы. Нам нужно будет увидеть, как записи вставляются в вашу базу данных или сами таблицы DB. Удачи! – DaOgre

+0

Привет @DaOgre, я прокомментировал печать, так как мой класс TCPDF не работает с ним. Я вставил запрос в свою БД и отобразил все значения в БД с помощью «Coastline Coasteer». Спасибо за указатель – asharoo85

+0

Вы можете добавить его в $ pdf-> writeHTML ($ html. $ Tbl_header. $ Tbl. $ Tbl_footer. $ QueryString); если вы хотите его просмотреть. Я бы предположил, что информация не сохраняется должным образом в user_session, так что вы просто получили пустое значение там, но вам нужно действительно посмотреть на значения в БД, чтобы подтвердить это. – DaOgre

ответ

0

Вопрос заключается в том, что у вас есть, ни неявно, ни явное условие соединения между session_details и пользователей таблиц. Синтаксис session_details, users без каких-либо условий соединения создаст кардианное соединение между двумя таблицами, что означает, что каждая запись из таблицы session_details сопоставляется с каждой отдельной записью в таблице users.

Вы должны определить условие соединения между 2 таблицами, то вдоль этих линий:

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

Я придумал имена полей в выражении присоединиться, но дело в том, в таблице session_details должны быть связанным с пользовательской таблицей каким-либо образом через общее поле. Вам нужно определить, что это поле (или эти поля), чтобы соответствовать соответствующим записям из двух таблиц друг с другом.

+0

Спасибо @Shadow, у меня есть столбец идентификатора в обеих таблицах. Я просто попытался связать их в соответствии с вашим запросом в mysql, но он все еще возвращает пустые значения. – asharoo85

+0

Прошу прощения, но я не могу прокомментировать, почему ваш запрос отображает пустые данные, если я не вижу ваших данных. Pls предоставляет образцы данных для обеих таблиц, точный запрос, который вы пытались, результаты, восстановленные вашим запросом, и ожидаемые результаты. Однако вы не должны ожидать, что мы выясним, в каком поле (и) ваши таблицы могут быть связаны. Это зависит от вас, чтобы определить! – Shadow

+0

Я понимаю это и ценю вашу помощь! пример данных для session_details: id = 1, typeofactivity = coasteer, работодатель = coборщик береговой линии, дата = 2016-04-11, время = 12: 00: 00 Пример данных для пользователей: id = 1, username = nametest password = password, firstname = name, surname = test [email protected] – asharoo85

0

Проблема, которую вы имеете здесь, заключается в том, что ваша сессия не сохраняет информацию. В строке:

$tusername=$_SESSION["user_session"]; 

Вы имеете в виду значение user_session, которое не появляется быть установлен в любом месте на этой странице. Вы можете попробовать распечатать переменную $ _SESSION с помощью print_r($_SESSION). $ _SESSION - это всего лишь массив, и поэтому, если вы не сохраните какое-то значение здесь, вы просто ссылаетесь на пустое значение и, как таковое, когда вы выполняете фактический запрос, вы запрашиваете пустое значение.

Вы можете продемонстрировать это страница PHP нового теста, который только имеет следующее:

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

Ваш выход будет: Array()

+0

У меня это хранится в моем loginform.php, который запускает сеанс регистрации: $ _SESSION ["user_session"] = $ username; Нужно ли мне это на этой странице? – asharoo85

+0

это получает имя пользователя на входе от формы входа – asharoo85

+0

Данные сеанса могут быть установлены на других страницах php, это целая цель сеанса: сохранить данные между вызовами. – Shadow

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