Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pobieranie Id użytkownika
dakorta
post 10.03.2012, 12:13:47
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.03.2012

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


Mam tabele uzytkownicy, programy oraz test(zawiera użytkowników z przypisanymi im programami).
Pobieram id_użytkownika ale nie wiem jak to pobrane Id przypisać do formularza.
Program ma działac tak:
Wchodzę w użytkownika, klikam dodaj program i w następnym oknie chce mieć tylko liste programów i button dodaj. Wynikiem ma być dodanie programu do uzytkownika, w którym sie aktualnie znajduje.

Kod wygląda tak:
  1. <form method="post" action="index.php">
  2.  
  3. <input type="hidden" name="add_prog" value="true"/>
  4. <input type="hidden" name="id" value="<?=$row['id']?>" />
  5. <input type="text" name="id_programs" id="id_programs"/>
  6. <input type="submit" name="submit" value="Add Program"/>
  7. </form>


  1. function add_program ($p){
  2.  
  3. $id = mysql_real_escape_string($p['id']);
  4. $id_programs = mysql_real_escape_string($p['id_programs']);
  5.  
  6. $sql = "INSERT INTO test VALUES (null, '$id', '$id_programs')";
  7. $res = mysql_query($sql) or die(mysql_error());
  8. echo "Add Successfully!";
  9.  
  10. }


  1. function id_user($id) {
  2. $sql = "SELECT * FROM cms_content WHERE id = '$id'";
  3. $res = mysql_query($sql) or die(mysql_error());
  4. $row = mysql_fetch_assoc($res);
  5. ?>


Niestety nie pobiera mi zmiennej $id do formularza w związku z czym zapisuje mi do bazy tylko nazwę programu bez id_użytkownika. Co robię źle?
Go to the top of the page
+Quote Post
peter13135
post 10.03.2012, 12:28:46
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


No to po Kolei.
  1. $id = mysql_real_escape_string($p['id']);

To jest bez sensu, bo teoretycznie zabezpieczy Cię przed SqlInjection, ale mija się z celem. Ta funkcja dodaje blackslashe przed apostrofy... a gdzie masz apostrofy w liczbie ?. Powinno się raczej rzutować na inta.
  1. $id_programs = mysql_real_escape_string($p['id_programs']);

Heh, to tak się teraz robi relacje? biggrin.gif

Następna funkcja :
  1. "(...)WHERE id = '$id'";

$id to integerm więc nie powinno być apostrfów
Poza tym (to jest to jest właściwie Twój główny problem, o który pytałeś), funkcja nic nie robi, bo pobiera jakieś tam informacje do zmiennych, funkcja się "kończy" i informacje giną.
Zainteresuj się "zwracaniem wartości", słowo kluczowe : return.

Ten post edytował peter13135 10.03.2012, 12:29:57


--------------------
:)
Go to the top of the page
+Quote Post
dakorta
post 10.03.2012, 12:45:26
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat
  1. $id_programs = mysql_real_escape_string($p['id_programs']);

Heh, to tak się teraz robi relacje? biggrin.gif


Dopiero zaczynam nauke PHP.

Cytat
Następna funkcja :
  1. "(...)WHERE id = '$id'";

$id to integerm więc nie powinno być apostrfów

Racja, bez apostrofów też działa.
Cytat
funkcja nic nie robi, bo pobiera jakieś tam informacje do zmiennych, funkcja się "kończy" i informacje giną.
Zainteresuj się "zwracaniem wartości", słowo kluczowe : return.


Przyjrzę się dokładniej funkcjom. Poprawiłem kod i działa. Mam jeszcze jeden problem, ale spróbuje jeszcze sie sam pomęczyć wink.gif.
Go to the top of the page
+Quote Post
Barcelona
post 10.03.2012, 17:10:26
Post #4





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Co do rzutowania id to inta to zastosuj jeszcze
  1. $id = mysql_real_escape_string($p['id']);
  2. $id = (int)$id;

Go to the top of the page
+Quote Post
peter13135
post 10.03.2012, 18:23:56
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Czemu "jeszcze" ? Przecież ta pierwsza linijka jest zbędna.


--------------------
:)
Go to the top of the page
+Quote Post
GoOx
post 10.03.2012, 18:59:15
Post #6





Grupa: Zarejestrowani
Postów: 329
Pomógł: 6
Dołączył: 23.11.2011
Skąd: Łódź

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


może zamiast mysql_fetch_assoc zastosuj mysql_fetch_row i zamiast $zmienna['costam']; to $zmienna[0];
Go to the top of the page
+Quote Post
dakorta
post 13.03.2012, 10:28:44
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.03.2012

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


Podczas nauki natknąłem sie na kolejny problem. Mam formularz z polami do wypełnienia. Po dodaniu przechodzę do strony *.index.php- gdzie pobierane są te dane. Po kliknięciu na odśwież stronę, dane ponownie są zaczytywane.
Nie wiem w jaki sposób to ograniczyć aby tylko raz zapisał dane.
  1. function add_content($p){
  2. $imie = mysql_real_escape_string($p['imie']);
  3. $nazwisko = mysql_real_escape_string($p['nazwisko']);
  4. $dzial = mysql_real_escape_string($p['dzial']);
  5. if(!$imie || !$nazwisko || !$dzial):
  6.  
  7. if(!$imie):
  8. echo "<p>The imie Is Required</p>";
  9. endif;
  10.  
  11. if(!$nazwisko):
  12. echo "<p>The nazwisko Is Required</p>";
  13. endif;
  14.  
  15. if(!$dzial):
  16. echo "<p>The dzial Is Required</p>";
  17. endif;
  18.  
  19. echo '<a href="add-content.php">Try Again</a>';
  20. else:
  21. $sql = "INSERT INTO cms_content VALUES (null, '$imie', '$nazwisko', '$dzial')";
  22. $res = mysql_query($sql) or die(mysql_error());
  23. echo "Add Successfully!";
  24.  
  25. endif;
  26.  
  27. }

W pliku index.php pobieram dane w ten sposób:
  1. <?php if($_POST['add']):
  2. $obj->add_content($_POST);
  3. endif;
  4. ?>


Czy to jest dosć skomplikowane i porywam sie z motyką na ksieżyc?
Go to the top of the page
+Quote Post
peter13135
post 13.03.2012, 10:45:46
Post #8





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Ja robię to w ten sposób, że po dodaniu rekordu odświeżam stronę funkcją header('location: index.php')


--------------------
:)
Go to the top of the page
+Quote Post
dakorta
post 13.03.2012, 10:53:37
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(peter13135 @ 13.03.2012, 10:45:46 ) *
Ja robię to w ten sposób, że po dodaniu rekordu odświeżam stronę funkcją header('location: index.php')

Super wink.gif. Dzięki wielkie.
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:10