LS,

Met deze regel controleer ik of in de URL de variable report gevult is.

<?php

$report = ( isset ( $_GET["report"] ) && trim ( $_GET["report"] ) != '' ) ? trim ( $_GET["report"] ) : 'default';
?>

als GET[report] niet gevuld is krijgt $report de waarde default.

Is het mogelijk om als report niet in de URL voorkomt $report de waarde "EMPTY" te geven??

Harry
EMPTY, dus gewoon leeg:
<?php
$report = ( isset ( $_GET["report"] ) && trim ( $_GET["report"] ) != '' ) ? trim ( $_GET["report"] ) : '';
?>
Of bedoel je dat anders?
- SanThe - op 15/07/2017 16:40:12

Of bedoel je dat anders?

Ja dus
Als in de URL geen variable voorkomt dan moet $report de waarde "EMPTY" krijgen
Ale de variable report wel voorkomt maar geen waarde heeft dan wordt $report "default"
Maar als de variable en aanwezig en een waarde heeft wordt $report die waarde.

Harry

<?php
$report = ( isset ( $_GET["report"] ) ) ? trim ( $_GET["report"] ) : 'EMPTY';
$report = ( $report == '' ) ? 'default' : $report;
?>
Bedankt,

Na het inbouwen van een stukje controle op de aanwezigheid van de gevraagde template werkt het niet meer.
Ben ik een haakje of punt-comma vergeten?

<?php
//From the URL the report name is passed on
//Depending on it some variables sre set and a template is included
// ---------------------------------------------------------
// URL can look like printTCPDF?report=name
//							   &label=Yes/No
//							   &horseFEIid=1234567
//							   &type=rider/groom/horse 
// ---------------------------------------------------------
//First check for a report-name
$report = ( isset ( $_GET["report"] ) ) ? trim ( $_GET["report"] ) : 'EMPTY';
$report = ( $report == '' ) ? 'default' : $report;
// Then create the template name for further use
$template = "template.".$report.".TCPDF".".php";
echo $template.<br />";
//Check if template file exitst
if(!(file_exists(dirname(__FILE__).$template))) {
        echo "The template file does not exist<br />";
}

echo realpath(dirname(__FILE__)).$template."<br />";
echo dirname(__FILE__)."<br />";
?>
Harry H Arends op 15/07/2017 19:23:34

Ben ik een haakje of punt-comma vergeten?

Ja, op regel 15 in de bovenstaande listing.

We hebben er, bij herhaling in opeenvolgende topics, op aangedrongen om de error reporting van PHP aan te zetten. Dan meldt PHP zelf wat je fout doet, meestal inclusief het juiste regelnummer. Zou je dat dan alsjeblieft ook eens een keer willen doen?
Ter info: zelf heb ik altijd een functie


function array_get($array,$key,$default){
  return array_key_exists($key,$array) ? $array[$key] : $default;
}


Dat scheelt je dat hele gedoe iedere keer met isset(...) enz:


$report = array_get($_GET,'report','EMPTY');


Overigens is het een goed idee om even te controleren of $report niet misbruikt wordt voor path traversal. Bijvoorbeeld door:


if(!preg_match('/^\\w+$/',$report)) die('doei'); //alleen letters en cijfers toegestaan
>> Ter info: zelf heb ik altijd een functie
Leuk, maar wat is de exacte meerwaarde? Harry heeft al genoeg moeite zonder deze extra's.

Ook je path traversal controle is leuk, maar wat is de meerwaarde als je helemaal niets met includes doet vanuit de aangeleverde variabele? Een hoop wolligheid tegen 0 waarde.
@Ward, sorry ik was dit in een los script aan het testen, buiten het grote script om, en was dus vergeten om error melding daarin te plaatsen. Dat automatischme is er nog niet.

@Ben Rob bedoeldt het goed maar je hebt wel gelijk men moet niet teveel dingen er bij halen.
De routine ziet er nu zo uit, kan misschien wel anders opgebouwdt worden.

<?php
//First check for a report-name
$report = ( isset ( $_GET["report"] ) ) ? trim ( $_GET["report"] ) : 'EMPTY';
$report = ( $report == '' ) ? 'default' : $report;
// Then create the template name for further use
$template = "/template.TCPDF.".$report.".php";
echo $template."<br />";
//Check if template file exitst
if(!(file_exists(dirname(__FILE__)."/".$template))) {
        echo "The template file does not exist<br />";
}
echo "Template  file : ".dirname(__FILE__)."/".$template."<br />";
echo realpath(dirname(__FILE__))."<br />";
echo dirname(__FILE__)."<br />";
?>



[size=xsmall]Toevoeging op 16/07/2017 11:21:51:[/size]

Nu heb ik bovenstaand script als een include in mijn hoofd script geplaatst en krijg dan de melding dat de variable op regel niet aanwezig is.

<?php
include ("gearboxTCPDF.php");
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {

	//Page header
	function Header() {
		// Logo
		// Set color
        $this->SetTextColor(0, 0, 0);
		// Set font
		$this->SetFont('helvetica', 'B', 34);
		// Title
		$this->Cell(0, 0, $report, 0, false, 'C', 0, 'L', 0, false, 'M', 'M');
		$image_file = 'images/Header_Brief.png';
		$this->Image($image_file, 0, 6, 210, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
	}
?>


[size=xsmall]Toevoeging op 16/07/2017 11:24:55:[/size]

Harry H Arends op 16/07/2017 10:30:48

@Ward, sorry ik was dit in een los script aan het testen, buiten het grote script om, en was dus vergeten om error melding daarin te plaatsen. Dat automatischme is er nog niet.

@Ben Rob bedoeldt het goed maar je hebt wel gelijk men moet niet teveel dingen er bij halen.
De routine ziet er nu zo uit, kan misschien wel anders opgebouwdt worden.

<?php
//First check for a report-name
$report = ( isset ( $_GET["report"] ) ) ? trim ( $_GET["report"] ) : 'EMPTY';
$report = ( $report == '' ) ? 'default' : $report;
// Then create the template name for further use
$template = "/template.TCPDF.".$report.".php";
echo $template."<br />";
//Check if template file exitst
if(!(file_exists(dirname(__FILE__)."/".$template))) {
        echo "The template file does not exist<br />";
}
echo "Template  file : ".dirname(__FILE__)."/".$template."<br />";
echo realpath(dirname(__FILE__))."<br />";
echo dirname(__FILE__)."<br />";
?>



[size=xsmall]Toevoeging op 16/07/2017 11:21:51:[/size]

Nu heb ik bovenstaand script als een include in mijn hoofd script geplaatst en krijg dan de melding dat de variable op regel 14 niet aanwezig is. Hier stond eerst gewoon $_GET['report'] en dat werkte wel.

<?php
include ("gearboxTCPDF.php");
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {

	//Page header
	function Header() {
		// Logo
		// Set color
        $this->SetTextColor(0, 0, 0);
		// Set font
		$this->SetFont('helvetica', 'B', 34);
		// Title
		$this->Cell(0, 0, $report, 0, false, 'C', 0, 'L', 0, false, 'M', 'M');
		$image_file = 'images/Header_Brief.png';
		$this->Image($image_file, 0, 6, 210, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
	}
?>

Moet ik iets speciaal doen om variabelen uit een include door te sturen??


Variabelen die buiten een function zijn aangemaakt kun je niet zomaar in een function gebruiken.
En $report is dus niet bekend in de function.

Ik gebruik dan op de eerste regel in de function: global $report;
Dan is die wel bekend, maar ik weet niet of dit verstandig is in een class want ik gebruik nooit class.
Een andere manier is de variabele mee te geven bij de aanroep van de function: Header($report) maar dan moet je ook de function zelf aanpassen.
- SanThe - op 16/07/2017 11:55:54

Variabelen die buiten een function zijn aangemaakt kun je niet zomaar in een function gebruiken.
En $report is dus niet bekend in de function.

Ik gebruik dan op de eerste regel in de function: global $report;
Dan is die wel bekend, maar ik weet niet of dit verstandig is in een class want ik gebruik nooit class.
Een andere manier is de variabele mee te geven bij de aanroep van de function: Header($report) maar dan moet je ook de function zelf aanpassen.

Ik heb het niet over een functie maar een include of is dat hetzelfde??

Reageren