Skrypt zapisujący dane z formularza do bazy MySQL

0

Cześć

Generalnie moje doświadczenie z php jest 6 dniowe. Może sytuacja, którą opisze wyda się trywialna... Mimo to liczę na pomoc bardziej doświadczonych kolegów z forum.

Zacznijmy od początku. Mam dwie tabele w MySql.

  1. kierowca [ID,Imie,Nazwisko] klucz główny ID
  2. wycieczka [ID,Kierowca,Gdzie] klucz główny ID

Ponadto założyłem klucz obcy na Kierowca(z tabeli wycieczka) i powiazalem go z ID(tabela kierowcy).

Później stworzyłem listę wyboru w której wyświetlane są imie i nazwisko kierowcy. Ładnie się wszystko ładuje z bazy do tej listy.

      <form method="post" action="dodajWycieczke.php">
                               <select name="Kierowca" style="width: 210px">
                               <option>Wybierz kierowce</option>
           
 <?php
            
                 $kierowcy="SELECT Imie, Nazwisko FROM `kierowca`";
                 $wynik=mysql_query($kierowcy);
                 
                 while($row = mysql_fetch_row($wynik))
                 {
                            echo '<option>'.$row['0'].' '.$row['1'].'</option>';
                 }               

            ?>                            
</select>
            
            
             <input type="submit" value="Dodaj" />
            </form>

Chcę teraz stworzyć skrypt , który by zapisywał dane z mojego formularza do bazy.
Powinien on wyglądać chyba mniej więcej tak jak ten co namazałem poniżej.

<?php 

$Kierowca = ???????????????????????????? 


if($Kierowca && $Gdzie) 
{ 
     
    $connection = @mysql_connect('localhost', 'root', 'xxx') 
    or die('Brak połączenia z serwerem MySQL'); 
    $db = @mysql_select_db('biuroturystyczne', $connection) 
    or die('Nie mogę połączyć się z bazą danych'); 
    
                       
                    $ins = @mysql_query("INSERT INTO autokar SET Kierowca='$Kierowca', Gdzie='$Gdzie' ");   

                    if($ins) 
                    {
                             header("Location: autokary.php");      
    
                             }
                    else 
                    {
                             echo "Błąd nie udało się dodać nowego rekordu"; 
                    }
       
     
    mysql_close($connection); 
} 
else
{
    echo"Nie uzupełniłeś danych!";
}

?> 

Moje pytanie jest takie... Jak mam zadeklarować

$Kierowca

by przekazywane było ID kierowcy którego wybraliśmy w formularzu?

1

Pseudokod z komorki.
Pierwszy form z selectem jest zly. Musisz podac argument w option do czego ma sie odnosci. <option value="kierowca.id"> kierowca.name </option>

Z posta masz wartosc 'Kierowca z Id z nazy' , mozesz ja wykorzystac od razu po poscie w funkcji insert tak : $_post['Kierowca'] albo przpisac do zmiennej i wykprzystywac pozniej
Dobra rada zmienne pisz malymi literami.

Aaaa i jeszcze ja bym wydelegowal warstwe laczenia z baza oraz pobierania wartosci od warstwy widoku.

0

Chyba rozumiem. Zaraz wytestuję. Teraz dane powinny być zapisywane w tabeli wycieczki[ID,Kierowca,Gdzie] tak:

ID , Kierowca , Gdzie
1 , 2(id kierowcy), Paryz
2 , 6, Berlin

Zgadza się?

Do tej pory gdy chciałem wyświetlić dane z tabeli mysql na stronie, tworzyłem taką tabelkę.

<?php

                $wynik = mysql_query("SELECT * FROM wycieczki") 
                or die('Błąd zapytania');        
                $ile=mysql_num_rows($wynik);
                
                  if(mysql_num_rows($wynik) > 0)
                   {                                      
                                     echo "<table cellpadding=\"10\" cellspacing=\"1\" border=\"1\" width=\"100%\" >";
                                     echo '<tr style="font-size:18px; height:70px; text-align:center" >';                                     
                                     echo "<td><strong>ID</strong></td>"; 
                                     echo "<td><strong>Kierowca</strong></td>";
                                     echo "<td><strong>Gdzie?</strong></td>";
                                     echo "<td><strong>Korekta danych</strong></td>";                                     
                                     echo "</tr>";
                  
                                     while($r = mysql_fetch_array($wynik)) 
                                     {                                               
                                              echo '<tr style="font-size:14px; height:50px; text-align:center" >';                   
                                              echo "<td>".$r[0]."</td>"; 
                                              echo "<td>".$r[1]."</td>"; 
                                              echo "<td>".$r[2]."</td>";                                                                                                                                       
                                              echo '<td><a href="wycieczki.php?a=del&amp;id='.$r[0].'"><strong>Usuń</strong></a></td>';                                                                                                                                                                                               
                                              echo "</tr>";                                     
                                              }
                                     
                                              $a = isset($_GET['a']) ? $_GET['a'] : null;
                                              isset($_GET['id']) and $id= $_GET['id']; 
 
                                              if($a == 'del' and !empty($id))
                                              {                                             
                                                    mysql_query("DELETE FROM wycieczki WHERE ID='$id'")
                                                    or die('Błąd zapytania: '.mysql_error());                                                  
                                                    
                                                    }                                                  
                                             
                                     echo "</table>"; 
                  }
                  else
                  {
                      echo'<strong>Nie dodałeś jeszcze żadnej wycieczki !</strong>';
                      echo'<br /><br />Możesz to zrobić wypełniając formularz, który znajduje się obok.';
                  }
?> 

Jak teraz to zmienić by zamiast ID kierowcy wyświetlało się jego Nazwisko ?

0

Moim zdaniem warto to zrobić przez zmianę zapytania SQL (choć można zrobić w kodzie ale więcej klepania i kod staje się ciężki). Przypuszczając że mamy tabelę : Wycieczki (ID, KIEROWCA_ID, NAZWA) oraz Kierowca (ID, NAME, SURNAME) to zapytanie powinno mieć treść : " select Wycieczki.Id, Kierowca.Name, Wycieczki.Nazwa from Wycieczki inner join Kierowca on Wycieczki.kierowca_id = Kierowca.id; " niestety piszę z pracy i nie jestem pewien czy dobrze napisałem, ale zrobiłbym to za pomocą łączenia tabel join i wypisania tylko wartości do tabeli które mnie interesują - stąd po select nie * tylko to co chce. Sprawdź to u siebie

0

Co do Twojej wcześniejszej wypowiedzi. Pozmieniałem

<?php
 
                 $kierowcy="SELECT Imie, Nazwisko FROM `kierowca`";
                 $wynik=mysql_query($kierowcy);
 
                 while($row = mysql_fetch_row($wynik))
                 {
                            echo '<option>'.$row['0'].' '.$row['1'].'</option>';
                 }               
 
            ?>                            
</select> 

Na

 <?php
 
                 $kierowcy="SELECT Imie, Nazwisko FROM `kierowca`";
                 $wynik=mysql_query($kierowcy);
 
                 while($row = mysql_fetch_row($wynik))
                 {
                            echo '<option value="kierowca.ID">'.$row['0'].' '.$row['1'].'</option>';
                 }               
 
            ?>                            
</select>

a w drugim pliku, który odpowiada za dodawanie zadeklarowałem zmienną w ten sposób

require 'polaczenie.php';

$Gdzie= addslashes($_POST['Gdzie']);
$Kierowca=$_POST['Kierowca'];
if($Kierowca && $Gdzie) 
{ 
   
 
                    $ins = @mysql_query("INSERT INTO autokar SET Kierowca='$Kierowca', Gdzie='$Gdzie' ");   
 
                    if($ins) 
                    {
                             header("Location: autokary.php");      
 
                             }
                    else 
                    {
                             echo "Błąd nie udało się dodać nowego rekordu"; 
                    }
 
 
    mysql_close($polaczenie); 
} 
else
{
    echo"Nie uzupełniłeś danych!";
}
 
?>  

No i wyrzuca notice Undefined index: Kierowca ;/
Dotyczy to właśnie tej linijki

 $Kierowca=$_POST['Kierowca'];
0

Jeśli początek selecta masz <select name="Kierowca">

<?php
 
                 $kierowcy="SELECT Id, Imie, Nazwisko FROM `kierowca`";
                 $wynik=mysql_query($kierowcy);
 
                 while($row = mysql_fetch_row($wynik))
                 {
                            echo '<option value='.$row[0].'>'.$row[1].' '.$row[2].'</option>';
                 }               
 
            ?> 

to potem print($_POST['Kierowca']) powinieneś dostać wybranego kierowcę z combolist (jego samo id), które potem możesz wykorzystać do wstawiania i zapytań dalej.

0

To mam właśnie tak ustawione. Ale dalej to nie wiem jak to ugryźć.
Wcześniej aby przekazać dane z pola tekstowego do bazy to robiłem

 <form method="post" action="dodajAutokar.php">        
                   <label><strong>Marka</strong></label><br />
                   <input type="text" name="Marka" ><br /><br />            
                   <label><strong>Model</strong></label><br />
                   <input type="text" name="Model" /><br /><br />       
                   <input type="submit" value="Dodaj" />                 
            </form>
   

A potem w dodajAutokar.php

 
$Marka = addslashes($_POST['Marka']); 
$Model = addslashes($_POST['Model']); 
if($Marka && $Model) 
{ 
                    $ins = @mysql_query("INSERT INTO autokar SET Marka='$Marka', Model='$Model' "); 
                    if($ins) 
                    {
                             header("Location: autokary.php");  
                             }
                    else 
                    {
                             echo "Błąd nie udało się dodać nowego rekordu"; 
                    }
    mysql_close($polaczenie); 
} 
else
{
    echo"Nie uzupełniłeś danych!";
}
?> 

Szczerze mówiąc to nie rozumiem czemu nie mogę tego analogicznie ogarnąć i w przypadku z listą.Muszę chyba więcej teorii poczytać ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1