无法从mysql数据库中获取特定行

无法从mysql数据库中获取特定行

问题描述:

this is my first question here. I am trying to generate pdf from a particular row of my database using mpdf. I want the code to download a particular row's data when needed. A download link is beside every row. When the download button is pressed it will download that row's data. The code is working but it is fetching all the values from the db and assigning the values side by side. Here is my generate pdf php

<?php

//==============================================================
//==============================================================
//==============================================================
include("mpdf/mpdf.php");
include "config.php";

$res = mysql_query("select date1, date2 from test");
if (!$res)
    die("query error : ".mysql_error());
$mpdf=new mPDF('c','A4','','',32,25,27,25,16,13);
$mpdf->SetDisplayMode('fullpage');
$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first 
level of a list
// LOAD a stylesheet
$stylesheet = file_get_contents('mpdfstyletables.css');
$mpdf->WriteHTML($stylesheet,1); // The parameter 1 tells that this is     
css/style only and no body/html/text
$html = '

<center><h3>Test</h3></center>
<center>
<table border="1">
<tr>
<th>Date 1</th><th>Date 2</th>
</tr>
<tr>';

while($row = mysql_fetch_array($res)){
$html .= 
    '<td>'.$row['date1'].'</td>
    <td>' . $row['date2']. '</td>';
}
$html .= '
</tr>
</table></center>
';
$mpdf->WriteHTML($html,2); 
$mpdf->Output('mpdf.pdf','I');
exit;
//==============================================================
//==============================================================
//==============================================================
?>

And Here is the view.php part for viewing the database

<html>
<body>
<style>
   table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}

td, th {

text-align: center;
padding: 8px;
}

tr:nth-child(even) {
background-color: #dddddd;
}

  textarea
{
  width:100%;
}
.textwrapper
{
  border:1px solid #dddddd;
  margin:5px 0;
  padding:1px;
}
    </style>
<?php
mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('test')  or die(mysql_error());
$query=mysql_query("select * from test limit 0,10")  or die(mysql_error());
echo'<table border="1" ><th >Id</th><th>Date 1</th><th>Date 2</th>';
while($res=mysql_fetch_array($query))
{
  echo'<tr><td>'.$res['id'].'</td><td>'.$res['date1'].'</td>   
     <td>'.$res['date2'].'</td>
  <td><a href="gen.php?id=<?php echo $row["id"]; ?> Downlaod</a></td>
  </tr>';
}
echo'</table>';
?>
</body>
</html>

Screenshot of my view.php

In your view page,

There is no array called $row. Rather $res holds your query's resultset.

Use this instead:

while($res=mysql_fetch_array($query)){
    echo"<tr>";
        echo "<td>$res['id']</td><td>$res['date1']</td>";
        echo "<td>$res['date2']</td>";
        echo "<td><a href=\"gen.php?id={$res['id']}\">Download</a></td>";
    echo "</tr>";
}

In you pdf generating code, change:

$res = mysql_query("select date1, date2 from test");

To:

$res = mysql_query("SELECT date1,date2 FROM test WHERE id=".intval($_GET['id']));

Please, please, please upgrade your mysql functions to mysqli_ immediately.

I recommend using a prepared statement to protect your query from malicious injection. In the meantime, you can use intval() as a lazy/temporary fix.