Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z instrukcjami i dodawaniem rekordów do bazy danych.
Forum PHP.pl > Forum > Przedszkole
Croos22
Dobry wieczór!

Wymyśliłem dziś prosty sposób na wysyłanie prywatnych wiadomości. Tylko, że pojawiło się klika problemów kod pomimo tego że wykonuje się cały nie zwraca uwagi na else a chodzi o to że jeśli wcześniejsze warunki spełnione to dopiero.

Tabela wygląda tak:
  1. CREATE TABLE `wiadomosci` (
  2. `id_pw` INT NOT NULL AUTO_INCREMENT ,
  3. `tytul` VARCHAR( 150 ) NOT NULL,
  4. `tresc` VARCHAR( 250 ) NOT NULL,
  5. `login_wysylajacego` VARCHAR( 40 ) NOT NULL,
  6. `login_odbierajacego` VARCHAR( 40 ) NOT NULL,
  7. `data_wyslania` VARCHAR( 10 ) NOT NULL,
  8. PRIMARY KEY ( `id_pw` )
  9. );



A kod tak:
  1. <?php
  2. include('baza.php');
  3.  
  4. echo "<table><tr><form action='wyslij.php' method=post>";
  5. echo "<td>Nazwa odbiorcy:</td> <td><input class=formularz type=text name=odbiorca></td></tr>";
  6. echo "<td>Tytuł:</td> <td><input type=text name=tytul></td></tr>";
  7. echo "<tr><td>Tresc:</td> <td><textarea type=text name=tresc size=5 maxlength=20></textarea></td>";
  8. echo "<tr><td><input type=submit name=submit value='Wyślij'></td></tr>";
  9. echo "</form></table>";
  10.  
  11. $ja = mysql_fetch_array(mysql_query("SELECT user_login FROM `users` WHERE `user_login` = 'admin' "));
  12. $odbiorcaa = mysql_fetch_array(mysql_query("SELECT user_login FROM `users` WHERE `user_login` = '$odbiorca' "));
  13.  
  14. $data = date("Y-m-d");
  15. if(isset($_POST['submit'])){
  16. if(empty($_POST['odbiorca'])){
  17. echo 'Nie podano do kogo ma wysłać';
  18. }
  19. if(empty($_POST['tresc'])){
  20. echo 'Nie można wysłać pustej wiadomości.';
  21. }
  22. if($ja == $odbiorca ){
  23. echo 'Nie możesz wysyłać wiadomości do siebie samego.';
  24. } else {
  25. echo 'Wiadomość została wysłana.';
  26. mysql_query("insert into wiadomosci values(NULL, '".htmlspecialchars($_POST["tytul"])."', '".htmlspecialchars($_POST["tresc"])."', '".$ja."', '".$_POST["odbiorca"]."', '".$data."',)");
  27. }
  28. }
  29.  
  30. ?>
Tomplus
Bo nie wiem czy przypadkiem zmienna
$odbiorca to u Ciebie to samo co $_POST["odbiorca"]

sprawdz linie gdzie jest
if ($ja == $odbiorca)
i popraw zmienną na $_POST["odbiorca"]
Croos22
Zmienna odbiorcaa to ta w której wyciągam dane z bazy a odbiorca odpowiada za dane wpisane do formularza.

Dałem jeszcze poprawkę przy wyciąganiu danych z bazy osoby wpisanej w formularz:
  1. $odbiorcaa = mysql_fetch_array(mysql_query("SELECT user_login FROM `users` WHERE `user_login` = '$_POST['odbiorca']' "));
sada
nigdzie nie widzę zmiennej $odbiorca
Croos22
Przepraszam źle się wyraziłem chodziło mi o pole tekstowe które w name ma "odbiorca".
sada
A to ?
  1. if($ja == $odbiorca ){
Croos22
Zrobiłem już poprawkę w kodzie jak radził pan Tomplus $_POST['odbiorca']
Ale dlaczego wyświetla całą stronę. Gdy nie wypełnię formularzy powie mi to komunikatem który dałem w echo ale również wyświetli, że wiadomość została wysłana ale tu pojawia się drugi problem ponieważ nie dodaje mi rekordów do bazy.

Po poprawkach kod wygląda tak:
  1. <?php
  2. include('baza.php');
  3.  
  4. echo "<table><tr><form action='wyslij.php' method=post>";
  5. echo "<td>Nazwa odbiorcy:</td> <td><input class=formularz type=text name=odbiorca></td></tr>";
  6. echo "<td>Tytuł:</td> <td><input type=text name=tytul></td></tr>";
  7. echo "<tr><td>Tresc:</td> <td><textarea type=text name=tresc size=5 maxlength=20></textarea></td>";
  8. echo "<tr><td><input type=submit name=submit value='Wyślij'></td></tr>";
  9. echo "</form></table>";
  10.  
  11. $ja = mysql_fetch_array(mysql_query("SELECT user_login FROM `users` WHERE `user_login` = 'admin' "));
  12. $odbiorcaa = mysql_fetch_array(mysql_query("SELECT user_login FROM `users` WHERE `user_login` = '$_POST['odbiorca']' "));
  13.  
  14. $data = date("Y-m-d");
  15. if(isset($_POST['submit'])){
  16. if(empty($_POST['odbiorca'])){
  17. echo 'Nie podano do kogo ma wysłać';
  18. }
  19. if(empty($_POST['tresc'])){
  20. echo 'Nie można wysłać pustej wiadomości.';
  21. }
  22. if($ja == $_POST['odbiorca'] ){
  23. echo 'Nie możesz wysyłać wiadomości do siebie samego.';
  24. } else {
  25. echo 'Wiadomość została wysłana.';
  26. mysql_query("insert into wiadomosci values(NULL, '".htmlspecialchars($_POST["tytul"])."', '".htmlspecialchars($_POST["tresc"])."', '".$ja."', '".$_POST["odbiorca"]."', '".$data."',)");
  27. }
  28. }
  29.  
  30. ?>
emajl22
1. usuń te htmlspecialchars bo to i tak nic Ci nie daje...
2. daj po IFach gdzie walidujesz (tam gdzie błędy) return false;
3.
  1. mysql_query("INSERT INTO `wiadomosci` values (null, '".$_POST["tytul"]."', '".$_POST["tresc"]."', '$ja', '".$_POST["odbiorca"]."', '$data')");
Croos22
Dzięki wielkie za pomoc dorzuciłem do tego sesje i śmiga jak należy. Mam jeszcze pytanie czy jeśli post-em przekazuje do zapytania dane to czy one są odpowiednio zabezpieczone przed innymi osobami niż ta która została wpisana w polu nazwa odbiorcy?
emajl22
Nie, nie są.

zapoznaj się z pojęciami sql injection i xss.
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.