Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] dodawanie danych do bazy
Forum PHP.pl > Forum > Przedszkole
godzio89
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?
Inti
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
godzio89
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" ";
Inti
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
godzio89
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?
Inti
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
godzio89
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."; }

?>
Victor152
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ę.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.