Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] dodawanie danych do bazy, co zrobic, aby uzytkownik nie mogl wpisac np: "ciastko"?
godzio89
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 18.07.2008

Ostrzeżenie: (0%)
-----


Ok mam takie skrypty:

nowyprodukt.htm
  1. <title>Dodaj nowy produkt</title>
  2. </head>
  3. <form action="nowyprodukt.php" method="post">
  4.  
  5. Numer produktu: <input type="text" name="nrproduktu" maxlength="3" size="4"><br /><br />
  6. Nazwa produktu: <input type="text" name="nazwaproduktu" maxlength="30" size="30"><br /><br />
  7. Cena: <input type="text" name="cena" maxlength="5" size="6"><br><br><br>
  8.  
  9. <input type="submit" value="Wstaw do bazy">
  10. </form>
  11. </body>
  12. </html>


nowyprodukt.php
  1. <?php
  2.  
  3. $nrproduktu = $_POST['nrproduktu'];
  4. $nazwaproduktu = $_POST['nazwaproduktu'];
  5. $cena = $_POST['cena'];
  6.  
  7. if (!$nrproduktu || !$nazwaproduktu || !$cena)
  8.  
  9.  {
  10. print "Nie zostały wypełnione wszystkie pola";
  11.  }
  12.  
  13. $nrproduktu = addslashes($nrproduktu);
  14. $nazwaproduktu = addslashes($nazwaproduktu);
  15. $cena = addslashes($cena);
  16.  
  17. @$db = mysql_pconnect("localhost", "root", "");
  18. if (!$db)
  19. {
  20. print "Nie można nawiązać połączenia z bazą danych";
  21. }
  22.  
  23. mysql_select_db("sklep");
  24.  
  25. $query = "insert into produkty values ('".$nrproduktu."', '".$nazwaproduktu."', '".$cena."')";
  26. $result = mysql_query($query);
  27.  
  28. if ($result)
  29. print "Towar <b>".$nazwaproduktu."</b> został dodany do bazy danych.";
  30. else { print "W bazie istnieje już produkt o tym numerze."; }
  31.  
  32. ?>


baza.php --> tutaj wyswietla sie baza
  1. <?php
  2. @$db = mysql_connect("localhost", "root", "");
  3. if(!$db)
  4. {
  5. echo 'Wystapil blad w polaczeniu';
  6. }
  7.  
  8. mysql_select_db("sklep");
  9.  
  10. $query ="select * from produkty";
  11. $result = mysql_query($query);
  12. $num_results = mysql_num_rows($result);
  13.  
  14. echo '<p>Ilosc produktow w bazie danych: '.$num_results.'</p>';
  15. for ($i=0; $i<$num_results; $i++) {
  16. $row = mysql_fetch_array($result);
  17. echo ($i+1);
  18. echo stripslashes($row['nazwaproduktu']);
  19. echo 'cena: ';
  20. echo stripslashes($row['cena']);
  21. echo 'zl, nr:';
  22. echo stripslashes($row['nrproduktu']);
  23. echo '<br />';
  24. }
  25. ?>


I teraz mam problem. Jak dodaje produkt o nazwie:
Kod
   "ciastka" --> razem z apostrofami!


To wyswietli mi sie w baza.php
CODE

5"ciastko"cena: 9.99zl, nr:5

Da sie jakos zrobic, zeby nie mozna bylo wpisywac takich znakow jak
CODE

"", '', (), itp?


Ten post edytował Ociu 27.07.2008, 09:08:44
Powód edycji: poprawiam bbCode (ociu)
Go to the top of the page
+Quote Post
Inti
post
Post #2





Grupa: Zarejestrowani
Postów: 67
Pomógł: 12
Dołączył: 20.01.2008
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Proponuję w pliku nowyprodukt.php po sprawdzeniu czy konkretne pola zostały wypełnione przeprowadzić kolejny test na zawartość niepożądanych znaków Najlepiej wpierw stwórz sobie tabele niepożadanych znaków, a następnie interesujące cię zmienne przeleć znak po znaku sprawdzając, czy dochodzi do wystąpenia jakiegoś elementu ze zdefiniowanej uprzednio tabelą i w razie potrzeby wykonanać określoną akcję

Pozdrawiam Inti
Go to the top of the page
+Quote Post
godzio89
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 18.07.2008

Ostrzeżenie: (0%)
-----


No tak, ale jezeli juz mam np tabele zle_znaki:
CODE

Creat table zleznaki(
'nrznaku int unsigned not null auto_increment primary key,
znak char(2) not null);


Jak mam sprawdzic czy np w $tekst sa znaki znajdujace sie w tabeli zleznaki?
np:
CODE

$tekst = " "Ciasto" ";
Go to the top of the page
+Quote Post
Inti
post
Post #4





Grupa: Zarejestrowani
Postów: 67
Pomógł: 12
Dołączył: 20.01.2008
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Nie chodziło mi o tabele w bazie lecz zmienna tabelarczyną

Dobra oto kod jak możesz to w dość naiwny sposób zrobić:

  1. <?php
  2. $slowo = 'ciastko()z;nierzadanymiznakami';
  3. $wynik = strtr($slowo, '();', '111'); // zameiniasz każdy znak z listy - tutaj ();, na jakąś inną warotść, tutaj dałem 111 - każdemu znakowi przyporządkowujesz jakąś wartość
  4.  
  5. if (strcmp($slowo, $wynik)) // następnie porównujesz słowa, jeśli nie są równe to znaczy, że doszło do podmian
    y znaków, czyli wystąpił nieporządany znak
  6. echo "Słowo zawieta nieporządany znak";
  7. ?>


Mam nadzięję, że to wystarczy

Pozdrawiam Inti

Ten post edytował Inti 27.07.2008, 00:14:19
Go to the top of the page
+Quote Post
godzio89
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 18.07.2008

Ostrzeżenie: (0%)
-----


hmm a nie da sie tego zrobic tak:
CODE

$nazwaproduktu = $_POST['nazwaproduktu'];

$query = "SELECT * FROM zleznaki";

if($nazwapr = strpos($nazwaproduktu, $query)
{
echo 'W nazwie produktu wpisales niedozwolone znaki!"
exit;
}


Da sie to zrobic tak, ze za pomoca strpos() sprawdzam czy w nazwie produktu wystepuje niedozwolone znaki?
Go to the top of the page
+Quote Post
Inti
post
Post #6





Grupa: Zarejestrowani
Postów: 67
Pomógł: 12
Dołączył: 20.01.2008
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Cytat(godzio89 @ 27.07.2008, 01:24:19 ) *
hmm a nie da sie tego zrobic tak:
  1. <?php
  2. $nazwaproduktu = $_POST['nazwaproduktu'];
  3.  
  4. $query = "SELECT * FROM zleznaki";
  5.  
  6. if(strpos($nazwaproduktu, $query) // zgadza się wystarczy sprawdzić czy znajduję w tekscie danych szukany element, n
    ie trzeba jednak tworzyć już dodatkowej zmiennej, no chyba że ta wartość do czego
    ś będzie ci jeszcze potrzebna
  7. {
  8. echo "W nazwie produktu wpisales niedozwolone znaki!"
  9. }
  10. ?>


Da sie to zrobic tak, ze za pomoca strpos() sprawdzam czy w nazwie produktu wystepuje niedozwolone znaki?


Jeśli działa, to czemu by nie rolleyes.gif Troszku już jest poźno i człowiek czasem szuka rozwiązań na okrętke wstydnis.gif

Pozdrawiam Inti

PS. Pytanie czy potrzeba jest dodawanie operacji łączenia się z bazą, za każdym sprawdzeniem poprawności słowa

Ten post edytował Inti 27.07.2008, 00:34:29
Go to the top of the page
+Quote Post
godzio89
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 18.07.2008

Ostrzeżenie: (0%)
-----


Mam taki kod i niestety nie dziala;/Nie sprawdza mi czy wpisze niedozwolone znaki np:
CODE

mleko)

Normalnie wstawia mi takie cos do bazy;/Moze tutaj jest cos zle?
CODE

$query = "select * from zleznaki";
$results = mysql_query($query);
if (strpos($nazwaproduktu, $results))
{
echo 'wpisales niedozwolone znaki w nazwie produktu!';
exit;
}

Caly plik php:
CODE

<?
$nrproduktu = $_POST['nrproduktu'];
$nazwaproduktu = $_POST['nazwaproduktu'];
$cena = $_POST['cena'];

if (!$nrproduktu || !$nazwaproduktu || !$cena)

{
print "Nie zostały wypełnione wszystkie pola";
exit;
}

@$db = mysql_connect("localhost", "root", "");
if (!$db)
{
print "Nie można nawiązać połączenia z bazą danych";
exit;
}

mysql_select_db("sklep");

$query = "select * from zleznaki";
$results = mysql_query($query);
if (strpos($nazwaproduktu, $results))
{
echo 'wpisales niedozwolone znaki w nazwie produktu!';
exit;
}

$nrproduktu = addslashes(htmlspecialchars($nrproduktu));
$nazwaproduktu = addslashes(htmlspecialchars($nazwaproduktu));
$cena = addslashes(htmlspecialchars($cena));



$query = "insert into produkty values ('".$nrproduktu."', '".$nazwaproduktu."', '".$cena."')";
$result = mysql_query($query);

if ($result)
print "Towar <b>".$nazwaproduktu."</b> został dodany do bazy danych.";
else { print "W bazie istnieje już produkt o tym numerze."; }

?>


Ten post edytował godzio89 27.07.2008, 14:17:26
Go to the top of the page
+Quote Post
Victor152
post
Post #8





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


Spójrz na to rozwiązanie (http://pl2.php.net/manual/pl/function.str-replace.php),
  1. <?php
  2.  
  3. $nrproduktu = $_POST['nrproduktu'];
  4. $nazwaproduktu = $_POST['nazwaproduktu'];
  5. $cena = $_POST['cena'];
  6.  
  7. if (!$nrproduktu || !$nazwaproduktu || !$cena)
  8.  
  9.  {
  10. print "Nie zostały wypełnione wszystkie pola";
  11.  }
  12.  
  13. $nrproduktu = addslashes($nrproduktu);
  14. $nazwaproduktu = addslashes($nazwaproduktu);
  15. $szukaj = array('(', ')', '/', '-', ']', '[', '$');
  16. $zastap = array('', '', '', '', '', '', '');
  17. $nazwaproduktu = str_replace($szukaj, $zastap, $nazwaproduktu);
  18. $cena = addslashes($cena);
  19.  
  20. @$db = mysql_pconnect("localhost", "root", "");
  21. if (!$db)
  22. {
  23. print "Nie można nawiązać połączenia z bazą danych";
  24. }
  25.  
  26. mysql_select_db("sklep");
  27.  
  28. $query = "insert into produkty values ('".$nrproduktu."', '".$nazwaproduktu."', '".$cena."')";
  29. $result = mysql_query($query);
  30.  
  31. if ($result)
  32. print "Towar <b>".$nazwaproduktu."</b> został dodany do bazy danych.";
  33. else { print "W bazie istnieje już produkt o tym numerze."; }
  34.  
  35. ?>

Wprowadziłem taką zmianę:
  1. <?php
  2. $szukaj = array('(', ')', '/', '-', ']', '[', '$');
  3.  $zastap = array('', '', '', '', '', '', '');
  4.  $nazwaproduktu = str_replace($szukaj, $zastap, $nazwaproduktu);
  5. ?>

Komunikatu nie wyświetla, ale zamienia nie które znaki, oczywiście możesz poszerzyć własną listę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:56