NaVarion
16.08.2008, 07:35:36
Hej, otóż piszę sobie skrypt, i nagle pokazuje mi się błąd:
405 Not Allowed
nginx/0.5.33
Jak mogę to naprawić?
behu
16.08.2008, 09:39:55
Najlepiej pokaż ten skrypt, bo tak ciężko cokolwiek doradzić.
Spróbuj wyczyścić cache i ciasteczka, i zobacz też czy na innej przeglądarce się to pokazuje.
Może w skrypcie mylisz metodę POST z GET, albo odwołujesz się do nieprawidłowego URI.
NaVarion
16.08.2008, 21:32:49
Wyczyściłem ciasteczka z tej strony, ale żeby mieć dostęp do tego trzeba się zalogować, więc po zalogowaniu się spróbowałem i to samo. W przeglądarce IE (na codzień korzystam z Firefox) to samo.
Skrypt jest troszkę długo, a propo jestem słaby trochę w php, może ktoś mi pomoże to zoptymilizować?

<?php
require("include/head.php");
if(!$_GET['action']) {
echo 'Witaj, tu możesz zmienić ustawienia profilu.<br><br> <table>
<form method="POST" action="konto?action=edytuj">
<tr>
<td>Imię:</td><td><input type="text" name="imie" value="'.$user['imie'].'"></td>
</tr>
<tr>
<td>Nazwisko:</td><td><input type="text" name="nazwisko" value="'.$user['nazwisko'].'"></td>
</tr>
<tr>
<td>Zawód: </td><td><input type="text" name="zawod" value="'.$user['zawod'].'"></td>
</tr>
<tr>
<td>Data urodzenia:</td>
<td>
<select name="d1">
';
$dz = '0';
while($dz < '31') {
$dz++;
if($user['d1'] == $dz) {
echo '<option selected=selected>'.$dz.'</option>'; } else {
echo '<option>'.$dz.'</option>'; }
}
</select>
<select name="d2">
';
$mi = '0';
while($mi < '12') {
$mi++;
if($user['d2'] == $mi) {
echo '<option selected=selected>'.$mi.'</option>'; } else {
echo '<option>'.$mi.'</option>'; }
}
</select>
<select name="d3">
';
$rok = '1909';
while($rok < '2003') {
$rok++;
if($user['d3'] == $rok) {
echo '<option selected=selected>'.$rok.'</option>'; } else {
echo '<option>'.$rok.'</option>'; }
}
</select>
</td>
</tr>
<tr>
<td>
Pokazuj adres email:
</td>
<td>
<input type="radio" name="email_pokaz" value="0"
';
if($user['pokaz_email'] == '1') {
echo 'checked="checked"'; }
> Tak <input type="radio" name="email_pokaz" value="1"
';
if($user['pokaz_email'] == '0') {
echo 'checked="checked"'; }
> Nie
</td>
</tr>
<tr>
<td>
O sobie:
</td>
<td><textarea name="o_sobie" cols="35" rows="10">'.$user['o_sobie'].'</textarea><br><span style="font-size: 9;">Porada: możesz używać znaków bbcode: [b], [i], [u] oraz [color]!</span></td>
</tr>
<tr>
<td><input type="submit" value="Edytuj"></td>
</tr>
</form>
</table>
';
} elseif($_GET['action'] == 'edytuj') {
$imie = $_POST['imie'];
$nazwisko = $_POST['nazwisko'];
$d1 = $_POST['d1'];
$d2 = $_POST['d2'];
$d3 = $_POST['d3'];
$zawod = $_POST['zawod'];
$o_sobie = $_POST['o_sobie'];
$pokaz_email = $_POST['pokaz_email'];
mysql_query("UPDATE users SET imie='$imie' WHERE id='$user[id]'"); mysql_query("UPDATE users SET nazwisko='$nazwisko' WHERE id='$user[id]'"); mysql_query("UPDATE users SET d1='$d1' WHERE id='$user[id]'"); mysql_query("UPDATE users SET d2='$d2' WHERE id='$user[id]'"); mysql_query("UPDATE users SET d3='$d3' WHERE id='$user[id]'"); mysql_query("UPDATE users SET zawod='$zawod' WHERE id='$user[id]'"); mysql_query("UPDATE users SET o_sobie='$o_sobie' WHERE id='$user[id]'"); mysql_query("UPDATE users SET pokaz_email='$pokaz_email' WHERE id='$user[id]'"); echo 'Zaktualizowano profil! (<a href="konto.php">Odswież</a>)'; }
require("include/foot.php");
?>
Maxik
16.08.2008, 23:17:10
Te 8 sql możesz zmieścić w jeden, np. UPDATE users SET `imie`='$imie', `nazwisko`='$nazwisko' WHERE id='$user[id]' Być może to było niedozwolone na Twoim hostingu.
NaVarion
17.08.2008, 10:30:58
Zmieniłem wszystkie zapytania na takie:
<?php
mysql_query("UPDATE users SET `imie`='$imie', `nazwisko`='$nazwisko', d1`='$d1', `d2`='$d2', `d3`='$d3', `zawod`='$zawod', `o_sobie`='$o_sobie', `pokaz_email`='$pokaz_email' WHERE id='$user[id]'"); ?>
i wciąż ten sam błąd, zresztą w innym pliku mam to samo (pare UPDATE'ów pod rząd) i działa.
Jeszcze jakieś propozycje?
Maxik
17.08.2008, 12:28:43
Ciężko jest mi tu znaleźć błąd, poszukaj może jakaś pętla w określonych warunkach jest nieskończona, wykonuje się w nieskończoność.
SirZooro
17.08.2008, 13:06:54
Te 8 update'ów rzeczywiście warto było zoptymalizować wkładając je w jedno zapytanie, ale to nie powinno tutaj być problemem (co najwyżej przekroczyłbyś limit zapytań do bazy danych, ale to się objawia błędem bazy a nie błędem HTTP).
Kod 405 oznacza "Method not allowed" (niedozwolona metoda), i pojawia się w przypadku gdy serwer odmoawia obsługi danego typu żądania. Wygląda na to że masz gdzieś zablokowane wysyłanie formularzy przez POST. Sprawdź plik .htaccess - tam to może być blokowane.
NaVarion
17.08.2008, 13:58:11
Robię testy na yoyo.pl, a tam nie ma dostępu do htaccess
Może lepiej jest robić testy u siebie na kompie, na np. webserv?
SirZooro
17.08.2008, 14:22:35
Robienie testów na swoim kompie ma tą zaletę że jest szybsze i wygodniejsze, ale czy w tym konkretnym przypadku pomoże zlokalizować problem - nie wiem, musisz sprawdzić. Osobiście spodziewałbym się że na lokalnym komputerze wszystko może działać jak należy.
behu
17.08.2008, 22:15:04
a w linijce nr 6:
<form method="POST" action="konto?action=edytuj">
nie powinno być tak?
<form method="POST" action="konto.php?action=edytuj">
myślę, że to stanowi tutaj problem
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.