download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Четене от текстова база данни с PHP !

<1 2 >

Автор
Съобщение
programings
Сря, 18.07.12, 18:11
Така вече всичко е добре!

Мерси!

Ако може още един въпрос по същата система :

Как мога да изтрия само една определена линия от текстовата база данни, като това коя линия да изтрия да зависи от поредният и номер във файла!

Например подавам с GET числото 2, и искам съответно скрипта към който го подавам да изтрие втората линия от текстовата база данни!

Как ще стане това?

редактиран от programings на 18.07.12 18:11
phrozencrew
Сря, 18.07.12, 19:33
Можеш да използваш тази функция:
function delete_line($file, $line, $change_in) {
      $entries = file($file);
      if(empty($change_in)) {
         unset($entries[$line-1]);
      } else {
         $entries[$line-1] = $change_in;
      }
      $newentries = implode("", $entries);
      $datei = fopen($file, "w");
      fputs($datei, $newentries);
      fclose($datei);
}

$file - файла
$line - номера на линията
$change_in - с това може да се промени линията. Ако липсва, линията се изтрива.
Имай в предвид, че броенето започва от нула, така, че когато намериш коя е линията, можеш да използваш следния код:
$linia = $i+1;
delete_line($file,$linia,"");

Или целия код може да изглежда така:
function delete_line($file, $line, $change_in) {
      $entries = file($file);
      if(empty($change_in)) {
         unset($entries[$line-1]);
      } else {
         $entries[$line-1] = $change_in;
      }
      $newentries = implode("", $entries);
      $datei = fopen($file, "w");
      fputs($datei, $newentries);
      fclose($datei);
}
 
$match = '/54545/'; // Някакво ID да речем
 
$file = "text.txt";
if($file_array = file($file)){
	for ($i=0; $i<count($file_array); $i++){
		if (preg_match($match,$file_array[$i])){
			$linia = $i+1;
			delete_line($file,$linia,""); // Изтриваме реда в който се среща id = 54545
		}
	}
}

phrozencrew
Сря, 18.07.12, 19:39
Проблема ти с новия ред може да идва от това, че последния елемент от базата данни включва невидим символ за празен ред. Можеш да вземеш последното поле с:
$ip = rtrim($ip);

Ако след всички операции курсора ти е на нов празен ред, това е правилно! Ако работиш с bash и въобще с конзолата на Linux и нямаш нов ред след края на запис от лог, може да имаш проблеми. Не се притеснявай от новия ред след редовете, освен, ако не се конкатенира.

programings
Сря, 18.07.12, 20:23
Мерси!

Форумът обаче пак май гълта черти!

Дава ми грешка за регулярният израз :
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:serverhtdocsdel.php on line 22

Кода, който използвам :
<?php
$id = $_GET['id'];
 
function delete_line($file, $line, $change_in) {
      $entries = file($file);
      if(empty($change_in)) {
         unset($entries[$line-1]);
      } else {
         $entries[$line-1] = $change_in;
      }
      $newentries = implode("", $entries);
      $datei = fopen($file, "w");
      fputs($datei, $newentries);
      fclose($datei);
}
 
$match = $id;
 
$file = "sigs.txt";
if($file_array = file($file)){
	for ($i=0; $i<count($file_array); $i++){
		if (preg_match($match,$file_array[$i])){
			$linia = $i+1;
			delete_line($file,$linia,"");
		}
	}
}
?>

редактиран от programings на 18.07.12 20:24
phrozencrew
Сря, 18.07.12, 20:36
Замени:
$match = $id;
с
$match = '/'.$id.'/';

Не е лоша идея да прочетеш малко за preg. Ще видиш колко мощен инструмент са регулярните изрази.

programings
Чет, 19.07.12, 10:04
Да, веднъж се опитах да ги науча, но ми се сториха доста трудни!

Пак ще опитам!

Недялко, защо не направиш един урок между другото за регулярни изрази, ако ти остане време?
Друго си е да е обяснено на български, и най-вече подробно!

Между другото завърших системката! Може да я свалите от тук, ако желаете!
На някого може да е полезна!

редактиран от programings на 19.07.12 15:59
anonymous
Пет, 20.07.12, 01:13

RE: Четене от текстова база данни с PHP !

” ...
Между другото завърших системката! Може да я свалите от тук, ако желаете!
На някого може да е полезна!

Сега не знам как да ти го кажа без да те засегна. А, наистина не целя да те засягам. Затова ще го кажа направо. Трябва сериозно да преработиш кода си. Да, така работи. Но, нека да метна един много бърз и повърхностен поглед.
if(@$_SESSION['admin']==true)

Използването на @ предотвратява извеждането на грешка, но в същото време хаби и процесорно време и ресурси на сървъра, което довежда до по- бавната работа на сайта ти(и не само). Щом е в проверка(if) е безсмислено да се използва. Още за този ред. Проверяваш дали $_SESSION['admin'] е true. Дефакто това значи, че проверяваш дали стойността и е различна от 0 (нула) и NULL. Иначе, казано, освен ако не обичаш да пишеш много, кода ти би следвало да е следния:
if($_SESSION['admin'])

Това разбира се ще доведе до предупреждение, че използваш недефинирана променлива и предполагам, че и заради това си сложил @ в твоя код. За да предотвратиш тези предупреждение ( в конкретния пример) правилния код е:
if(isset($_SESSION['admin']) && $_SESSION['admin'])

Разбира се това е много писане, а и все пак е само някакво предупреждение, а не грешка в кода. За това може да се използва ( на втория ред от php кода ти):
error_reporting(E_ALL ^E_NOTICE);

и по този начин
if($_SESSION['admin'])

няма да изведе никаква грешка.
Минавам нататъка ( с уговорката, че пиша всичко това не за да жегна по някакъв начин, а понеже виждам, че имаш желание да се научиш) още в началото. Предполагам, че е от малкото опит, но session_start(); винаги е в началото на файла, иначе рискуваш (явно не си се сблъсквал все още) да получиш едни съобщения за изпратен header вече и сайта ти да спре до там. Тоест:
<?php session_start();
error_reporting(E_ALL ^E_NOTICE); ?>

Примерно, как изглежда файла ти.

От твоя код:
echo "<hr />
<a href='?page=login'>Влез в системата!</a>";

Отново много процесорно време. Освен, ако нямаш променлива в подавания стринг на echo свикни да използваш единични кавички. Примерно:
echo '<hr />
<a href="?page=login">Влез в системата!</a>';

А, и даже да имаш променлива, например echo "rezultata e $result ot iskaniq sbor"; търсиш ли бързодействие на сайта си би следвали да е:
echo 'rezultata e ' . $rezult . ' ot iskaniq sbor';

case @admin

Наложително е да прочетеш за switch - case конструкцията, или ако предпочиташ за if - elseif - else
if($id=="")

А какво, ако подам само интервал :)
if (!(int)$id)

За твоя случай е вярното (id трябва да е число)

От твоя код:
for ($i=0; $i<count($file_array); $i++)

Представи си, че петицията са я подписали поне половин милион хора(дай Боже). Това е текстов файл в мегабайти. А тука за всеки ред ще се извършва преброяване на масива /count($file_array)/. Няма да дочакам да ми се покаже сайта.
Има два варианта. 1->създаваш си променлива която съдържа елементите на масива предварително:
$count = count($file_array);
for ($i=0; $i<$count; $i++)

или в тялото на цикъла инициализираш началната стойност на променливата:
for ($i=0, $count=count($file_array); $i<$count; $i++)

Специално за for цикъла. Синтаксиса е следния:
for (инициализация; проверка; действие)

Инициализацията се извършва само при първото стартиране на цикъла. Проверката тече постоянно докато се изпълнява цикъла. А, действието може да е всякакво. От това да боравя с променливи, минавайки през това да викам функция/и и достигайки до каквото и да е стига да е php легитимно:
for ($i = 0, $something = sizeof($array); $i < $something; include 'pages/page_' . $i . 'html')

Няма да продължавам, но искам да подчертая отново: Пиша всичко това не за да те накърня(даже и не съм си го помислил), а защото имаш желание(поне това си мисля, че съм видял) да програмираш.

редактиран от anonymous на 20.07.12 01:30
phrozencrew
Пет, 20.07.12, 07:12
lotsofsex, чудесни съвети! Някои неща не ги знаех, благодаря!
programings
Пет, 20.07.12, 09:46
Благодаря за съветите! Наистина са чудесни, сега ще оправя кода!

Ако има още грешки, можеш да ми ги покажеш без да се притесняваш от абсолютно нищо!

Няма какво да ме засягаш, аз съм абсолютно начинаещ, уча се все още на този език!

Такива съвети винаги са ми добре дошли!

Благодаря ти много!

<1 2 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.