Ik zit in de knoop(voor de zoveelste keer).
Ik heb een PHP script om een csv file te exporteren uit mij Mysql database. Zover gat het goed, maar nu wil ik de geexporteerde gegevens beperken tot een bepaalde datum. Dus een HTML formulier waar begin en einddatum wordt gekozen en dan verzonden ter uitvoering van het script. En daar loopt het fout. Ik vermoed dat het in mijn Select query zit. Hier volgt het stukje script
<?PHP
// input ophalen
$FTGdatum1 = DoStripSlashes( $_POST['begindatum'] );
$FTGdatum2 = DoStripSlashes( $_POST['einddatum'] );

// Fetch Record from Database

$output = "";
$table = "eva_tevr";
$sql = mysql_query("select * from $table WHERE datum BETWEEN $FTGdatum1 AND $FTGdatum2");
$columns_total = mysql_num_fields($sql);
?>
Het script werkte goed tot ik //input ophalen erbij heb gevoegd en "Where...." heb toegevoegd en ik vermoed dat ik daar de mist inga. Het is ook de bedoeling dat ik ook maar bepaalde velden exporteer maar dat moet ik het * vervangen door de veldnamen.
Ik weet zo niet uit mijn hoofd of je de BETWEEN goed gebruikt maar ik weet wel dat je de variabelen uit de string moet halen.
Probeer het eens als volgt:


$sql             = mysql_query('SELECT * FROM '.$table.' WHERE datum BETWEEN "'.$FTGdatum1.'" AND "'.$FTGdatum2.'"');
Wat je fout had gedaan was:

bij de variablen in de query had je dit gedaan:
Fout: "SELECT * FROM $table WHERE datum BETWEEN $FTGdatum1 AND $FGTdatum2"
Goed: "SELECT * FROM '".$table."' WHERE datum BETWEEN '".$FTGdatum1."' AND '".$FTGdatum2."'"

dit is de oorspronkelijke code die wel degelijk werkt.
<?php

// Database Connection

$host="x";
$uname="xxx";
$pass="xxxx";
$database = "xxxx";

$connection=mysql_connect($host,$uname,$pass);

echo mysql_error();

//or die("Database Connection Failed");
$selectdb=mysql_select_db($database) or die("Database could not be selected");
$result=mysql_select_db($database)
or die("database cannot be selected <br>");


// Fetch Record from Database

$output = "";
$table = "eva_tevr"; // Enter Your Table Name
$sql = mysql_query("select * from $table");
$columns_total = mysql_num_fields($sql);

// Get The Field Name

for ($i = 0; $i < $columns_total; $i++) {
$heading = mysql_field_name($sql, $i);
$output .= '"'.$heading.'";';
}
$output .="\n";

// Get Records from the table

while ($row = mysql_fetch_array($sql)) {
for ($i = 0; $i < $columns_total; $i++) {
$output .='"'.$row["$i"].'";';
}
$output .="\n";
}

// Download the file

$filename = "myFile.csv";
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);

echo $output;
exit;

?>

Dat wilde ik dus aanpassen door een klein formulier te maken waarbij ze begindatum en einddatum via een datepicker kunnen aanduiden.

Na jullie goede raad is het nu dit: (ik heb er wel een echo tussengezet om de datums te zien.)

<?php

// Database Connection

$host="xxxxx";
$uname="xxxxx";
$pass="xxxx";
$database = "xxxx";

$connection=mysql_connect($host,$uname,$pass);

echo mysql_error();

//or die("Database Connection Failed");
$selectdb=mysql_select_db($database) or die("Database could not be selected");
$result=mysql_select_db($database)
or die("database cannot be selected <br>");

// input ophalen
$FTGdatum1 =( $_POST['begindatum'] );
$FTGdatum2 =( $_POST['einddatum'] );
echo .$FTGdatum1. "-" .$FTGdatum2.;
// Fetch Record from Database

$output = "";
$table = "eva_tevr";
$sql = mysql_query("SELECT * FROM '".$table."' WHERE datum BETWEEN '".$FTGdatum1."' AND '".$FTGdatum2."'");
$columns_total = mysql_num_fields($sql);

// Get The Field Name

for ($i = 0; $i < $columns_total; $i++) {
$heading = mysql_field_name($sql, $i);
$output .= '"'.$heading.'";';
}
$output .="\n";

// Get Records from the table

while ($row = mysql_fetch_array($sql)) {
for ($i = 0; $i < $columns_total; $i++) {
$output .='"'.$row["$i"].'";';
}
$output .="\n";
}

// Download the file

$filename = "myFile.csv";
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename='.$filename);

echo $output;
exit;

?>

Maar het wil niet werken
De tabelnaam hoeven geen quotes om heen :



$sql             = mysql_query("SELECT * FROM ".$table." WHERE datum BETWEEN '".$FTGdatum1."' AND '".$FTGdatum2."'");
De datums moeten in '...' maar de tabelnaam niet.


<?php
$sql = mysql_query("SELECT * FROM " . $table . " WHERE datum BETWEEN '" . $FTGdatum1 . "' AND '" . $FTGdatum2 . "'");
?>
Oops dacht even niet na :p Bedankt voor de correctie :)
Volgens mij staat er nu exact wat er in de eerste reactie in dit topic werd aangegeven.
Pipo, Nee. Kijk nog even een keer zorgvuldig!
Ik zit met een heel eigenaardig fenomeen. Van zodra ik ook maar iets verander aan het script werkt het niet meer. Ik heb die aanpassingen gedaan zoals jullie voorstellen. Dus de data input en de Select regel en ik krijg nu de gevraagde data op het scherm maar niet aangeboden als csv file om te downloaden,zoals voorheen. Ik kan dit uiteraard ook doen via PHP admin maar het is de bedoeling dat de gebruiker simpelweg de juiste data kan bekomen met enkele simpele handelingen en niet rechtstreeks in de database kan zitten knoeien.
Zet foutmeldingen aan.

Mogelijk heb je nu output in je script zitten (regel 22 laatste code fragment) en krijg je een "headers already sent" error.

Reageren