duaner1634
duaner1634
2017-04-20 10:39

无法从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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • dongqing8765 dongqing8765 4年前

    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.

    点赞 评论 复制链接分享

相关推荐