Wykorzystanie JS w Php - formularze

0

Witam,

Jest to mój pierwszy post na tym forum. Jednak już nie raz skorzystałem z Waszej pomocy czytając posty dot. PHP, JS, MySQL i inne wykorzystywane przy budowie www.

Mój problem polega na tym, że wykładowca dał mi zadanie na zaliczenie przedmiotu, które polegało na zbudowaniu strony która wykorzystuje tzw. "system newsów + panel logowania". Zbudowałem owy projekt, jednak przyczepił się do tego, że nie ma walidacji formularzy przy dodawaniu nowych news'ów. Głównie chodziło mu o to, że na dotychczasowej stronie można do bazy danych wysłać pusty news (bez tytułu i bez treści). Moim zdaniem jest teraz wykorzystać (koniecznie) JS do sprawdzenia czy wszystkie pola zostały wypełnione. Starałem się przebudować troszkę to co mam, ale niestety mi nie wychodzi... ;/

Proszę o pomoc.

<?php require("check.php"); 

?>
<table border="1" width="490" align="center">
        <tr>
                <td align="center"><b>PANEL ADMINISTRATORA - NEWSY</b></td>
        </tr>
        <tr>
                <td align="center">
                        <a href="pa2.php">Panel newsów</a> |
                        <a href="pa2.php?newsy=pokaz">Pokaz newsy</a> | 
                        <a href="pa2.php?newsy=dodaj">Dodaj newsa</a></td>
        </tr>
        <tr>
                <td align="center">
                

<?php

require("connect.php");
echo "<script type='text/javascript'>
		function sprawdz(f){
  		if(f.elements['tytuł'].value == '') ||(f.elements['tresc'].value == ''){
    	 alert('Uzupelnij wszystkie pola formularza!');
    	f.elements['nazwapola'].focus();
    	return false;
 		 }
 	 return true;
	</script>";
if(isset($_GET['newsy']) && $_GET['newsy']=='pokaz')
{
        echo '<b>NEWSY W TWOIM SERWISIE:</b><br  />';
        $link=mysql_query('SELECT * FROM news ORDER BY id desc');
        while($wiersz=mysql_fetch_array($link))
        {
        echo '<b>'.$wiersz['tytul'].'</b>';
        echo ' - ';
        echo $wiersz['data'];
        echo ' - ';
        echo '<a href="pa2.php?newsy=edytuj&amp;id='.$wiersz['id'].'">Edytuj</a>';
        echo ' - ';
        echo '<a href="pa2.php?newsy=usun&amp;id='.$wiersz['id'].'">Usun</a>';
        echo "<br />\n";
        }
        
}

elseif(isset($_GET['newsy']) && $_GET['newsy']=='dodaj')
{
        echo '<b>DODAJ NOWEGO NEWSA</b><br />';
        echo '<form method="post" onsubmit="return sprawdz(this)" action="pa2.php?newsy=dopisz">
                <table border="0" width="100%">
                        <tr>
                                <td>Tytul:</td>
                                <td><input type="text" name="tytul" size="64" /></td>
                        </tr>
                        <tr>
                        		<td>Kategoria:</td>
                                <td><select name="kategoria">
                                <option value="Download">Download</option> 
                                <option value="Grafika">Grafika</option> 
                                <option value="Skrypty">Skrypty</option> 
                                <option value="Strona">Strona</option> 
                                <option value="Bezpieczenstwo">Bezpieczenstwo</option> 
                                </select></td>
						</tr>
                        <tr>
                                <td>Tresc: </td>
                                <td><textarea rows="5" name="tresc" cols="42"></textarea></td>
                        </tr>
                        <tr>
                                <td> </td>
                                <td><input type="submit" value="DODAJ" /></td>
                        </tr>
                </table>
        </form>';
}

elseif(isset($_GET['newsy']) && $_GET['newsy']=='edytuj' && isset($_GET['id']))
{
        $id=$_GET['id'];
        $link=mysql_query("SELECT * FROM news WHERE id='$id'");
        $wiersz=mysql_fetch_array($link);

        echo '<b>EDYTUJ NEWSA</b><br>';
        echo '<form method="POST" action="pa2.php?newsy=wyedytuj&id='.$wiersz['id'].'">
                <table border="0" width="100%">
                        <tr>
                                <td>Tytul:</td>
                                <td><input type="text" name="tytul" size="64" value="'.$wiersz['tytul'].'"></td>
                        </tr>
						<tr>
                        		<td>Kategoria:</td>
								<td><select name="kategoria">
								<option selected="selected">'.$wiersz['kategoria'].'</option>
                                <option>Download</option> 
                                <option>Grafika</option> 
                                <option>Skrypty</option> 
                                <option>Strona</option> 
                                <option>Bezpieczenstwo</option> 
                                </select></td>
						</tr>
                        <tr>
                                <td>Tresc: </td>
                                <td><textarea rows="5" name="tresc" cols="42">'.$wiersz['tresc'].'</textarea></td>
                        </tr>
                        <tr>
                                <td> </td>
                                <td><input type="submit" value="EDYTUJ"></td>
                        </tr>
                </table>
        </form>';
}

elseif(isset($_GET['newsy']) && $_GET['newsy']=='dopisz')
{
        $tytul=$_POST['tytul'];
        $tresc=$_POST['tresc'];
		$kategoria=$_POST['kategoria'];
        $data=date('d.m.Y, H:i');

        mysql_query("INSERT INTO news VALUES(0,'$tytul','$kategoria','$tresc','$data')");
        echo 'Pomyslnie dodalem newsa o tytule: <b>'.$tytul.'</b> w kategorii: <b>'.$kategoria.'</b> i o tresci: <b>'.$tresc.'</b>';

}

elseif(isset($_GET['newsy']) && $_GET['newsy']=='wyedytuj' && isset($_GET['id']))
{
        $tytul=$_POST['tytul'];
        $tresc=$_POST['tresc'];
		$kategoria=$_POST['kategoria'];
        $id=$_GET['id'];

        mysql_query("UPDATE news SET tytul='$tytul' kategoria='$kategoria' tresc='$tresc' WHERE id='$id'");
        echo 'Pomyslnie wyedytowalem newsa! <br> Jego nowy tytul to: <b>'.$tytul.'</b>, kategoria: <b>'.$kategoria.'</b>, a tresc: <b>'.$tresc.'</b>';

}

elseif(isset($_GET['newsy']) && $_GET['newsy']=='usun' && isset($_GET['id']))
{
        $id=$_GET['id'];

        mysql_query("DELETE FROM news WHERE id='$id'");
        echo 'Pomyslnie usunalem newsa numer '.$id.'!';

}
else echo 'Witaj w panelu administracyjnym newsami...<br />
W górnej czesci znajduje sie menu, które pozwoli ci zarzadzac newsami w twoim serwise.';
?>

</td>
        </tr>	
</table>


		</div>
</div>


	<div id="footer">
		<div id="footer-valid">
			<a href="http://validator.w3.org/check/referer">xhtml</a> / <a href="http://www.ginger-ninja.net/">ginger ninja!</a>
		</div>
	</div>

</div>

</body>
</html>
<?php mysql_close(); ?>  
0

Po pierwsze: nie rób na tabelkach i nie mieszaj html z php.
Po drugie: może się przyczepić do walidacji js - zrób walidację po stronie serwera. Zadeklaruj sobie np. tablicę z komunikatami, w przypadku, gdy wykryjesz, że nie został przesłany tekst dodaj do tej tablicy komunikat o błędzie i w jakimś miejscu na stronie wyświetlaj te komunikaty - nie musisz oczywiście działać na tablicy, ale takie podejście umożliwia Ci w prosty sposób wyświetlenie dowolnej ilości komunikatów.

0

hmm.. chodzi bardziej o takie proste zatrzymanie i wyświetlenie komunikatu "Wypełnij wszystkie pola". Dzięki temu do bazy danych nie trafiały by puste pola.
Chciałem po stronie serwera, jednak mam to niby zrobić jakoś w JavaScript. A jak ? Nie wiem...

Ale bardzo dziękuję za wskazane błędy i uwagi.

Dodatkowo problem polega na tym, że do 23:59 muszę to wysłać. Od tego zależy czy będzie tzw. "wrzesien" (poprawka), czy nie...

help.

0

Walidacja MUSI być po stronie serwera, jeżeli użytkownik wyłączy JS albo zacznie craftować requesty to nadal w bazie będą się pojawiać puste rekordy. Przed SQL-Injection itd. też zabezpieczasz się po stronie klienta?

1

No, ale jeśli zrobisz walidację po stronie serwera, to też do bazy nie trafią puste pola. Niżej masz gotowy kod, który nie powinien generować żadnych błędów (można nawet zrobić odrobinę krócej, ale to powinno Ci wystarczyć).

$content = isset($_POST['content'])?$_POST['content']:'';
$title = isset($_POST['title'])?$_POST['title']:'';
if ($content != '' && $title != '')
{
  //dodajemy newsa do bazy
}
else
{
  //brak danych - trzeba chyba wyświetlić stosowny komunikat
}
0

Okay ;) Dziekuję za pomoc, tylko własnie cały sęk w tym, że miałem do tego wykorzystać JaveScript...

P.S.

Jakby ktoś wpadł na pomysł z wykorzystaniem tutaj JS to prosiłbym o pomoc w postaci kodu ;)

Pozdrawiam

0

Może...

<form method="post" onsubmit="return sprawdz(this)" action="pa2.php?newsy=dopisz">

...usuń stąd "return"?

Ale tak, jak wyżej: jeżeli ktoś wyłączy JS, to biada, dlatego najlepiej zastosuj sprawdzanie po stronie serwera i klienta.

0

Ja rozumiem, że ten sposób, w który muszę to zrobić jest ryzykowny. Jednak jak wiadomo na studiach nie zawsze wszystko jest powiązane z praktyką i realiami. Takie dostałem polecenie od wykładowcy, tez wydaje mi się bezsensownym i nieco odsuniętym od rzeczywistości, ale nie pozostaje mi nic innego jak się do tego dostosować i wykonać to co mi zlecił. W ogole najpierw rozmawialem z nim i mowiłem ze to nie ma sensu. Zgodził sie, po czym jak przyszlo do oceny pracy to dostalem ndst, bo nie było JS o.O Teraz mam nanieść poprawki w postaci skryptu JS, który sprawdza czy wszystkie pola są wypełnione i tyle.

Cały czas kombinuje, ale coś cięzko mi to idzie...

0

Okay, udało mi się to poprzez rozdzielenie pliku php.

Oddzieliłem całe "dodaj" jako oddzielny plik html, który przy submit'cie przechodzi do pa2.php?newsy=dopisz ;)
Dzięki temu bez żadnego problemu udało mi się sprawdzić formularz po stronie klienta (JavaScript).

Dziękuję za pomoc ;) Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1