Skrypt zapisujący dane z formularza do bazy MySQL

2015-01-14 23:28
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?

musisz okreslic nazwy pol w formularzu name= "" potem lapiesz to $_POST['name'] - Rossik 2015-01-15 07:11

Pozostało 580 znaków

2015-01-15 07:26

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.


Jestem początkujący.
edytowany 1x, ostatnio: Rossik, 2015-01-15 07:28

Pozostało 580 znaków

2015-01-15 12:49
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 ?

Pozostało 580 znaków

2015-01-15 13:13
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


Jestem początkujący.

Pozostało 580 znaków

2015-01-15 14:52
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'];
i tak będzie bo w pozycje <option value=[tu wpisz $row z numerem id jaki dostajesz z mysql] > $row z imieniem i nazwiskiem laczony < /option> ogólnie zapoznaj się z zasadą działania select z HTML. Każda opcja ma zwracać określoną wartość do POSTa byś mógł zrobić coś z tym dalej. Skąd bierzesz POST['Gdzie'] skoro go nigdzie nie postujesz. Zasada następna jest taka, że mamy forma <form action='wysylaj gdzies' method='jak'>....jakies znaczniki...</form> - jeśli method jest POST to możesz lapac dane z POSTa zgodnie z deklaracja w znacznikach jeśli dasz GET to lapies z GETa - Rossik 2015-01-15 15:00
Ogólnie mieszasz pojęcia - nie możesz wrzucać zapytań SQL do HTML . Zastanów się co chcesz uzyskać. - Rossik 2015-01-15 15:12
Zamieściłem tylko wyrywek kodu z lista wyboru. POST['gdzie'] pobiera dane z pola tekstowego. - ivanise 2015-01-15 15:13

Pozostało 580 znaków

2015-01-15 15:25
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.


Jestem początkujący.
edytowany 1x, ostatnio: Rossik, 2015-01-15 15:26

Pozostało 580 znaków

2015-01-15 17:51
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ć ;/

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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