Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP].txt z poziomu strony
Forum PHP.pl > Forum > Przedszkole
kubal
Witam smile.gif
Mam na stronie taką funkcje która główne służy do poprawienia bezpieczeństwa a działa ona w sposób następujący: żeby dodac admina trzeba najpierw wpisac jego nick w tej funkcji a jeżeli tak się niestanie to osoba awansowana zostanie automatycznie zbanowana, a ja jestem strasznie leniwy i nie chce mi się wchodzic co chwile na FTP i kogoś dopisywac... Więc mam do was prośbę czy napisalibyście mi takiego moda że wszystko będzie z poziomu strony.? smile.gif W funkcji już zmieniłem to:
Kod
$staffs = array("kubal", "anbi", "lol", "mod");

na to:
Kod
$lines = file("include/staff.txt");
foreach ($lines as $line_num => $line)
$staffs = $lines;

i teraz dalej nie potrafie, trzeba napisać jakiś formularz sad.gif Bardzo proszę o pomoc
Tomplus
Zrób sobie edytor tego .txt przez WWW i już nie będziesz musiał wchodzić na FTP.
if (submit)
fopen();
fwrite(); (nową linię, albo przepisujesz całość)
fclose();
else edit
kubal
nie za bardzo wiem jak to napisać sad.gif sam do tego doszłem że są potrzebne te funkcje ;] a dalej co.? sad.gif

utworzyłem plik staff.txt i na razie do niego nic nie wpisuje...
Tomplus
  1. <?php
  2. if ($_POST['submit'])
  3. {
  4. $staff=fopen("staff.txt", "w+");
  5. fputs($staff, $_POST['admin']);
  6. fclose($staff);
  7. echo "<p>Zapisano poprawnie !" </p>
  8. }
  9.  
  10.  
  11.  echo "Jakiś FORMULARZ z TEXTAREA";
  12. ?>



Formularz w HTMLu chyba potrafisz napisać ?
kubal
Kod
<?php

if ($_POST['submit'])
{
        $staff=fopen("include/staff.txt", "w+");
        fputs($staff, $_POST['admin']);
        fclose($staff);
        echo "<p>Zapisano poprawnie ! </p>";
}

$lines = file("include/staff.txt");
foreach ($lines as $line_num => $line)


echo '<form action="" method="post">
Osoby:<br><textarea type="text" name="admin" rows="5" cols="40" />'.$line.'</textarea>
<input type="submit" value="ZAPISZ DANE!" />
</form>';
?>


ale teraz mam białą stronę... sad.gif
marcio
  1. <?php
  2. $lines = file("./include/staff.txt");
  3.  foreach ($lines as $line_num => $line) $dane[] = $line;
  4.  
  5. echo('<form action="'.$_SERVER['PHP_SELF'].'" method="post">
  6.  Osoby:<br><textarea type="text" name="admin" rows="5" cols="40" />'.$dane.'</textarea>
  7.  <input type="submit" value="ZAPISZ DANE!" name="zapisz"/>
  8.  </form>');
  9.  
  10. if (!empty($_POST['admin']) && isset($_POST['zapisz']))
  11. {
  12. $staff=fopen("include/staff.txt", "w+");
  13. fputs($staff, $_POST['admin']);
  14. fclose($staff);
  15. echo "<p>Zapisano poprawnie ! </p>";
  16. }
  17. ?>

Moze tak
Tomplus
cosik ta pętla
jak dla mnie
jest zbędna
kubal
bez pętli nie wyświetlę zawartości pliku tongue.gif
teraz mam tak ;]
Kod
<?php
$lines = file("./include/staff.txt");
foreach ($lines as $line_num => $line)

echo('<form action="'.$_SERVER['PHP_SELF'].'" method="post">
Osoby:<br><textarea type="text" name="admin" rows="5" cols="40" />'.$line.'</textarea>
<input type="submit" value="ZAPISZ DANE!"  name="zapisz"/>
</form>');

if (!empty($_POST['admin']) && isset($_POST['zapisz']))
{
        $staff=fopen("include/staff.txt", "w+");
        fputs($staff, $_POST['admin']);
        fclose($staff);
        echo "<p>Zapisano poprawnie ! </p>";
}
?>

można powiedzieć że działa jak dopiszę tylko siebie ;] ale jak dopiszę kolejną osobę to nie dość że mnie banuje na stronie to jeszcze wygląda to jakoś dziwnie ;/
Tak dopisuje:
http://images26.fotosik.pl/232/12ec1a967b200653.jpg
A po odświeżeniu wygląda to tak:
http://images32.fotosik.pl/289/83ca4b19e038d25d.jpg
Tomplus
wygląda dziwnie.
Mówię że ta pętla jest nie potrzebna, khm ...
a raczej źle umieszczona

Ja bym dodał include("staff.txt") w środek formularza, tam gdzie ma wyświetlić się treść.

a Ty zapętlasz sobie ten formularz.
Jak wpiszesz 10 adminów, to będziesz miał 10 takich okienek.
kubal
Kod
<?php

echo('<form action="'.$_SERVER['PHP_SELF'].'" method="post">
Osoby:<br><textarea type="text" name="admin" rows="5" cols="40" />' . include("include/staff.txt") . '</textarea>
<input type="submit" value="ZAPISZ DANE!"  name="zapisz"/>
</form>');

if (!empty($_POST['admin']) && isset($_POST['zapisz']))
{
        $staff=fopen("include/staff.txt", "w+");
        fputs($staff, $_POST['admin']);
        fclose($staff);
        echo "<p>Zapisano poprawnie ! </p>";
}
?>


daje tak i jest błąd:
Cytat
Warning: include(include/staff.txt</textarea> <input type="submit" value="ZAPISZ DANE!" name="zapisz"/> </form>) [function.include]: failed to open stream: No such file or directory in /home/kubal/www/lol.php on line 6

Warning: include() [function.include]: Failed opening 'include/staff.txt</textarea> <input type="submit" value="ZAPISZ DANE!" name="zapisz"/> </form>' for inclusion (include_path='.:') in /home/kubal/www/lol.php on line 6


sad.gif
marcio
  1. <?php
  2. $lines = file("./include/staff.txt");
  3.  foreach ($lines as $line_num => $line) $dane[] = $line;
  4. ?>

Daj to na poczatku i do textaera daj zmienna $dane przeciez ci pokazalem
kubal
wywaliłem to ponieważ zwracało w formularzu zamiast nazwy użytkownika "Array"
Tomplus
albo daj:

Kod
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">
Osoby:<br><textarea type="text" name="admin" rows="5" cols="40" />';

include("include/staff.txt");

echo '</textarea>
<input type="submit" value="ZAPISZ DANE!"  name="zapisz"/>
</form>');
kubal
teraz działa smile.gif tylko jeszcze jedno "ale"
wszystko się zapisuje jak trzeba ale mnie nadal banuje na stronie jak kogoś dopisze... a jak jestem sam w pliku to wszystko gra.?!
Tomplus
Może coś CI się nadpisuje ?
Np. ostatnia osoba na liście jest adminem.
Sprawdz czy zbanuje Cię jeżeli będzie ostatni na liście.
kubal
nie banuje smile.gif tylko teraz jak to zrobić aby dopisywało na początku a nie na końcu.?
Tomplus
Nie wiemy jak wygląda skrypt sprawdzający dostęp.
ale prawdopodobnie wystarczy dać
for ($i=0;$i<=count($tablica_z_petli);$i++) $status = "Administrator";

oczywiście musisz to zmodyfikować.
kubal
funkcja wygląda tak:
Kod
function burglary () {
global $CURUSER;
$lmaxclass  = 8;
$lines = file("include/staff.txt");
foreach ($lines as $line_num => $line)
$lol2 = $lines; // Lista osób ktore sa leganie w zalodze.
    if ($CURUSER["class"] >= $lmaxclass)
        if (!in_array($CURUSER["username"], $lol2)){
        mysql_query("UPDATE users set enabled='no' WHERE id=$CURUSER[id]");
            stderrnew("Przepraszamy","Korzystasz z nie dozwolonego konta, dlatego zostałeś zbanowany, papa :)");
    }
}


to jak to powinno wyglądać żeby działało normalnie.?
a najwyższa ranga to UC_ADMINISTRATOR ;]
Tomplus
Czyli tak jak mówiłem:
MAsz w bazie:

kubal
tomplus
andi

to
echo $lines;
wyświetli:
kubal
tomplus
andi


czyli powinno być ok jeżeli okalisz klamrami kod poniżej.

linię $lol2 = $lines; // Lista osób ktore sa leganie w zalodze.
moze skasować, bo po co Ci dwie takie same zmienne ?

Zapętlony ten kod umożliwi Ci sprawdzenie każdego imienia z osobno.

Kod
function burglary () {
global $CURUSER;
$lmaxclass  = 8;
$lines = file("include/staff.txt");

foreach ($lines as $line_num => $line)
     if ($CURUSER["class"] >= $lmaxclass
             AND in_array($CURUSER["username"], $lines))
                   $admin = true;

         if ($admin == false){
            mysql_query("UPDATE users set enabled='no' WHERE id=$CURUSER[id]");
            stderrnew("Przepraszamy","Korzystasz z nie dozwolonego konta, dlatego zostałeś zbanowany, papa :)"); }
}



Myślę, że nie popełniłem żadnej literówki.
kubal
no niestety nadal banuje sad.gif

może mam słabą pamięć ale coś mi się ciągle tak wydaje że od tego aby zapisywało na początku pliku jest jakaś funkcja w php...
nospor
zapomnieliscie panowie, ze file() wczytuje linie pliku wraz z enterami na koncu. Nie ma wiec szans by wasza nazwa usera zgadzala sie z tą z file() gdyz taz z file() zawiera jeszcze enter na koncu smile.gif
Musisz kazda wartosc z file() przeleciec przez trim()

Cytat
może mam słabą pamięć ale coś mi się ciągle tak wydaje że od tego aby zapisywało na początku pliku jest jakaś funkcja w php...

źle ci sie wydaje. Nie ma takowej funkcji, chyba ze sam sobie napiszesz. Aby zapisac na poczatku pliku to musisz pobrac jego zawartosc do zmiennej, dopisac na poczatek zmiennej i zapisac ponownie te zmienne do tego pliku
kubal
to zmieniłem w funkcji to:
Kod
$lol2 = $lines;

na to:
Kod
$lol2 = trim($lines);

i nadal to samo sad.gif
nospor
przeciez $lines to tablica. Ty masz kazdy element tej tablicy przepuscic przez trim() a nie tablice
kubal
czyli jak to powinno wyglądać.? sad.gif
Tomplus
$lol2 = trim($lines[0]);
kubal
teraz banuje już jak jest jedna osoba w pliku .txt a jak dopisze następną osobę to też ;/
marcio
Bo masz za pomoca foreach() przeleciec przez cala tablice i dopiero dac trim()
kubal
tak to u mnie wygląda
Kod
function burglary () {
global $CURUSER;
$lmaxclass  = 8;
$lines = file("include/staff.txt");
foreach ($lines as $line_num => $line)
$lol2 = trim($lines[0]);
    if ($CURUSER["class"] >= $lmaxclass)
        if (!in_array($CURUSER["username"], $lol2)){
        mysql_query("UPDATE users set warned='no' WHERE id=$CURUSER[id]");
            stderr("Przepraszamy","Korzystasz z nie dozwolonego konta, dlatego zostałeś zbanowany, papa :)");
    }
}


i jest foreach; inaczej nie wiem jak to ma wyglądać.?!
erix
Cytat
  1. <?php
  2. foreach ($lines as $line_num => $line)
  3. $lol2 = trim($lines[0]);
  4. ?>


A teraz pytanie z pracy domowej, jak działa foreach?
kubal
tongue.gif
już sobie poradziłem z 30 min temu tongue.gif
Kod
<?php
foreach ($lines as $line)
$lol2[] = trim($line);
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.