我有一个网站,允许人们上传csv文件,然后将其加载到postgres数据库中。上传文件很好,我将文件名和位置../Data/Uploads/mycsv.csv
捕获为$_POST['fname']
。
我正在尝试在$file=file($_POST['fname'])
中使用此变量,但无法使其工作,但如果我将其硬编码为$file=file("../DATA/Uploads/mycsv.csv")
则可行。我附上了有问题的代码。在此先感谢您的任何帮助
同样澄清echo $_POST['fname'];
会返回../DATA/Uploads/mycsv.csv,这与硬编码值相同。
请跟我一起作为我只是比较新的。我附上了正在使用的2个html表单。顶部的一个传递$ fname变量,该变量包含用于上传文件的php代码的文件名和路径。
<Form Method="post" Action="../PHP/Loadcsv.php">
<input type="text" value="<?php echo htmlspecialchars($fname);?>" name="fname">
<br />
<Input Type="submit" Value="Continue">
</Form>
这是将csv复制到数据库中的php
<?PHP
if ($_POST['submit']) {
$file = file(printf($_POST['fname'])); //****doesnt work******
//$file = file("../DATA/Uploads/csv_trial1.csv"); //********This works******
$db = pg_connect("host=localhost dbname=blah user=me password=you");
pg_exec($db, "COPY personaldetails FROM stdin");
foreach ($file as $line) {
$tmp = explode(",", $line);
pg_put_line($db, sprintf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", $tmp[0], $tmp[1], $tmp[2], $tmp[3], $tmp[4], $tmp[5], $tmp[6], $tmp[7]));
}
pg_put_line($db, "\\.\n");
pg_end_copy($db);
?>
下面是运行上面php的html。
<form id='form' method='post' action='' >
<input type="submit" name="submit" />
</form>
在运行了大量的echo以找到变量到达的位置之后,我认为它不会到达if语句的内部可能是由于下一次使用post?
** **更新
所以经过一点点玩耍和弹跳的想法几乎完全脱离我的办公室墙壁......我在正确的轨道上,Devon也是对的,我的问题是2个帖子请求答案是有一个php变量{{ 1}}从第一个表单中获取变量并将其放入第二个表单的输入中
$filename = $_POST['fname'];
我确信可能有其他方法可以实现这一目标,但目前它的确有效。
答案 0 :(得分:1)
我不确定你在哪里提出printf(),但是任何print或echo命令都会将参数输出到浏览器并且不会将其返回给手头的函数。您不需要使用任何特殊的东西来使用变量作为参数。只是:file($_POST['fname']);
Printf专门输出格式化字符串并返回字符串的长度。所以这相当于调用file(integer)
,其中整数是$_POST['fname']
的值的长度。