Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[PHP] Znaczki '<' i '>'

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[PHP] Znaczki '<' i '>'

Post 17.06.2004, 23:12:10

Mam pytanie w jaki sposób w formularzu (w tekście wprowadzanym przez jakiegoś tam użytkownika) zrobić coś takiego, że gdy wstawi gdzieś znaczek "<" lub ">" to w tym co dojdzie do mnie nie będzie tych znaczków tylko np. # ?? - Chodzi głownie o to żeby gdy użyją tych "niedozwolonych" znaczków to przy wysyłaniu skrypt to je podmieni na tego # hasz'a. Mam nadzieję że dobrze to napisałem. Pozdrawiam.
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 17.06.2004, 23:15:47

str_replace
a może zamiast # lepsze będą & + lt; i & + gt; (pisane łącznie z &)?
- Taeril -
który | nie ma | poza tym | w ogóle | chcę | stąd | użytkownik | próba | używa |
artykuł | pomóc | korzystać | mój | wziąć | nie wiem | mógł | odnaleźć | sjp
Avatar użytkownikaTaeril
Przyjaciel WH

Posty: 913
Dołączył(a): 07.05.2004
Lokalizacja: Warszawa

Post 19.06.2004, 10:50:15

Może mi to ktoś jaśniej napisać bo nie bardzo umię to zrozumieć - jak już zauważyliście jestem słaby z php (bo bawię się php od niedawana).
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 11:11:09

htmlspecialchars()
Kod: Zaznacz cały
$variable = htmlspecialchars($variable);

lub sposób podany przez Taerila (dla każdego znaku musisz powtórzyć ten kod):
Kod: Zaznacz cały
$varaible = str_replace('&lt;', '<', $variable);
A ja Będę Twym aniołem, Twą radoscią, smutkiem, żalem. Będę gwiazdą na Twym niebie, będę zawsze obok Ciebie! <- dla Ciebie Ayer :*
Fall in love, Aure :wink:
Avatar użytkownikaAure
Posty: 121
Dołączył(a): 27.12.2003
Lokalizacja: Bydgoszcz

Post 19.06.2004, 11:17:14

1. gdzie mam to wkleić w pliku formularza??
2. czy wystarczy to poprostu wkeić czy coś trzeba zmieniać ??
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 11:46:34

ad1. Nie w pliku w którym przetwarzasz dane z formularza (czyli tym do którego wysyłasz zmeinne) np.
Kod: Zaznacz cały
<?php
$_POST['pole'] = htmlspecialchars($_POST['pole']);
?>

ad2. Wystarczy wkleić (i oczywiście zamienić nazwy zmiennych na swoje).
Avatar użytkownikaMavestinus
Paweł Nowak

Out of time
Out of time

Posty: 2384
Dołączył(a): 09.01.2003
Lokalizacja: Katowice

Post 19.06.2004, 12:02:03

Gdzie ja to mam wkleić? - tam gdzie się znajduje ten formularz?? - bo jak tam wklejam to i tak mi się te znaczki wyświetlają jak to do mnie dochodzi.
Gdyby ktoś miał pytania to muszę dodać, że najpierw to jest wysyłane do bazy danch mysql a później wyświetlane na stronce.
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 13:03:11

Nie nie wklejasz tego tam gdzie jest formularz :).
Taki mały przykład:
formularz.html
Kod: Zaznacz cały
<form action="przetworz.php" method="post">
Wpisz tutaj kod: <br>
<input type="text" name="kod"><br>
<input type="submit" value="Wyślij!">
</form>
przetworz.php
Kod: Zaznacz cały
<?php
$_POST['kod'] = htmlspecialchars($_POST['kod']);
echo $_POST['kod'];
?>
I teraz wpisując jakiś kod do formularza zostanie on wyświetlony na stronie przetworz.php jako tekst :)
Avatar użytkownikaMavestinus
Paweł Nowak

Out of time
Out of time

Posty: 2384
Dołączył(a): 09.01.2003
Lokalizacja: Katowice

Post 19.06.2004, 13:46:28

Czyli czekaj jak mam kod (cały czas mi chodzi o te pozdro):
Kod: Zaznacz cały
<? ob_start();
require("config.php");

$ip_table = file('ip.dat.');
foreach($ip_table AS $ip_denied) {
if($ip_denied==$_SERVER['REMOTE_ADDR']) die('Nie masz dostępu. Twój numer IP został zablokowany. Jeśli jest to przypadek zgłoś to nam.'); }

$plik = fopen("czas.txt","r");
$czas = fgets($plik,100);
fclose($plik);

$form = "<form action=\"$PHP_SELF\" method=\"post\">";
$form.= "Nick: <input type=\"text\" name=\"name\" ";
$form.= "size=\"10\" value=\"$name\"> <br>";
$form.= "Treść Pozdrowienia:<br>";
$form.= "<textarea name=\"comments\" cols=\"45\" ";
$form.= "rows=\"4\">$comments</textarea> <br>";
$form.= "<input type=\"submit\" name=\"submit\" ";
$form.= "value=\"Wyślij\"> </form>";

if(!$_POST['submit'])
{
  $msg = $form;

}
else
{
  if($_COOKIE['wyslal']=='1')
  {
    $msg='Kolejne pozdrowienia będziesz mógł wysłać trochę później. Spróbuj za jakiś czas.';
  }
  else
  {
    if ( !$name or !$comments)
    {
      $msg = 'nie wypelniłeś wszystkich pól' . $form;
    }
    else
    {
      // polaczenie z baza danych
      $conn = @mysql_connect ("$server", "$db_user", "$db_pass");
      $rs = @mysql_select_db ("$database", $conn);
      if(@mysql_query("INSERT INTO `gctextbox` (`name`, `comments`, `time`, `ip`) VALUES('".$_POST['name']."','".$_POST['comments']."', NOW(), '".$_SERVER['REMOTE_ADDR']."')"))
      {
        $msg = 'Dziękujemy. Pozdrowienia zostały wysłane.';
        setcookie("wyslal", "1", time()+$czas);
      }
      else $msg='Pozdrowienia nie zostały wysłane - problem z bazą danych';
    }
  }
}
ob_end_flush(); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-Language" content="pl">
<link rel="stylesheet" type="text/css" href="/style.css" title="style">
<body bgcolor="#D2FF95" link="#000000" vlink="#000000" alink="#000000">
<title>Wyślij pozdrowienia</title>
</head>
<body>
<?
echo $msg;
?>
</body>
</html>

To gdzie mam co wrzucić ??
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 13:51:33

W takim wypadku przed:
if(@mysql_query("INSERT INTO `gctextbox` (`name`, `comments`, `time`, `ip`) VALUES('".$_POST['name']."','".$_POST['comments']."', NOW(), '".$_SERVER['REMOTE_ADDR']."')"))
Dodaj:
Kod: Zaznacz cały
<?
$_POST['comments'] = htmlspecialchars($_POST['comments']);
$_POST['name'] = htmlspecialchars($_POST['name']);
?>
Dzięki temu w bazie zostaną zapisane dane już w postaci 'bezpiecznej' :)
Avatar użytkownikaMavestinus
Paweł Nowak

Out of time
Out of time

Posty: 2384
Dołączył(a): 09.01.2003
Lokalizacja: Katowice

Post 19.06.2004, 14:07:14

To nie działa :(
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 14:12:20

[OT] po tym file('ip.dat.'); zamiast foreach możesz dać in_array

a mi htmlspecialchars działa więc nie wiem co masz nie tak :( ale dodam, że czasami serwer sam wykonuje to co podał Mavestinus (hint: magic_quotes)
- Taeril -
który | nie ma | poza tym | w ogóle | chcę | stąd | użytkownik | próba | używa |
artykuł | pomóc | korzystać | mój | wziąć | nie wiem | mógł | odnaleźć | sjp
Avatar użytkownikaTaeril
Przyjaciel WH

Posty: 913
Dołączył(a): 07.05.2004
Lokalizacja: Warszawa

Post 19.06.2004, 18:36:24

Dobra trudno się mówi jak nie działa to nie działa - to może ktoś mi napisze jak zrobić żeby w momencie wprowadzenia np. tych znaczków < i > w tym formularzu skrypt sprawdził text przed wysłaniem i w momencie znalezienia tychże znaków zatrzymał wysyłanie i pokazał jakiś tam wymyślony przezemnie komunikat o tym że "wprowadzono niedozwolone znaki - wróć i popraw swój tekst". Pozdrawiam i czekam na odpowiedzi.
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004

Post 19.06.2004, 18:58:24

Jakoś w wielu skryptach dziala i jest ok - nie wiem co możesz mieć nie tak :/

A co do pytanie to np strpos może się przydać
- Taeril -
który | nie ma | poza tym | w ogóle | chcę | stąd | użytkownik | próba | używa |
artykuł | pomóc | korzystać | mój | wziąć | nie wiem | mógł | odnaleźć | sjp
Avatar użytkownikaTaeril
Przyjaciel WH

Posty: 913
Dołączył(a): 07.05.2004
Lokalizacja: Warszawa

Post 19.06.2004, 19:19:22

Hmm, o ile dobrze zrozumiałem, to pytałeś jak podmienić < i > na #, można to zrobić tak:
Kod: Zaznacz cały
<?php
while ( list( $key, $val ) = each( $_POST ) ) {
   $_POST[$key] = preg_replace( "/<|>/", "#", $_POST[$key] );
}
?>

Wstaw to przed, // polaczenie z baza danych. Przy okazji, ta linia:
Kod: Zaznacz cały
<?php if ( !$name or !$comments) ?>

powinna wyglądać tak:
Kod: Zaznacz cały
if ( !$_POST[name] or !$_POST[comments])
e-Złota Rybka
Avatar użytkownikaNitro
Marcin Łyżniak

Posty: 352
Dołączył(a): 27.08.2003
Lokalizacja: Szczecin

Post 19.06.2004, 19:32:11

mi się jednak wydaje, że nawet 2 str_replace będą szybsze od tej armaty na muchę jaką jest preg_replace

btw. przy łączeniu sie z bazą niepotrzebnie amsz zmienne w ""
- Taeril -
który | nie ma | poza tym | w ogóle | chcę | stąd | użytkownik | próba | używa |
artykuł | pomóc | korzystać | mój | wziąć | nie wiem | mógł | odnaleźć | sjp
Avatar użytkownikaTaeril
Przyjaciel WH

Posty: 913
Dołączył(a): 07.05.2004
Lokalizacja: Warszawa

Post 19.06.2004, 19:35:14

Czy szybsze to nie wiem, ale tak wygląda bardziej elegancko ;) Swoją drogą można zastosować tylko jesten str_replace i do tego tablice.
e-Złota Rybka
Avatar użytkownikaNitro
Marcin Łyżniak

Posty: 352
Dołączył(a): 27.08.2003
Lokalizacja: Szczecin

Post 19.06.2004, 22:29:53

Ok dzięki już działa. Pozdrawiam.
DJ mArKo
Posty: 87
Dołączył(a): 16.05.2004


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości

Subskrypcja

Mamy 43428 zarejestrowanych użytkowników.
Najnowszy użytkownik: Viveka


Nasi użytkownicy napisali:

  • 909573 wiadomości
  • w 236447 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)