Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CMS na localhost'cie działa a na serwerze już nie
Forum PHP.pl > Forum > Serwery WWW
siwy909
Witam !

Tak jak w temacie Kupiłem książkę "jak stworzyć własny CMS" postępowałem według instrukcji (robiłem na local'u) i wszystko fajnie chodzi.
Teraz jak chce wrzucić cms'a na serwer teoretycznie wszystko gra, jednak gdy wchodzę w panel admina nie mogę zmieniać jego zawartości (dodawać artykułów itd. ) Nie wyskakuje żaden błąd, totalnie nic się nie dzieje. (na localhost wszystko jest dobrze)

Jeżeli zmieniam ustawienia w phpmyadmin'ie zmiany pojawiają sie na stronie i w panelu. Wydaje mi się, że zawodzi funkcja POST . Tylko nie wiem co z tym zrobić ;/

Testowałem to na kilku serwerach i cały czas to samo.

Będę wdzięczny za pomoc.
kajzur
To może pokażesz jakiś kod?
siwy909
troche kodu jest jak to cms, dam kawałek z pliku z ustawieniami :

Cytat
<?php

echo '<h1>'.$JezykAdmin['opcje_ustawienia'].'</h1>';

if($zrob == 'aktualizuj')
{

if(
empty($_POST['dt']) ||
empty($_POST['dl']) ||
empty($_POST['szabn']) ||
empty($_POST['jezn']) ||
empty($_POST['blip']) ||
empty($_POST['nazwa']) ||
empty($_POST['rejlo']) ||
empty($_POST['amail']) ||
empty($_POST['wnazw']) ||
empty($_POST['wurl']) ||
empty($_POST['str']) ||
empty($_POST['mk']) ||
empty($_POST['md']))
{
BladAdmin($JezykAdmin['opcje_pozostaly_puste_pola']);
}
else
{

if($BazaDanych == 'mysql')
{
$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['dt']).'"
WHERE konfig_nazwa = "dt"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['dl']).'"
WHERE konfig_nazwa = "dl"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['szabn']).'"
WHERE konfig_nazwa = "szabn"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['jezn']).'"
WHERE konfig_nazwa = "jezn"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['blip']).'"
WHERE konfig_nazwa = "blip"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['nazwa']).'"
WHERE konfig_nazwa = "nazwa"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['rejlo']).'"
WHERE konfig_nazwa = "rejlo"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['amail']).'"
WHERE konfig_nazwa = "amail"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['wnazw']).'"
WHERE konfig_nazwa = "wnazw"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['wurl']).'"
WHERE konfig_nazwa = "wurl"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['str']).'"
WHERE konfig_nazwa = "str"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['mk']).'"
WHERE konfig_nazwa = "mk"
';

$ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
SET konfig_wartosc = "'.addslashes($_POST['md']).'"
WHERE konfig_nazwa = "md"
';
}

for($i=0;$i<count($ZapytanieAktualizacja);$i++)
{
if(!WykonajZapytanie($ZapytanieAktualizacja[$i]))
{
PokazBlad('Bł±d w zapytaniu',__FILE__,__LINE__,$ZapytanieAktualizacja[$i]);
}
}

if($BazaDanych == 'mysql')
{
$ZapytanieKonfiguracja = 'SELECT konfig_nazwa,konfig_wartosc FROM '.$PrefixTabelek.'konfig';
}
blooregard
Cytat
Kupiłem książkę "jak stworzyć własny CMS"

To z tej książki ten kod?
Świetny zakup, nie ma co:

  1. <?php
  2. $ZapytanieAktualizacja[] = 'UPDATE '.$PrefixTabelek.'konfig
  3. SET konfig_wartosc = "'.addslashes($_POST['dt'])."
  4. WHERE konfig_nazwa = "dt"
  5. ?>

- powtarza się 13 razy, a mozna to zapisać raz jako funkcję i tylko przekazywać odpowiednie parametry dla nazwy tabeli i dla kolumny konfig_nazwa.

  1. <?php
  2. if(
  3. empty($_POST['dt']) ||
  4. empty($_POST['dl']) ||
  5. empty($_POST['szabn']) ||
  6. empty($_POST['jezn']) ||
  7. empty($_POST['blip']) ||
  8. empty($_POST['nazwa']) ||
  9. empty($_POST['rejlo']) ||
  10. empty($_POST['amail']) ||
  11. empty($_POST['wnazw']) ||
  12. empty($_POST['wurl']) ||
  13. empty($_POST['str']) ||
  14. empty($_POST['mk']) ||
  15. empty($_POST['md']))
  16. {
  17. BladAdmin($JezykAdmin['opcje_pozostaly_puste_pola']);
  18. }
  19. else
  20. {
  21. ?>

- a to już jest mistrzostwo świata...
siwy909
tak to kod z książki, jestem dopiero początkujący więc z czasem będę optymalizował kod (jak już się naucze ). Na początek chce uruchomić tego cms'a na serwerze ;/
blooregard
To sobie niezbyt dobrą książkę wybrałeś do nauki. Jest tam jakiś rozdział o funkcjach?

Cytat
Wydaje mi się, że zawodzi funkcja POST

Nie ma czegoś takiego, jak f-cja POST. POST to część specyfikacji protokołu HTTP określająca sposób przesyłania danych.
Ale idziesz dobrym tropem. To, że nic nie pojawia się w bazie, dowodzi, że zapytania sa niepoprawne.
To, że nic nie będzie w zmiennych z POST, nie wpłynie na logikę zapytania, po prostu pole zostanie zastapione pustym stringiem, czyli niczym.

Za to zapytanie na pewno nie wykona się, gdy zmienna $PrefixTabelek będzie pusta.

Więc sprawdź wartość tej zmiennej, dodając np.
  1. <?php
  2. echo $PrefixTabelek;
  3. ?>
przed całym tym zajefajnym if-em
siwy909
Zrobiłem tak jak mówiłeś i otrzymałem :

Cytat
cmslm_


Jest to przedrostek tabeli sql.

Dla mnie jest dziwne, że na localhost'cie działa a na wirtualnym nie ;/
blooregard
A wywal te addslashes()
siwy909
nie widać żadnych zmian, jak nie działało tak nie działa. Chodzi o to, że strona ogólnie funkcjonuje nie działa tylko panel admina. Kontakt z bazą jest. Jak wprowadzam ręcznie przez phpmyadmin'a to działa.
askone
Witam

Nie wiem czy to powód do dumy, ale także jestem posiadaczem tej książki smile.gif Jedno wiem na 100% - kod cms'a omawianego w tej książce to prawdziwa masakra. Autor skupia się na omawianiu prawie każdego wiersza kodu, a brakuje czegoś tak oczywistego jak ogólny opis tego cms'a. Nie znalazłem rozdziału, w którym przedstawione byłyby zależności pomiędzy modułami, ogólne zasady tworzenia takich systemów - słowem pozostaje żmudna analiza kodu, albo książka nadaje się na podpałkę...

Pozdrawiam
baranek77
Ten cms używa register globals, miałem ten sam problem , pozamieniaj zmienne globalne.

np w tym fragmencie $zrob na $_GET['zrob'] itd . Możesz jeszcze męczyć admina na serwerze żeby włączył register globals (nie polecam).
siwy909
czyli powinienem zmieniać wszystkie wartości ? Np. tą : $BazaDanych na : $_GET['BazaDanych'] questionmark.gif Wszędzie gdzie jest
Cytat
if($'....................')
{
?
baranek77
nie wszystkie , tam gdzie masz
  1. <?php
  2. if ($zrob == 'costam')
  3. ?>


zamień na
  1. <?php
  2. if($_GET['zrob'] == 'costam')
  3. ?>


musisz pozamieniać zmienne GET, czyli te co masz z adresu przeglądarki np.

http://localhost/cms/?zrob=dodaj&id=1

Wszystkie zmienne pobierane z adresu musisz wyciągać z tablicy superglobalnej czyli właśnie $_GET['zrob'] zamiast $zrob

Mam nadzieje, że teraz będziesz wiedział o co chodzi.
siwy909
ok dzięki, zaraz sprawdzę , czyli resztę zostawić questionmark.gif
baranek77
tak pozamieniaj tylko zmienne GET
siwy909
wszędzie gdzie bylo if ($zrob zmieniłem na if if($_GET['zrob'] i nic nie pomogło . Wszystko jest tak samo.

A masz racje na 100% jest to wina "register globals" na localhost'cie wyłączylem i też nie działa.


  1. <?php
  2. function WykonajZapytanie($ZapytanieDoBazy)
  3. {
  4.    global $WynikZapytania;
  5.  
  6.    $WynikZapytania = mysql_query($ZapytanieDoBazy);
  7.  
  8.    if($WynikZapytania)
  9.    {
  10.        return TRUE;
  11.    }
  12.    else
  13.    {
  14.        return FALSE;
  15.    }
  16. ?>


W tym kodzie (fragment) pojawia się "global", nie wiem czy to nie przez to .
baranek77
nie to nie przez to chodzi tylko o zmienne get, ja miałem ten problem i zamiana zmiennych globalnych na $_GET pomogło
siwy909
a zmieniałeś tylko if ($zrob questionmark.gif Ja zmieniałem to w każdym pliku w którym to było .

A link po wejściu w jakieś ustawienia w panelu wygląda tak : http://www.localhost/cms/administrator.php?zarzadzaj=opcje
baranek77
czyli to zarządzaj też trzeba zmienić poczytaj o zmiennych GET musisz je wszystkie pozmieniać
siwy909
Znalazłem taki fragment kodu :


  1. <?php
  2. if(empty($_GET['zarzadzaj']))
  3.        {
  4.            $zarzadzaj = $_POST['zarzadzaj'];
  5.            
  6.        }
  7.        
  8. else
  9.        {
  10.             $zarzadzaj = $_GET['zarzadzaj'];
  11.        }
  12.  
  13.  
  14.        if(empty($_GET['modul']))
  15.        {
  16.            $modul = $_POST['modul'];
  17.        }
  18.        else
  19.        {
  20.            $modul = $_GET['modul'];
  21. }
  22.  
  23.        ?>



Odpowiada on za zmienne get , i za bardzo nie wiem czy to nie jest przyczyna problemu, ale nie wiem jak się za to zabrać ;/


Udało mi się wszystko zrobić (jak na razie). Tak jak pisał baranek77 , trzeba było zmienić zmienną GET .

W katalogu administracyjnym pozmieniałem wszystkie _post na _get .

Teraz moje pytanie : czy jest to bezpieczne ?
Riklaunim
Jeżeli uczysz się PHP to nie warto robić tego na błędnym, przestarzałym obecnie kodzie. Staraj korzystać z aktualnych źródeł, a nie starych książek (jeżeli opisuje PHP5 to powinno być OK, jeżeli PHP4 - odrzuć dla spokoju) i to nie takich uczących kopiuj wklej "gotowy wypasiony CMS", a raczej takie przedstawiające drobne fragmenty kodu wykonujące określone czynności.
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.