Чтение текстового файла в PHP - PullRequest
3 голосов
/ 08 апреля 2011

Мой код -

$filename = basename($_FILES['file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext=="txt")
&& ($_FILES["file"]["size"] < 2000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {$newname = 'news/'.$filename;
     move_uploaded_file($_FILES['file']['tmp_name'],$newname);
     $fileread = $newname;
    //reading a file
$file = fopen($fileread, "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
      //inserting each data into table
      $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";
      $query = mysqli_query($connect,$insert);
      if($query)
      {
          echo "cool";
      }
  }

Таким образом, пользователь загружает текстовый файл, который содержит данные в каждой строке.Я хочу вставить данные в базу данных, пока запрос не будет выполнен.

То, что вставляется в базу данных, - это fgets (Resource id # 6) - и это продолжается до тех пор, пока я не остановлюсь., .. этонеконтролируемое ...

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011
  $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";

Вы вставляете буквенный текст fgets($file) в свою базу данных, потому что он встроен в родительскую строку. Вместо этого вы бы хотели что-то вроде этого, которое также (кстати) устраняет уязвимости в SQL-инъекциях:

 $string = fgets($file);
 $string = mysql_real_escape_string($string);
 $insert = "insert into ... values ( ..., '$string', ...)";

Зачем избегать этого? Я не знаю, что находится в этом текстовом файле, но если ЛЮБОЙ текст содержит столько же, сколько одинарную кавычку, это приведет к сбою этой конкретной вставки с ошибкой синтаксиса SQL, и теперь у вас пропущена строка в база данных.

0 голосов
/ 08 апреля 2011

Функция не может быть идентифицирована в строке и поэтому интерпретируется как необработанный текст.

Я бы порекомендовал:

//inserting each data into table
$data = fgets($file);
$insert = "insert into $name (serial,data,used) values('', {$data}, '0')";
0 голосов
/ 08 апреля 2011

Вы должны убрать вызов fgets из одинарных кавычек, которые делают его строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...