!!请向下滚动到“编辑4”!!
这让我彻底发疯了!
我有以下代码,但它不起作用:
$importsectie = join("','",$importsectie);
$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";
$result1 = mysql_query($query1) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){
here the stuff I want to do with the results
}
When I echo $importsectie;
, I get Tekenen','Wiskunde
这很好。
When I echo $query1;
, I get SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC
我在 PhpMyAdmin 中尝试过,它给了我想要的记录,所以这也很好。
我怀疑这与$importsectie
所以我尝试了一下,没有:
$importsectie = join("','",$importsectie);
$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";
$query2 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC";
$result1 = mysql_query($query2) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){
here the stuff I want to do with the results
}
echo $query1;
and echo $query2;
现在给出完全相同的结果(与上面的结果相同),但脚本仍然不起作用。
现在这是奇怪的事情:当我不小心在前面放了一些斜杠时$importsectie
,突然就起作用了!!
//$importsectie = join("','",$importsectie);
$query1 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('$importsectie') OR sectie2 IN ('$importsectie') OR sectie3 IN ('$importsectie') OR sectie4 IN ('$importsectie') OR sectie5 IN ('$importsectie') AND actief='ja' ORDER BY achternaam ASC";
$query2 = "SELECT * FROM smoelenboek WHERE sectie1 IN ('Tekenen','Wiskunde') OR sectie2 IN ('Tekenen','Wiskunde') OR sectie3 IN ('Tekenen','Wiskunde') OR sectie4 IN ('Tekenen','Wiskunde') OR sectie5 IN ('Tekenen','Wiskunde') AND actief='ja' ORDER BY achternaam ASC";
$result1 = mysql_query($query2) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){
here the stuff I want to do with the results
}
为什么?!?我真的想使用这些信息$importsectie
。
我想要用它做的事情是用 FPDF 制作一个 pdf 文件。$importsectie
代码中的其他任何地方都没有使用。
Edit
我以不同的方式尝试过:
$importsectie = $importsectie[0];
$query1 = "SELECT * FROM smoelenboek WHERE sectie1='$importsectie' OR sectie2='$importsectie' OR sectie3='$importsectie' OR sectie4='$importsectie' OR sectie5='$importsectie' AND actief='ja' ORDER BY achternaam ASC";
$query2 = "SELECT * FROM smoelenboek WHERE sectie1='Tekenen' OR sectie2='Tekenen' OR sectie3='Tekenen' OR sectie4='Tekenen' OR sectie5='Tekenen' AND actief='ja' ORDER BY achternaam ASC";
$result1 = mysql_query($query1) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){
here the stuff I want to do with the results
}
Both echo $query1;
and echo $query2;
再次给出相同的结果。
现在使用$query2
工作正常(所以之前没有斜线$importsectie
)。
使用$query1
将开始加载 pdf,加载图片填满,然后显示“无法加载 PDF 文件”。
Edit 2
$aantalsecties = count($importsectie);
for($i=0;$i<=$aantalsecties-1;$i++){
$importsectiedeel = $importsectie[$i];
$query1 = "SELECT * FROM smoelenboek WHERE sectie1='$importsectiedeel' OR sectie2='$importsectiedeel' OR sectie3='$importsectiedeel' OR sectie4='$importsectiedeel' OR sectie5='$importsectiedeel' AND actief='ja' ORDER BY achternaam ASC";
$query2 = "SELECT * FROM bonasmoelenboek WHERE sectie1='Tekenen' OR sectie2='Tekenen' OR sectie3='Tekenen' OR sectie4='Tekenen' OR sectie5='Tekenen' AND actief='ja' ORDER BY achternaam ASC";
$result1 = mysql_query($query1) or die(mysql_error());
while($row1 = mysql_fetch_array($result1)){
here the stuff I want to do with the results
}
}
Both echo $query1;
and echo $query2;
再次给出与之前相同的结果。现在两者都将开始加载pdf,但是加载图片没有填满,页面一直显示“正在加载...”。我遇到过同样的问题$query1
是在 if 语句内构建的。
Edit 3
因此,我多次按照建议切换到 mysqli 与准备好的语句相结合。由于我仍然遇到同样的问题,所以我现在发布整个代码。
首先我有一个带有复选框的页面:
<form action="pdfrender.php" method="POST">
<input type="checkbox" name="sectie[]" value="Tekenen">Tekenen<br>
<input type="checkbox" name="sectie[]" value="Wiskunde">Wiskunde<br>
<input type="submit" value="Sectiesmoelenboek">
</form>
pdfrender.php 如下:
<?php
//Informatie binnenhalen
$importsectie = $_POST['sectie'];
//Starten met het PDF-maak-script
require('../fpdf/fpdf.php');
class PDF extends FPDF
{
//Koptekst
function Header()
{
// Logo en een stukje leeg daaronder
$this->Image('burggravenlaanheader.jpg',0,0,210);
$this->Ln(20);
}
//Voettekst
function Footer()
{
//1.5 cm boven de paginarand
$this->SetY(-15);
$this->SetFont('Arial','I',8);
//Een hokje van paginabreed, 1 cm hoog, daarin pagina/totaal, geen rand, centreren
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
//PDF aanmaken, pagina's laten tellen, nieuwe pagina beginnen
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
//Teller nodig om foto's links en rechts op de pagina te plaatsen
$teller = 1;
//This is going to be dynamic later, with a for-loop scrolling through the parts of the array
$importsectiedeel = $importsectie[1];
//Informatie uit database halen
include '../dbconi.inc';
//Prepare en bind
$query1 ="SELECT * FROM smoelenboek WHERE sectie1=? OR sectie2=? OR sectie3=? OR sectie4=? OR sectie5=? AND actief='ja' ORDER BY achternaam ASC";
$stmt = $con->stmt_init();
if(!$stmt->prepare($query1)){
print "Failed to prepare statement\n";
}else{
$stmt->bind_param("sssss",$importsectiedeel,$importsectiedeel,$importsectiedeel,$importsectiedeel,$importsectiedeel);
$stmt->execute();
$result1 = $stmt->get_result();
while ($row1 = $result1->fetch_assoc()) {
//Alle parameters klaarmaken voor printen
$afkorting = $row1['afkorting'];
$voorletters = $row1['voorletters'];
$voornaam = $row1['voornaam'];
$tussenvoegsel = $row1['tussenvoegsel'];
$achternaam = $row1['achternaam'];
$sectie1 = $row1['sectie1'];
$sectie2 = $row1['sectie2'];
$sectie3 = $row1['sectie3'];
$sectie4 = $row1['sectie4'];
$taak1 = $row1['taak1'];
$taak1 = str_replace("?","",$taak1);
$taak2 = $row1['taak2'];
$taak2 = str_replace("?","",$taak2);
$taak3 = $row1['taak3'];
$taak3 = str_replace("?","",$taak3);
$taak4 = $row1['taak4'];
$taak4 = str_replace("?","",$taak4);
$taak5 = $row1['taak5'];
$taak5 = str_replace("?","",$taak5);
//Alle secties en taken onder elkaar zetten
$onderelkaar = $sectie1."\n".$sectie2."\n".$sectie3."\n".$sectie4."\n".$taak1."\n".$taak2."\n".$taak3."\n".$taak4."\n".$taak5;
//Zorgen dat minder dan 4 secties en minder dan 5 taken geen extra witregels oplevert
$onderelkaar = str_replace("\n\n","\n",$onderelkaar);
$onderelkaar = str_replace("\n\n","\n",$onderelkaar);
$onderelkaar = str_replace("\n\n","\n",$onderelkaar);
$onderelkaar = str_replace("\n\n","\n",$onderelkaar);
//Fotolink klaarzetten indien aanwezig, anders geenfoto.jpg klaarzetten
if (file_exists('fotos/'.$afkorting.'.jpg')){
$foto = 'fotos/'.$afkorting.'.jpg';
}else{
$foto = 'fotos/geenfoto.jpg';
}
//Afkorting hoofdletters voor het afdrukken (was klein voor het aanroepen van de jpg)
$afkorting = strtoupper($afkorting);
//Naam en afkorting koppelen
$titel = $voorletters.' ('.$voornaam.') '.$tussenvoegsel.' '.$achternaam.' ('.$afkorting.')';
//Extra spaties verwijderen bij mensen zonder tussenvoegsel
$titel = str_replace(" "," ",$titel);
//Als de teller oneven is, persoon links plaatsen
if($teller%2!=0){
$pdf->SetFont('Arial','',12);
$pdf->Cell(95,7,$titel,0,1);
$y = $pdf->GetY();
$x = $pdf->GetX();
$pdf->SetFont('Arial','',10);
$pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);
$pdf->MultiCell(65,5,$onderelkaar,0);
//Als de teller even is, de persoon rechts plaatsen
}else{
$pdf->SetY($y-7);
$pdf->SetX($x+95);
$pdf->SetFont('Arial','',12);
$pdf->Cell(95,7,$titel,0,0);
$pdf->SetY($y);
$pdf->SetX($x+95);
$pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);
$pdf->SetY($y);
$pdf->SetX($x+125);
$pdf->SetFont('Arial','',10);
$pdf->MultiCell(65,5,$onderelkaar,0);
$pdf->SetY($y+45);
$pdf->SetX(10);
$pdf->Cell(0,9,'',0,2);
}
//Teller laten oplopen
$teller = $teller+1;
//Afsluiten van de while-loop
}
//Afsluiten van de else
}
//Als de laatste persoon links geplaatst is, cursor naar beneden zetten (ipv ernaast)
if($teller%2==0){
$pdf->SetY($y+45);
$pdf->SetX(10);
$pdf->Cell(0,9,'',0,2);
}
//PDF daadwerkelijk aanmaken
$pdf->Output();
//Statement en databaseconnectie sluiten
$stmt->close();
$con->close();
?>
当我更换五个?
's with 'Tekenen'
并删除bind_param
,pdf 已正确呈现。当我使用上面的代码时,它没有。页面一直显示“正在加载...”。我用了var_dump
整个代码中的每个变量。在这两种情况下我得到相同的输出(工作和不工作)。有人可以帮忙吗???
Edit 4
我将其范围缩小到以下行(在代码中出现两次。):
$pdf->Cell(30,45,$pdf->Image($foto,$pdf->GetX(),$pdf->GetY(),30),1,0);
更具体地说,这有效:
echo '<img src="fotos/geenfoto.jpg" width=100>';
这不会:
$pdf->Image("fotos/geenfoto.jpg",0,0,30);
如前所述,它确实可以在 de MySql(i) 查询中不使用变量的情况下工作,这可能是什么问题?