How to count length of csv file in when uploaded in php ? - php

code:
<?php
if(isset($_POST['upload']))
{
$filename = $_FILES['files']['name'];
$path = "upload_enq/";
$move = move_uploaded_file($_FILES['files']['tmp_name'],$path.$_FILES['files']['name']);
$path_file = "upload_enq/".basename($_FILES['files']['name']);
$c =0;
$fileObj = fopen( $path_file, "rt" );
if($fileObj){
while(!feof($fileObj)){
$content = fgets($fileObj);
if($content)
$c++;
}
}
fclose($fileObj);
echo $c;
}
?>
<form class="forms-sample" method="post" enctype="multipart/form-data">
<input type="file" name="files" id="files" />
<input type="submit" class="btn btn-success mr-2" name="upload" id="upload" value="Upload" />
</form>
In this code I have create a simple form where I am uploaded csv file and I want to count lenght of csv file. Now what happen when I uploaded csv file which having 295 rows but it shows wrong output it count 926 rows. So, How can I fix this issue ?Please help me.
Thank You

As you said that you need the row count of the csv file, so use file()
$fp = file( $path_file, FILE_SKIP_EMPTY_LINES);
echo count($fp);
So the code will become short now
<?php
if(isset($_POST['upload']))
{
$filename = $_FILES['files']['name'];
$path = "upload_enq/";
$move = move_uploaded_file($_FILES['files']['tmp_name'],$path.$_FILES['files']['name']);
$path_file = "upload_enq/".basename($_FILES['files']['name']);
$fp = file( $path_file);
echo count($fp);
}
?>
I have tested it on local:-
https://prnt.sc/jody8e
https://prnt.sc/jodyjl
https://prnt.sc/jodyoz

As per my comments use Count function to get total number of rows in CSV file like this
$fileObj= file('filename.csv');
echo count($fileObj);
for more details read PHP Manual

Related

PHP move_uploaded_file() only moves the last picture to the folder

I have a form though which i want to upload multiple images and store them in my folder, but my program only stores the last selected image.
My form:
<form method="POST" action="server.php" enctype="multipart/form-data">
<input type="file" name="pictures[]" multiple>
<button class="btn btn-success btn-block" name="add">ADD</button>
</form>
My PHP code:
$images = $_FILES['pictures'];
$image_names = $images['name'];
$image_tmpnames = $images['tmp_name'];
foreach($image_names as $image_name){
$foto = 'images/' . $image_name;
foreach($image_tmpnames as $image_tmpname){
move_uploaded_file($image_tmpname,$foto);
}
}
How can I fix this so all of the pictures will be moved to my "images" folder?
maybe try other loop, and set the distination path.
I craft this code you can implement in your solution:
$arquivo = isset($_FILES['img']) ? $_FILES['img'] : FALSE;
for ($controle = 0; $controle < count($arquivo['name']); $controle++){
$destino = $diretorio."/".$arquivo['name'][$controle];
if(move_uploaded_file($arquivo['tmp_name'][$controle], $destino)){
echo "Upload sucess<br>";
}else{
echo "Erro upload";
}
}
Don't use nested loops. You want to process the two arrays in parallel, not as a cross-product.
foreach ($image_names as $i => $image_name) {
$image_tmpname = $image_tmpnames[$i];
$foto = 'images/' . $image_name;
move_uploaded_file($image_tmpname,$foto);
}

How to edit/update a txt file with php

After I've read a lot of similar problems with the edit/update function on a file and none of it worked I would like to ask for some help.
I am trying to edit a .txt document from php. I have tried these things:
This was the last code which I've read here and didn't work.
$data_to_write = "$_POST[subject]";
$file_path = "text/" + $row['name'];
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
And this is my previous try:
$new_contents = "$_POST[subject]\n";
$path = "text/$row[name]";
file_put_contents($path, $new_contents);
I hope someone would explain me how to do this the right way. Thank you.
This is all of my code:
<?php
if(isset($_GET['id']))
{
$edit = mysql_query("SELECT * FROM text_area WHERE text_id=$_GET[id]");
$row = mysql_fetch_assoc($edit);
$contents = file_get_contents($row['content']);
?>
<form action="" name="form" method="post">
<input type="hidden" name="id" value="<?php echo $row['text_id']; ?>" /><br />
<label for="">Заглавие:</label><br />
<input type="text" name="title" style="width:500px;" value="<?php echo $row['subject'] ?>" /><br />
<select name="opt">
<option value="0"></option>
<?php
$result = mysql_query("SELECT * FROM image_area");
while ($row = mysql_fetch_array($result))
{
echo "<option value=" . $row['path'] . ">" . $row['name'] . "</option>
";
}
?>
</select><input type="button" name="sumbitP" value="Choose" onclick="addtext();" />Image list<br />
<textarea rows="10" cols="50" name="text" id="markItUp"><?php echo $contents ?></textarea><br />
<input type="submit" name="sumbitT" value="Update" />
<input type="reset" value="Reset" />
</form>
<?php
}
?>
<?php
if(isset($_POST['id']))
{
if(mysql_query("UPDATE text_area SET title='$_POST[subject]' WHERE text_id ='$_POST[id]'"))
{
$data_to_write = "" . $_POST['text'];
$file_path = "text/$row[name]";
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
echo '<br><br><p align="center">Everything is ok</p>';
} else {
echo '<br><br><p align="center">Everything is not ok</p>' ;
}
?>
Just to add something which might be useful: I am getting this error which I can't manage to find an answer for with Google.
Warning: fopen(text/) [function.fopen]: failed to open stream: Is a directory in
You just need to change :
$file_path = "text/" + $row['name'];
to this :
$file_path = "text/" . $row['name'];
The concatenation operator in PHP is . (not +)
And make sure the directory text exists, otherwise its better to check and then write :
$data_to_write = $_POST['subject'];
$file_path = "text/" . $row['name'];
if ( !file_exists("text") )
mkdir("text");
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
You can also open file in append mode using fopen() and put whatever you have at the end like
$path = dirname(__FILE__).'/newfile.txt';
$fp = fopen($path, 'a');
if(!$fp){
echo 'file is not opend';
}
fwrite($fp, 'this is simple text written');
fclose($fp);
You need to use file_get_contents to get the text of your file.
$file_path= "text/" . $row['name'];
// Open the file to get existing content
$current = file_get_contents($file_path);
// Append a new person to the file
$data_to_write.= $_POST[subject]."\n";
// Write the contents back to the file
file_put_contents($file_path, $data_to_write);
See Documentation
I prefer to use file_put_contents and set flags in order to add text instead of overwrite the whole file. With flags you can also lock the file if you have multiple script accessing the same file simultaneously.
Here is how:
$file_name = 'text.txt';
$line= "This is a new line\n";
// use flag FILE_APPEND to append the content to the end of the file
// use flag LOCK_EX to prevent other scripts to write to the file while we are writing
file_put_contents($file_name , $line, FILE_APPEND | LOCK_EX);
Here is the full documentation: https://www.php.net/manual/en/function.file-put-contents.php
I think the problem may be the first line :
$data_to_write = "$_POST[subject]";
Replace it with the following :
$data_to_write = "" . $_POST['subject'];
And i highly recommand to protect this with hmtlentities or anything else as it's a direct user input.
I just put the code into a compiler, you are missing a } at the end.

PHP get names of multiple uploaded files

Hi im trying to create a script to upload multiple files.
everythings works so far and all files are being uploaded.
My problem now is that i need to grap each file name of the uploaded files, so i can insert them in to a datebase.
Here is my html:
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image[]" multiple />
<input type="submit" value="upload" />
And here is the php:
if (!empty($_FILES['image'])) {
$files = $_FILES['image'];
for($x = 0; $x < count($files['name']); $x++) {
$name = $files['name'][$x];
$tmp_name = $files['tmp_name'][$x];
$size = $files['size'][$x];
if (move_uploaded_file($tmp_name, "../folder/" .$name)) {
echo $name, ' <progress id="bar" value="100" max="100"> </progress> done <br />';
}
}
}
Really hope someone can help me with this.
/JL
You have your indexes backwards. $_FILES is an array, with an element for each uploaded file. Each of these elements is an associative array with the info for that file. So count($files['name']) should be count($files), and $files['name'][$x] should be $files[$x]['name'] (and similarly for the other attributes. You can also use a foreach loop:
foreach ($_FILES as $file) {
$name = basename($file['name']);
$tmp_name = $file['tmp_name'];
$size = $file['size'];
if (move_uploaded_file($tmp_name, "../folder/" .$name)) {
echo $name, ' <progress id="bar" value="100" max="100"> </progress> done <br />';
}
}
I think the glob() function can help:
<?php
foreach(glob("*.jpg") as $picture)
{
echo $picture.'<br />';
}
?>
demo result:
pic1.jpg
pic2.jpg
pic3.jpg
pic4.jpg
...
be sure to change the file path and extension(s) where necessary.
Thanks for the help, i got it to work by simply creating variables:
$image_1 = (print_r($files['name'][0], true));
$image_2 = (print_r($files['name'][1], true));
$image_3 = (print_r($files['name'][2], true));

Local text file to variable in PHP

I'm trying to capture the text in a local .txt file to a PHP variable so I can save to database. I've been at it for hours and no luck. I've tried just about everything but this is what I currently have. Most of it is commented out for debugging.
As-is it just shows me a blank page and doesn't echo anything. What am I doing wrong? Any suggestions would be greatly appreciated.
EDIT:
Complete updated code. With errors on I'm getting a notice about an undefined index on line 12.
<?php
error_reporting(E_ALL); ini_set('display_errors','1');
?>
<html>
<head>
<title>upload file</title>
</head>
<body>
<?php
$size = $_FILES['file']['size'];
$filename = $_FILES['file']['tmp_name']; // name of the file
//$max_filesize = 100000; // Maximum filesize in BYTES
//$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.
// if($ext = "txt") //check for .txt
// die('Only .txt files allowed.');
// if($size > $max_filesize) //check file size
// die('File is too large');
if(file_exists($filename)){
$fp = fopen($filename, "r");
$str = fread($fp, filesize($filename));
echo $str;
fclose($fp);
}
?>
</body>
</html>
And the upload form:
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
Test for $_FILES['uploadedfile']['tmp_name'] - this is the location of temporary file created on the server. $_FILES['uploadedfile']['name'] contains the original name of the uploaded file on client's side.
Update the code:
$size = $_FILES['file']['size'];
$filename = $_FILES['file']['name'];
to
$size = $_FILES['uploadedfile']['size'];
$filename = $_FILES['uploadedfile']['tmp_name'];
Documentation for the $_FILES variable can be found in PHP manual. Check out this tutorial for uploading files with PHP.
Apart from that, correct the $size($filename) to filesize($filename).
use filesize insead of $size so that it reads $str = fread($fp, filesize($filename));

Edit a file with PHP

Ok here is what I have going on.
I am listing the contest of a directory so I can edit and delete files.
The code I am using to do that is below (Other then editing as it does not work).
<?php
$directory = ("enctlfiles/");
$dir = opendir($directory);
$files = array();
while (($file = readdir($dir)) != false) {
$files[] = $file;
}
closedir($dir);
sort($files);
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>File Name</TH><th>Modified Date</th><th>Entries In File</th><th>Delete | Edit</th></TR>\n");
foreach ($files as $file)
{
if (strpos($file, '.jpg',1)||strpos($file, '.ctl',1) ){
echo "<TR><TD><a href=$directory$file>$file</a></td>";
echo "<td>";
echo date("F d Y H:i:s",filemtime($directory. $file));
echo "<td>";
echo count(file($directory. $file));
echo "<td>";
echo "<a href=enctlfiles/dodelete.php?file=$file>Delete</a> | <a href=enctlfiles/editfile.php?file=$file>Edit</a>";
}
}
?>
That lists all of the files in order in a nice pretty table. The delete function works. The edit one not so much . It is due to me not knowing what I am doing I am sure of it.
Here is the contents of the editfile.php
<form action="edit.php" method="post">
<TEXTAREA NAME="save" COLS=150 ROWS=50 wrap="off">
<?php
$dir = ".";
include($dir. '/' .$_GET['file']);
?>
</textarea>
<P><INPUT TYPE="SUBMIT" VALUE="Update File"><INPUT TYPE="RESET">
</FORM>
That populates the textarea with the file contents when you click on the "Edit" link. I don't know if that is the right way to get the data in there to be able to edit the file.
Here is the contents of the edit.php file:
<?php
//I have tried this but it give me that Unable to open file.
//$org = ($_GET['file']) or exit("Unable to open file!");
//This returns me to the prodsh.php page but does not edit the file.
$org = $_POST['save'] or exit("Unable to open file!");
$copy = $org . date("-m-d-Y-His");
copy($org,$copy);
$f = fopen($org, 'w');
fwrite($f, $_POST['save']);
fclose($f);
header('Location: http://somesite.com/GroveTuckey/itemsetup/prodsh.php');
?>
I think the editfile.php and the edit.php file are jacked up but don't know where.
I am trying to learn this and this site has been very helpful when I get stumped on something so I thank you in advance for the help given.
Also I know the danger of editing files via a webpage. This is not public or on a server that is accessible by the world. Right now I don't want to deal with a database.
I have edited files using the below code:
<form action="doedit.php" method="post">
<TEXTAREA NAME="save" COLS=150 ROWS=50 wrap="off">
<?php
include('somefile.ctl');
?>
</textarea>
<P><INPUT TYPE="SUBMIT" VALUE="Update File"><INPUT TYPE="RESET">
</FORM>
With the contents of doedit.php being:
<?php
$org = 'Somefile.ctl';// This is the name of the file in the form above
$copy = $org . date("-m-d-Y-His");
copy($org,$copy);
$f = fopen('somefile.ctl', 'w');//This is the name of said file also.
fwrite($f, $_POST['save']);
fclose($f);
header('Location: http://somesite.com/GroveTickey/editfile.php');
?>
But since the names of the files can be anything I can't put specific names in the script.
This works great other then having to hardcode file names.
You aren't passing the name of the file back to edit.php. Set the form's action to edit.php?file=<?php echo $_GET['file']; ?>.
El codigo para editar lo hice asi:
---Inicio
<? php
$filename = isset($_GET['file']) ? $_GET['file'] : '';
$directory = ("C:\\Linux\\www\\contenido\\"); // Restrict to this directory...
$fn = $directory . $filename;
if (isset($_POST['content']))
{
$content = stripslashes($_POST['content']);
$fp = fopen($fn,"w") or die ("Error opening file in write mode!");
fputs($fp,$content);
fclose($fp) or die ("Error closing file!");
}
?>
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
<textarea rows="25" cols="100" name="content"><?php readfile($fn); ?></textarea>
<hr />
<input type="submit" value="Guardar">
</form>
back to list
And work great

Categories