PHP - błędy w kodzie

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Jestem jeszcze noobkiem w programowaniu ale mam zrobić na infe stronkę która to będzie prosić o logowanie - potem wypisanie newsa i wywalenie go na stronie głównej. Mam już większość zrobione, jednak nie chce mi to wogóle zapisywac newsów do pliku.

aktualnosci_dodaj
Kod:
<?php
 //jak jest parametr $_POST['haslo'] i jest w nim słowo 'tajne' to logujemy
 if (isset($_POST['haslo']) && $_POST['haslo']=='tajne') $_SESSION['zalogowany']=true;

 //jeśli nie jesteśmy zalogowani, to wyświetlamy skrypt logowanie.php
 if (!isset($_SESSION['zalogowany']) || $_SESSION['zalogowany']==false)
 {
   include('logowanie.php');
   return;
 }

 //jak jest pole autor, tzn. że przesyłamy formularz
 if (isset($_POST['autor']))
 {
    //dostosowujemy wszystkie pola
    $_POST['autor']=konwertuj($_POST['autor']);
    $_POST['tytul']=konwertuj($_POST['tytul']);
    $_POST['tresc']=konwertuj($_POST['tresc']);
    $_POST['zrodlo']=konwertuj($_POST['zrodlo']);

    //kontrolujemy poprawność
    $blad='';
    if (strlen($_POST['tresc'])<10 || strlen($_POST['tresc'])>1024) $blad='Treść niusa ma nieprawidłową długość!';
    if (strlen($_POST['tytul'])<10 || strlen($_POST['tytul'])>200) $blad='Tytuł niusa ma nieprawidłową długość!';
    if (strlen($_POST['zrodlo'])<2 || strlen($_POST['zrodlo'])>20) $blad='Źródło ma nieprawidłową długość!';
    if (strlen($_POST['autor'])<3) $blad='Źle wprowadzono informacje o autorze!';
      if ($blad!='') info($blad,'blad');
      else
    {        //zapisujemy dane do pliku
        if (file_exists('wpisy.txt')) $dane=file('wpisy.txt'); else $dane=array();
    
        if ($plik=fopen('wpisy.txt','w'))
        {
         flock($plik,LOCK_EX);
         fputs($plik,"<table border='0'>");
         fputs($plik,"<tr><td>[b]$_POST[tytul][/b]</td></tr>");
             fputs($plik,"<tr><td>[i]$_POST[tresc][/i]</td></tr>");
         fputs($plik,"<tr><td>[b]Autor:[/b]$_POST[autor]</a></td><td align='right'>[b]Źródło:[/b]$_POST[zrodlo]</td></tr>");
           fputs($plik,"</table><hr />");
         for ($i=0;$i<count($dane);$i++) fputs($plik,$dane[$i]."\r\n");
         flock($plik,LOCK_UN);
         fclose($plik);    
         info('Twój news został zapisany.','ok');
           }
         }

 } else
 {
   $_POST['autor']='';
   $_POST['tresc']='';
   $_POST['tytul']='';
   $_POST['zrodlo']='';
 }

?>
<h1>Dodaj nowy nius<hr /></h1>

<form action="index.php" method="POST">
 <input type="hidden" name="pokaz" value="aktualnosci_dodaj" />
 <table border="0">
 <tr><td>Tytuł:</td><td><input size="30" type="text" name="tytul" value="<?php echo $_POST['tytul']; ?>" /></td></tr>
 <tr><td>Treść:</td><td><textarea cols="40" rows="5" name="tresc"><?php echo $_POST['tresc']; ?></textarea></td></tr>
 <tr><td>Źródło:</td><td><input size="30" type="text" name="zrodlo" value="<?php echo $_POST['zrodlo']; ?>" /></td></tr>
 <tr><td>Autor:</td><td><input size="30" type="text" name="autor" value="<?php echo $_POST['autor']; ?>" /></td></tr>
 <tr><td></td><td><input type="submit" value="Dodaj nowy nius" /></td></tr>
 </table>
</form>

aktualnosci
Kod:
<h1>Aktualności<hr /></h1>
<?

if(file_exists('wpisy.txt'))
                            readfile('wpisy.txt');
else print('Brak pliku z wpisami.');

?>
[ [url="index.php?pokaz=aktualnosci_dodaj"]Dodaj nowy nius[/url] ]

index
Kod:
<?php

 //dołączamy plik z funkcjami
 include("functions.php");
 
 //dozwolone skrypty PHP
 $dozwolone=array('aktualnosci','aktualnosci_dodaj');
 
 //pobieramy parametr pokaz
 if (isset($_GET['pokaz'])) $pokaz=$_GET['pokaz']; else $pokaz=$dozwolone[0];
 if (isset($_POST['pokaz'])) $pokaz=$_POST['pokaz'];
 //jak jest w nim znak kropki - wyświetlamy domyślny skrypt
 if (strpos($pokaz,'.')!==false) $pokaz=$dozwolone[0];
 
 //jak jest skrypt .PHP i jest to dozwolony PHP - zapamiętujemy pełną
 //nazwę pliku. Jak nie - tworzymy nazwę pliku z katalogu html i z rozszerzeniem htm
 if (file_exists($pokaz.'.php') && in_array($pokaz,$dozwolone)) $pokaz.='.php';
                            else $pokaz='html/'.$pokaz.'.htm';
 

 //dołączamy nagłówek
 include('top.php');
 
 //dołączamy wybrany skrypt lub wyświetlamy komunikat o błędzie
 if (file_exists($pokaz)) include($pokaz); else info('Nie znaleziono pliku.','blad');
 
 //dołączamy stopkę
 include('bottom.php');
?>

Logowanie
Kod:
<h1>Logowanie<hr /></h1>

<?php
 //jak jest pole $_POST['haslo'], tzn. że przesyłaliśmy
 //ten formularz i się nie zalogowaliśmy, czyli podaliśmy błędne hasło
 if (isset($_POST['haslo'])) info('Podano złe hasło!','blad');
?>
<form action="index.php" method="POST">
 <input type="hidden" name="pokaz" value="aktualnosci_dodaj" />
 <table border="0">
 <tr><td>Proszę podać hasło:</td><td><input size="30" type="password" name="haslo" value="" /></td></tr>
 <tr><td></td><td><input type="submit" value="Zaloguj" /></td></tr>
 </table>
</form>
 

B33RK4

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
598
chmody dla pliku textowego nastaw 777. I jeszcze tam gdzie masz zapis do pliku masz coś takiego :

$_POST[tekst] itd powinno być : $_POST[' ']
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Chyba brakuje mi tutaj session_start(); session_register(); itd
smile.gif
 

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Chyba brakuje mi tutaj session_start(); session_register(); itd[/b]
- nie używam wcale baz danych - poprostu mam zrobic mały zapis do pliku jednak wcześniej ma mnie to pytac o hasło

chmody dla pliku textowego nastaw 777. I jeszcze tam gdzie masz zapis do pliku masz coś takiego :

$_POST[tekst] itd powinno być : $_POST[' '][/b]

Dwa problemy - jak sie w Winshicie nadaje chmody i gdy podczas zmiany [tekst] na [' '] wywala mi błąd
 

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Żeby było śmieszniej jesli tak zrobie wywala mi coś takiego

Kod:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\usr\www\moje\aktualnosci_dodaj.php on line 36
kiedy ja mam coś takiego
Kod:
fputs($plik,"<tr><td>[b]$_POST['tytul'][/b]</td></tr>");

a taki mi wywala błąd
Kod:
Parse error: parse error in c:\usr\www\moje\aktualnosci_dodaj.php on line 36

gdy mam coś takiego
Kod:
fputs($plik,"<tr><td>[b]"$_POST['tytul']"[/b]</td></tr>");
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Jak dla mnie trochę komplikujesz ;] Ja napisałem na szybko coś takiego, pomijając całe filtrowanie, kontrolę itd:

Kod:
<?php
session_start();
session_register("login");

if($_POST["login"]!="" && $_POST["pass"]!="" && $_SESSION["login"]==""){
 if($_POST["login"]=="admin" && $_POST["pass"]=="haslo"){
  $_SESSION["login"]="tak";
 }else{
  die("NiE JeStEś AdMiNeM!!!");
 }//spr danych
}else{
echo '<form method="post" action="">';
echo '<input type="text" name="login">';
echo '
<input type="text" name="pass">';
echo '
<input type="submit"></form>';
}//login,pass

if($_SESSION["login"]=="tak"){
 if($_POST["title"]==""){
  echo '<fieldset><legend>Dodawanie newsów:</legend><form method="post" action="">';
  echo '
Tytuł newsa:<input type="text" name="title">';
  echo '
Autor:<input type="text" name="autor">';
  echo '
Źródło:<input type="text" name="zrodlo">';
  echo '
<textarea rows="5" cols="50" name="content">';
  echo 'Tutaj wpisz treść newsa';
  echo '</textarea>';
  echo '
<input type="submit"></fieldset></form>';
 }//nie wyświetla formu jeśli są posty
 if($_POST["title"]!="" && $_POST["autor"]!="" && $_POST["zrodlo"]!="" && $_POST["content"]!=""){
  //if(){
  // sprawdzenie długości...
  //}//popr długości
  $file_news=fopen('news.txt','a');
  $title=$_POST["title"];
  $autor=$_POST["autor"];
  $zrodlo=$_POST["zrodlo"];
  $content=$_POST["content"];
  if(fputs($file_news,"<fieldset><legend>".$title."&".$autor."&".$zrodlo."</legend>".$content."</fieldset>")){
   echo("News został dodany...");
  }else{
   die("ERROR - news nie został dodany...");
  }//fputs news.txt
 }//czy zmienne istnieją
}
?>





<?php
include("news.txt");
if($_SESSION["login"]=="tak" && $_GET["id"]!="logout"){
echo '[url="index.php?id=logout"]wyloguj[/url]';
}
if($_GET["id"]=="logout"){
 session_unregister("login");
 echo("
Wylogowany...");
}
?>
 

B33RK4

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
598
Kropeczki dodaj ! nie można łączyć dwóch różnych stringów. Czyli np jak masz :

fputs($plik,"<tr><td>$_POST['tresc']</td></tr>");
to między $_POST['']
stawiaj kropki L .$_POST[''].
w całości to wygląda tak :

fputs($plik,"<tr><td>.$_POST['tresc'].</td></tr>");

Wszędzie pozmieniaj wg. wzoru i nie będzie wywalało błędów.
 

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
No. Myslałem, że już sobie dam radę, a jednak gdzieś sie kopsłem. Otóż moim zamierzeniem jest stworzyc skrypt, który będzie tworzył stronę html o wybranej przezemnie nazwie a jednocześnie dodawał do niej link w panelu.
Kod:
<?
if($_SESSION['login'] == "tak")    //sprawdza sesje
{
        echo'<fieldset><legend>Dodaj podstronę</legend>';
        echo'<table>';
        echo'<tr><td>Nazwa strony:</td><td><input type="text" name="nazwa_podstrony"></td></tr>';
        echo'<tr><td>Nazwa pliku*:</td><td><input type="text" name="nazwa_pliku"></td></tr>';
        echo'<tr><td>Treść podstrony:</td><td><textarea rows="15" cols="80" name="tresc"></textarea></td></tr>';
        echo'<tr><td></td><td><input type="submit" value="Dodaj podstronę"></td></tr>';
        echo'<tr><td></td><td>*Uwaga. Nazwa pliku jest to nazwa pod jaką będzie znajdował się plik na serwerze. Ze względów bezpieczeństwa proszę o nie stosowanie polskich znaków, nazwy powinny być jednowyrazowe i pisane zawsze z małej litery.**</td></tr>';
        echo'<tr><td></td><td>**Jeśli nazwa musi mieć więcej niż jeden wyraz zamiast spacji proszę stosować "_" czyli tzw. twardą spację ("SHIFT" + "-").</td></tr>';
        echo'</table>';
        echo'</fieldset>';
    if($_POST['nazwa_podstrony']!="" && $_POST['nazwa_pliku']!="" && $_POST['tresc']!="") //sprawdza czy wszystko jest wypełnione
    {
        //upraszczam nazwy
        $strona=$_POST['nazwa_podstrony'];
        $plik=$_POST['nazwa_pliku'];
        $tresc=$_POST['tresc'];
        $file=html/menu.txt; //przypisanie pliku menu do zmiennej
        $file_new=fopen("$file","a"); //przypisanie trybu otwarcia do zmiennej
        $dane='» [url="index.php?pokaz='.$plik.'"]'.$strona."[/url]
";//przypisanie danych do wpisu do zmiennej
        flock($file_new,2);//blokada pliku
        fwrite($file_new,$dane);//zapis do pliku
        flock($file_new,3);//odblokowanie pliku
        fclose($file_new);//zamknięcie pliku
        
        $nowy=html/$plik.htm;   //określam miejsce i nazwe pliku
        $nowy_plik=fopen("$nowy","a");//przypisanie pliku i jego nazwy do zmiennej
        $tekst="<html><head><title>".$strona."</title></head><body>".$tresc."</body></html>"; //przypisanie danych do wpisu do pliku
        flock($nowy_plik,2);  //blokada pliku
        fwrite($nowy_plik,$tekst); //wprowadzenie tekstu
        flock($nowy_plik,3);    //odblokowanie pliku
        fclose($nowy_plik);     //zamknięcie pliku

    }
    else
    {
        echo 'Błąd. Nie udało się stworzyc podstrony';
    };

}
else  //odsyła gdy nie jesteś zalogowany
{
    echo'Nie jesteś zalogowany';
    include('login.php');
    return;
};
?>
 

Draqun

Użytkownik
Dołączył
Sierpień 27, 2007
Posty
67
Kurcze znowu mam problem. Tymrazem korzystam z gotowego kodu, gdyż własnego nie jestm w stanie napisać. Oto on
Kod:
<?

// Skrypt "Ankieta", wersja 1.0.0; 10 Maj 2005r.
// Autor Daniel Krysiak
// [email][email protected][/email]
// Skrypt został opisany na: [url]http://www.pajaczek.pl/modules.php?op=modload&name=News&file=article&sid=150[/url]
// Wprowadziłeś zmiany? Poinformuj mnie o tym na email.

function ankietaWstaw($ID, $tytul, $opcje)
         {

     $opcje = explode(', ', $opcje);

     echo '<div class="ankieta" id="ankieta_'.$ID.'">
    
        <div class="ankieta_naglowek">'.$tytul.'</div>';
            
                if($_POST['ankieta_pokaz'] != 'wyniki' && $_POST['ankieta_glosuj'] != 'Głusuj') {
                
            echo '<ul class="ankieta_opcje" style="list-style-type: none; padding: 0; margin: 0;">
            
            <form action="'.$_SERVER['PHP_SELF'].'" method="POST">';
            
                    for($i=0; $i<sizeof($opcje); $i++) echo '[*]<input type="radio" name="ankieta_opcje" value="'.$i.'" />'.$opcje[$i].'';
        
            echo '
                [*]
<input type="submit" name="ankieta_glosuj" value="Głusuj" />
        
            </form>';
        
        echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
                [*]<input type="submit" name="ankieta_pokaz" value="wyniki" />
            </form>[/list]';
        
        
                    
                } else {
                
                    if($_POST['ankieta_glosuj'] == 'Głusuj' && isset($_POST['ankieta_opcje'])) {            
                        
                        if(!isset($_SESSION['zaglosowano'.$ID])) {
                        
                            ankietaZapisz($ID, $_POST['ankieta_opcje']);
                            $_SESSION['zaglosowano'.$ID] = $ID;
                        }
                            
                    }
                        
                    if(file_exists('ankiety/ankieta_'.$ID.'.txt')) {
                        $plik = fopen('ankiety/ankieta_'.$ID.'.txt', 'r');
                        flock($plik, 1);
                        $dane = @fread($plik, filesize('ankiety/ankieta_'.$ID.'.txt'));
                        flock($plik, 3);
                        fclose($plik);
                    } else {
                        $plik = fopen('ankiety/ankieta_'.$ID.'.txt', 'w'); fclose($plik);
                        $dane = '';
                    }
    
                    $dane = explode(', ', $dane);
    
                    $wszystkichGlosow = sizeof($dane)-1;
    
                    for($i=0; $i<sizeof($opcje); $i++) {
                        $wyniki[$i] = glosy($i, $dane);
                    }
    
                    // na procenty:
    
                    $wyniki2 = $wyniki;
                    rsort($wyniki2);
                    $wynikMax = $wyniki2[0];
                    $wyniki2 = $wyniki;
                    
                    for($i=0; $i<sizeof($opcje); $i++) {
                        @$wyniki[$i] = $wyniki[$i] / $wynikMax * 100;
                        @$wyniki2[$i] = $wyniki2[$i] / $wszystkichGlosow * 100;
                    }
                    
                    echo '<ul class="ankieta_wyniki" style="list-style-type: none; padding: 0; margin: 0;">';
                    
                    for($i=0; $i<sizeof($opcje); $i++) echo '[*]'.$opcje[$i].'
<div style="width: '.number_format($wyniki[$i], 0).'%;">'.number_format($wyniki2[$i], 0).'%</div>';
                    echo '<li class="glosy">Głosy: '.$wszystkichGlosow.'
                    
                    [/list]';
                }
                
    echo "\n</div>";

}


function glosy($opcja, $dane) {
        
    $glosy = 0;
        
    for($i=0; $i<sizeof($dane)-1; $i++) {
            
        if($dane[$i] == $opcja) $glosy++;
            
    }
        
    return $glosy;
        
}

function ankietaZapisz($ID, $opcja) {
    
    $plik = fopen('ankiety/ankieta_'.$ID.'.txt', 'a');
    flock($plik, 2);
    fwrite($plik, $opcja.', ');
    flock($plik, 3);
    fclose($plik);
    
}


// Wszelkie prawa zastrzeżone Daniel Krysiak 2005, zezwalam na wykorzystywanie do celów nie komercyjnych.

?>
I wywala mi cos takiego.

Kod:
Fatal error: Cannot redeclare ankietawstaw() (previously declared in c:\usr\www\moje\ankieta.php:9) in c:\usr\www\moje\ankieta.php on line 9

O co u diabła chodzi? Nie wiem naprawde co tam jest źle.
 
Do góry Bottom