ďťż

[PHP & mySQL] Skrypt działa na localhost a na jakimś hostingu już nie...

       

Podstrony


telcocafe

Witam, niedawno napisałem skrypt komentarzy w PHP składający się z 2 plików:

comment.php:
<? include('config.php'); include('sourcecode/comment.php'); # dodanie komentarza i autodświeżenie if($action=='add') { if(comm_correct()==10) { comm_add(); header("Location: comment.php?id=$_GET[id]"); exit; } } include('theme/index.php'); ?>

oraz plik drugi, sourcecode/comment.php :
<? # wyświetlenie formularza function comm_form() { echo' <form action="comment.php?id='.$_GET[id].'" method="POST"> <table border="0"> <tr><td class="text">Imię: </td><td> <input type="text" name="author"> </td></tr> <tr><td class="text">Tytuł: </td><td> <input type="text" name="title"> </td></tr> <tr><td class="text" valign="top">Tre¶ć: </td><td> <textarea name="text" rows="10" cols="35"></textarea> </td></tr> <tr><td> </td><td> <input type="submit" value="Dodaj"> <input type="hidden" name="action" value="add"> <input type="reset" name="Reset" value="Wyczy¶ć"> </td></tr> </table> </form> <a href="index.php"><b>Powrót</b></a> '; }
Pierwszy comment.php includuje config.php który łączy się z mySQLem. Podłącza on również plik function.php, który współpracuje z layoutem. Tam wykorzystywane są zmienne $error i $false. Co może być nie tak? Strona działa na localhost bezproblemowo (serwer Vertrigo) a na hostingu (yoyo.pl albo ovh.org) już nie działa. Odświeża sie po dodaniu, jakby header() był wykonywany, ale nie zostaje dodany rekord w mySQLu. W dodatku jeśli zostawiam pola puste i klikam w dodaj to nie wyswietla sie błąd (na localhoscie on jest) ze trzeba wypełnić wszystkie pola formularza. Co tu jest nie tak?

EDIT: wywaliłem cały kod, zostawiłem to co poprawić trzeba było ;)
Użytkownik Isaac from Vale edytował ten post 16 maj 2007, 14:22


Ekhm, kod PHP rozpocznij od

<?php

@dellas: Uruchom kod z <? na php 5+ :] Zapraszam do manuala, z <? można korzystać jeżeli jest to zawarte w konfiguracji, domyślnie jest ta opcja wyłączona.
Użytkownik m_uli edytował ten post 03 maj 2007, 16:56

Ekhm, kod PHP rozpocznij od

<?php


hahahahahahahhahaha a co to za różnica czy jest tak <? czy tak <?php. To nie ma żadnego znaczenia. Co do twojego problemu Isaac biorąc pod uwagę to że działa ci skrypt na kompie a na innych serwerach już nie może zależyć od wersji PHP. Domyślnie na ovh jest zainstalowana 5. W tym przypadku spróbuj zmienić rozszerzenie wszystkich plików gdzie tam konieczne na .php4. Może zadziała. Nic innego nie przychodzi mi do głowy. No zostaję jeszcze szczegółowe krok po kroku analizowanie kodu ale to ostatecznie.

Niestety nie pomogło ani <?php ani .php4. Ma ktoś inny pomysł?



Daj na sam początek skryptu

error_reporting(E_ALL);

może to rozjaśni sytuację.

@pbnan: fakt :)
Użytkownik m_uli edytował ten post 03 maj 2007, 18:24
Hmmm, raczej
error_reporting (E_ALL & E_NOTICE);
albo podobnie, nigdy nie umiem operować operatorami bitowymi :D W każdym razie bardzo pożądana jest też wiedza o notice'ach ;]

@m_uli: ekhm, moją ksywkę pisze się inaczej :P pbNan ;)
:)
Użytkownik pbnan edytował ten post 03 maj 2007, 18:41

@dellas: Uruchom kod z <? na php 5+ :] Zapraszam do manuala, z <? można korzystać jeżeli jest to zawarte w konfiguracji, domyślnie jest ta opcja wyłączona.

No fakt tyle że na ovh, yoyo i na każdym szanującym się serwerze są one włączone.

Wywaliło mi błędy, więc je poprawiłem i dalej nie działa. http://www.advancewars.yoyo.pl/smalec -> strony z tymi komentarzami, layout na stronę kolegi ^^, który znajduje się tu: http://onsen.ovh.org/index.php
Użytkownik Isaac from Vale edytował ten post 03 maj 2007, 18:21
Gdzie ustawiasz wartość $action? To ma być pobierane z _GETa, czy jak? Pokaż też kod po poprawkach.

sourcecode/comment.php:
<?php # sprawdzenie czy rekord istnieje function record_exist() { $result = mysql_query("SELECT * FROM news WHERE id = '" . $_GET['id'] . "'") or die ("Błędne zapytanie. Sprawdź nazwę tabeli."); if(mysql_num_rows($result)){ return 1; } else { function record_false(){ global $error, $false; $error = '1'; $false = 'Strona o podanym adresie nie istnieje!!'; } } } # wyświetlenie komentowanego newsa function comm_news() { $result = mysql_query("SELECT * FROM news WHERE id = '" . $_GET['id'] . "'") or die ("Błędne zapytanie. Sprawdź nazwę tabeli."); while($record = mysql_fetch_array($result)) print(' <div align="center"> <table border="0" width="100%"> <tr> <td class="title_news" width="100%" valign="top" bgcolor="#F69951" colspan="2"><b>'.$record["title"].' :: '.$record["date"].' </b></td> </tr> <tr> <td class="text" width="100%" valign="top" colspan="2">'.$record["text"].'</td> </tr> <tr> <td class="text" width="47%" valign="top"> <p align="left">Dodał: '.$record["author"].' </td> <td class="text" width="53%" valign="top"> </td> </tr> <tr> <td class="text" width="100%" valign="top" colspan="2">&nbsp;</td> </tr> </table> </div> '); echo "<hr>"; } # wyświetlenie tytułu function comm_title() { $result = mysql_query("SELECT * FROM news WHERE id = '" . $_GET['id'] . "'") or die ("Błędne zapytanie. Sprawdź nazwę tabeli."); while($record = mysql_fetch_array($result)) print ('<span class="text">Komentarze do <b>"'.$record['title'].'"</b>:</span><br> <br>'); } # wyświetlenie listy komentarzy function comm_list() { $result = mysql_query("SELECT * FROM comments WHERE id_news = '" . $_GET['id'] . "' ORDER BY date") or die ("Błędne zapytanie. Sprawdź nazwę tabeli."); $ile = mysql_num_rows($result); if($ile==0) { echo "<span class='text'><b>Jeszcze nikt tego nie komentował, możesz być pierwszy!</b></span><br><br>"; } while($record = mysql_fetch_array($result)){ $title = $record['title']; $date = $record['date']; $text = $record['text']; $author = $record['author']; $text = str_replace("<", '', $text); $text = str_replace(">", '', $text); $title = str_replace("<", '', $title); $title = str_replace(">", '', $title); $author = str_replace("<", '', $author); $author = str_replace(">", '', $author); # emotikony $change[':)'] = '<img src="images/emots/usmiech.gif">'; $change[';)'] = '<img src="images/emots/usmiech_mruga.gif">'; $change[':('] = '<img src="images/emots/smutny.gif">'; $change[';('] = '<img src="images/emots/smutny.gif">'; $change[':D'] = '<img src="images/emots/zaciesz.gif">'; $change[';D'] = '<img src="images/emots/zaciesz.gif">'; $change[':P'] = '<img src="images/emots/jezyk.gif">'; $change[':/'] = '<img src="images/emots/krzywy.gif">'; $change[';/'] = '<img src="images/emots/krzywy.gif">'; $change['^^'] = '<img src="images/emots/happy.gif">'; $change['^_^'] = '<img src="images/emots/happy.gif">'; $change[':*'] = '<img src="images/emots/kiss.gif">'; $change[';*'] = '<img src="images/emots/kiss.gif">'; $change[':o'] = '<img src="images/emots/szok.gif">'; $change[';o'] = '<img src="images/emots/szok.gif">'; $change[':o'] = '<img src="images/emots/szok.gif">'; $change['-_-'] = '<img src="images/emots/sleep.gif">'; $change['oO'] = '<img src="images/emots/blink.gif">'; $change['lol'] = '<img src="images/emots/lol.gif">'; $change['LOL'] = '<img src="images/emots/lol.gif">'; $change['Lol'] = '<img src="images/emots/lol.gif">'; $change['rotfl'] = '<img src="images/emots/roll.gif">'; $change['Rotfl'] = '<img src="images/emots/roll.gif">'; $text = (string)$text; $text = str_replace(array_keys($change), array_values($change), $text); echo(' <div align="center"> <table border="0" width="100%"> <tr> <td class="title" width="100%" valign="top"><b>'.$title.' - </b>'.$date.'</td> </tr> <tr> <td class="text" width="100%" valign="top">'.$text.'</td> </tr> <tr> <td class="text" width="100%" valign="top"> <p align="right"><i>'.$author.'</i></td> </tr> <tr> <td class="" width="100%" valign="top">&nbsp;</td> </tr> </table> </div> '); } } # wyświetlenie formularza function comm_form() { global $author, $title, $text, $action; echo' <form action="comment.php?id='.$_GET['id'].'" method="POST"> <table border="0"> <tr><td class="text">Imię: </td><td> <input type="text" name="author"> </td></tr> <tr><td class="text">Tytuł: </td><td> <input type="text" name="title"> </td></tr> <tr><td class="text" valign="top">Tre¶ć: </td><td> <textarea name="text" rows="10" cols="35"></textarea> </td></tr> <tr><td> </td><td> <input type="submit" value="Dodaj"> <input type="hidden" name="action" value="add"> <input type="reset" name="Reset" value="Wyczy¶ć"> </td></tr> </table> </form> <a href="index.php"><b>Powrót</b></a> '; } # sprawdzenie poprawności danych function comm_correct() { global $error, $false; $true = 0; if($_POST["title"]=='') $true++; if($_POST["text"]=='') $true++; if($_POST["author"]=='') $true++; if($true==0) return 10; if($true<>0) $error = "1"; $false = "Musisz wypełnić wszystkie pola formularza!"; } # dodanie komentarza function comm_add() { $date = date("Y-m-d, G:i:s"); // czas dodania komentarza mysql_query('INSERT INTO `comments` (`date`, `title`, `text`, `id_news`, `author`) VALUES (\''.$date.'\', \''.$_POST["title"].'\', \''.$_POST["text"].'\', \''.$_GET["id"].'\', \''.$_POST["author"].'\');'); # aktualizacja ilosci komentarzy $result = mysql_query("SELECT * FROM news WHERE id = '" . $_GET['id'] . "'") or die ("Błędne zapytanie. Sprawdź nazwę tabeli."); while($record = mysql_fetch_array($result)) mysql_query('UPDATE news SET comments="'.++$record['comments'].'" WHERE id = "' . $_GET['id'] .'" '); } ?>
Błędy były typu $_GET[zmienna] zamiast $_GET['zmienna']. $action jest pobierane z formularza.
<input type="submit" value="Dodaj"> <input type="hidden" name="action" value="add"> <input type="reset" name="Reset" value="Wyczy¶ć">

Zatem czyż nie ma być $_POST['action']? I w ogóle - przecież dane przenosisz głównie przez $_POST (wyjątkiem jest $_GET['id']). Chyba z tym jest problem.

EDIT:

Ok, działa! Nie potwierdziłem nadpisania pliku w FileZilli bo nie zauważyłem. Dzieki, pbnan. Tylko nie rozumiem dlaczego na moim serwerze wszystko działa, nawet jak ktoś to otwiera i komentuje a na hostingu nie działa xD

Wystarczyło zmienić w comment.php zmienną $action na $_POST['action']:
<? include('config.php'); include('sourcecode/comment.php'); # dodanie komentarza i autodświeżenie if($_POST['action']=='add') { // wcześniej tu było $action(błąd) if(comm_correct()==10) { comm_add(); header("Location: comment.php?id=$_GET[id]"); exit; }
Użytkownik Isaac from Vale edytował ten post 03 maj 2007, 20:12
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.