Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PDO][MySQL]Przypisywanie wartości z pierwszej tabeli do drugiej
Forum PHP.pl > Forum > Przedszkole
matius71
Witam,

Trafiam tu z kolejną zagadką którą mam nadzieje że kolejny raz uda się rozwiązać Lkingsmiley.png

Powiedzmy że mam w bazie danych dwie tabele jedna to "Szkoła" druga to "Uczniowie".

Misja jest tak żeby w tabeli "uczniowie" wpisać ID szkoły do której należy uczeń.

I chodzi mi o to że jak to zrobić żeby w formularzu zrobionym w HTML i PHP było widać listę NAZW dostępnych szkół z tabeli "szkoły" a jak się wybierze którąś to żeby w tabeli "Uczniowie" zapisywało się ID wybranej szkoły a nie nazwa szkoły?

Trochę to zagmatwane i właśnie nawet nie wiem jak zacząć tego szukać w google nerdsmiley.png
Pyton_000
Ale jaki masz problem?

Nie umiesz zrobić formularza? Nie umiez pobrac danych z bazy?
matius71
umiem pobrać dane, umiem tez zrobić formularz. Chodzi o to że nie wiem jak pobierać listę szkół, wyświetlać nazwy szkół a zapisywać w innej tabeli tylko ID tej szkoły.
Pyton_000
No to skoro umiesz pobrać dane to pobierasz ID szkoły i jej nazwę.

Budujesz sobie z tego listę rozwijaną, wsadzasz to w formularz a potem zapisujesz do tabelki z id_usera i id_szkoly.
matius71
Ale mi chodzi o jakiś przykład na którym bym mógł sie nauczyć.
Pyton_000
Powiedziałeś przecież że umiesz pobrać dane i zbudować formularz. Powiedziałem Ci też jak masz go zbudować.

Działaj, pokazuj kod i będziemy pomagać.
dr_NO
w pseudokodzie:
Kod
<select>
while (pobierz dane z tabeli szkoly) {
  <option value=" $idSzkoly "> $NazwaSzkoly </option>
}
</select>
matius71
Gdzieś wcześniej mam:

  1. $stmt = $db->prepare('INSERT INTO members (SchoolID) VALUES (SchoolID)');
  2. $stmt->execute(array(
  3. ':SchoolID' => $SchoolID
  4. ));
  5. $id = $db->lastInsertId('memberID');


Potem formularz:

  1.  
  2. <select type="text" name="SchoolName" id="SchoolName" class="form-control input-lg" placeholder="School Name" value="<?php
  3. if(isset($error)){ echo htmlspecialchars($SchoolID, ENT_QUOTES); } ?>" tabindex="5">
  4. <option selected="selected" disabled="disabled">School Name </option>;
  5.  
  6. <?php
  7. $stmt = $db->query('SELECT SchoolName, SchoolID FROM Schools ');
  8. $stmt->execute(array(':SchoolName' => $SchoolName,
  9. ':SchoolID' => $SchoolID));
  10.  
  11. // pobranie/wyświetlenie wyników
  12. while($row = $stmt->fetch())
  13. {
  14. echo '<option>'. $row['SchoolName'] .' </option>';
  15. }
  16. ?>
  17.  
  18. </select>



To co tu pokazałem nie działa za bardzo, nie mam innego pomysłu jak to powinno wyglądać żeby zapisywał się sam ID szkoły.

Naprawde nikt nie jest w stanie mi pomóc?
viking
Select nie ma atrybutu value. Jego value jest w option: https://html.spec.whatwg.org/multipage/form...-select-element
Neutral
  1. <body style="background:grey">
  2.  
  3. <pre>
  4. <?php
  5. $dbh = new PDO('mysql:host=localhost;dbname=name_database','root','');
  6.  
  7. $stmt = $dbh->query('SELECT name_school from school');
  8.  
  9.  
  10. while($x[] = $stmt->fetchAll(PDO::FETCH_COLUMN,0));
  11.  
  12. ?>
  13.  
  14. <form method="post" action="">
  15. <select name="choosing">
  16. <?php
  17. for($i=0;$i<count($x[0]);$i++){
  18.  
  19. echo "<option value=\"{$i}\">{$x[0][$i]}</option>";
  20.  
  21. }
  22. ?>
  23. </select>
  24. <input type="text" name="id_student"/>
  25. <input type="submit" value="send" name="for_isset_school"/>
  26. </form>
  27.  
  28. <?php
  29. if(isset($_POST['for_isset_school']) && isset($_POST['choosing']) && !empty($_POST['id_student'])){
  30.  
  31. $save_id_to_table_student = $dbh->query("UPDATE student SET id_school = {$_POST['choosing']} where id={$_POST['id_student']};");
  32.  
  33. if($save_id_to_table_student === false) {
  34. echo 'Query don\'t executabled';
  35. }else{
  36. echo 'Query leave sent do database';
  37. }
  38. }else {
  39. echo 'You don\'t leave empty field';
  40. }
  41.  
  42. ?>
  43.  
  44. </body>
matius71
Dzięki wielkie, niby dopasowałem do siebie ten kod. Nazwy szkół wyświetlają się poprawnie ale ID szkół liczy jakby od 0 a nie od 1 czyli jak wybieram pierwszą szkołę z listy to w bazie wpisuje ID 0 a nie 1 :/

Dobra generalnie to co mi podesłałeś liczy wiersze w bazie danych a nie sprawdza ID rekordów więc to tak nie może być.
dr_NO
czekaj czekaj, a jak masz zapisane dane szkół w bazie?
standardowo tak jak id|nazwa|opis|pierdoła?
id jest unikatowe?
Bo w obecnym skrypcie pobierana z bazy jest JEDYNIE nazwa szkoły ('SELECT name_school from school'), natomiast id jest generowane właśnie tak: $i=0;$i<count($x[0]);$i++ czyli inkrementowane od 0 co 1 - to nie jest jakkolwiek połączone z bazą danych. Musisz pobrać i wyświetlić także id z bazy danych.
leonpro778
Bo ten kawałek z selectem to ja bym zrobił w TEN sposób:


  1.  
  2. <form method="post" action="">
  3. <select name="choosing">
  4. <?php
  5. $dbh = new PDO('mysql:host=localhost;dbname=name_database','root','');
  6.  
  7. $stmt = $dbh->query('SELECT id_school, name_school FROM school');
  8.  
  9.  
  10. while($x = $stmt->fetch(PDO::FETCH_ASSOC))
  11. {
  12. echo "<option value=\"".$x['id_school']."\">".$x['name_school']."</option>";
  13. }
  14. ?>
  15. </select>
  16. <input type="text" name="id_student"/>
  17. <input type="submit" value="send" name="for_isset_school"/>
  18. </form>
  19.  


Pisane z pamięci i mogłem gdzieś jakąś literówkę walnąć smile.gif
matius71
dr_NO

Mam tabele:

Szkola
ID|NazwaSzkoly| inne dane adresowe(mało ważne w tym przypadku)

Uczniowie
ID|Imie|Nazwisko|ID_Szkoly| inne dane

leonpro778 sprawdzę to co podałeś, dzięki za kod smile.gif

Chodzi mi o to żeby odczytać nazwę szkoły i ID szkoły następnie wyświetlić Nazwy szkół w tabeli rozwijanej. Po wyborze nazwy szkoły żeby było zapisywane ID szkoły do tabeli Uczniowe pod ID_Szkoly.

Możliwe że to co podesłał leonpro778 będzie dobre ale zanim odpiszę to muszę sprawdzić smile.gif

Ok, Dzięki Panowie, bardzo mi pomogliście.

Sprawa ogarnięta aarambo.gif

Zastanawiam się jeszcze... w sumie to mi nie jest niezbędne ale apetyt rośnie w miarę jedzenia biggrin.gif

Teraz odczytywane jest ID szkoły i Nazwa szkoły. Do innej tabeli zapisywane jest samo ID szkoły. W jaki sposób zapisywać ID szkoły oraz Nazwe szkoły za jednym razem?

  1. <td><select type="text" name="schoolID" id="schoolID" class="form-control input-lg">
  2. <?php
  3. $stmt = $db->query('SELECT SchoolID, SchoolName FROM Schools');
  4.  
  5. while($x = $stmt->fetch(PDO::FETCH_ASSOC))
  6. {
  7. echo "<option value=\"".$x['SchoolID']."\">".$x['SchoolName']."</option>";
  8. }
  9. ?>
  10. </select></td>


Tak się zastanawiam bo po name= mam tylko "schoolID" ohno-smiley.gif
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.