Dodanie recordów z id z innej tabeli

0

Hej
Mam mały problem z dodaniem rekordów w którym chcę umieścić id z innej tabeli, ale może jaśniej
mam 2 tabele 1 z klientami i drugą z serwisem
W tabeli serwis mam pole z idKlient i właśnie jak dodaję dane do tabeli serwis to nie umiem zapisać 'id' klienta z tabeli klient w idKlient z tabeli serwis
próbuję tak

   <?php
 $Id = $_GET['Id'];


if(is_null($Id)) {$Id=102;}
 //echo '<br>przesłane id klienta to ='.$Id;
 
 require ('connect.php');// POŁĄCZENIE Z BAZĄ

$query=" SELECT * FROM klient WHERE Id='$Id'";
$result=mysqli_query($conn, $query);
$num=mysqli_num_rows($result);
// ====  ??? mysqli_close($conn);

while($row = mysqli_fetch_assoc($result)) {  
   $imie = $_POST['imie']; 
   $nazwisko = $_POST['nazwisko'];
   $adres = $_POST['adres'];
   $tel = $_POST['tel'];
   $uwagi = $_POST['uwagi'];
   
++$i;
   
   }   
?>

<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Odczytane dane z tabeli klient</font></tr>

<table align="center">
                <tr>
				  <td>Imie :  <input type="text" name="imie" value="<? echo $imie; ?>"></td>
                  <td>Nazwisko :  <input type="text" name="nazwisko" value="<? echo $nazwisko; ?>"></td>
                  <td>Adres :  <input type="text" name="adres" value="<? echo $adres; ?>"></td>
                  <td>Telefon :  <input type="text" name="tel" value="<? echo $tel; ?>"></td>
				  <td>Uwagi :  <input type="text" name="uwagi" value="<? echo $uwagi; ?>"></td>
                </tr>
</table>
</div>
</br></br></br></br></br>

<div id='tabela'>

<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Dodawanie zlecenia</font></tr>
</br></br></br></br></br>

<?
 
If (isset($_POST['data_przy'])){
	
  
  $zl = $_GET['zl'];
  $data_przy = $_POST['data_przy'];
  $imie = $_POST['imie'];
  $nazwisko = $_POST['nazwisko'];
  $adres = $_POST['adres'];
  $tel = $_POST['tel'];
  $rodz_urz = $_POST['rodz_urz'];
  $model = $_POST['model'];
  $nr_fabr = $_POST['nr_fabr'];
  $opis_ust = $_POST['opis_ust'];
  $uwagi = $_POST['uwagi'];
  $idKlient = $_GET['Id'];
  
  
  $sql = "INSERT INTO serwis(imie, nazwisko, idKlient) VALUES 
                          ('$imie','$nazwisko','$Id')";

 if (mysqli_query($conn, $sql)) {
  $last_id = mysqli_insert_id($conn);
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
mysqli_close($conn);

?>

''

proszę o pomoc bo siedzę już ze 3 dni i nic
Na początek pobieram dane z wprowadzonego nowego klienta
Potem chcę dodać do tego klienta inne dane jak rodzaj sprzętu datę i inne

0

Rozbij może problem na części.
Pierwsze co to może wykonaj tylko to zapytanie z Insert na sztywnych danych.

$sql = "INSERT INTO serwis(imie, nazwisko, idKlient) VALUES 
                          ('$imie','$nazwisko','$Id')";

Jak zadziała to popatrz po kolei co gdzie Ci się przesyła. Mieszasz tam jakieś formularze, przypisujesz wartości do tablicy $_POST i szczerze to ja nie do końca wiem jaki ma być przepływ tych danych. Masz warunek sprawdzający If (isset($_POST['data_przy'])) Czy tu w ogóle dochodzisz? Z jakiej części kodu metodą POST przychodzą te dane? Dlaczego mieszasz tam GET i POST?

0

Teraz ten GET i POST faktycznie jest pomieszane ale dlatego że już nie wiedziałem dlaczego nie działa
If (isset($_POST['data_przy'])- to daję aby przy otworzeniu strony nie dodawało mi pustych danych
$sql = "INSERT INTO serwis(imie, nazwisko, idKlient) VALUES ('$imie','$nazwisko','$Id')"; jak podstawię za $Id jakąś wartość np 10 to dodaje mi tą wartość dla idKlient

0

To żebyś wszedł do tego warunku coś pod tym kluczem w tablicy być musi isset($_POST['data_przy'] Czy masz jakiś formularz z którego te dane przychodzą?

0
<div class='tabela'>
  <section id="home">    
      <h2 align="center">Rejestracja nowego klienta </h2>
        <form action="index.php?p=new_klient_dane" method="post">
            <table align="center">
                <tr>
                  <td><input type="text" name="data_przy" placeholder="Data przyjęcia" required ></td>
                </tr>
		        <tr>
                  <td><input type="text" name="rodz_urz" placeholder="Rodzaj urządzenia" required ></td>
                  <td><input type="text" name="model" placeholder="Model" required ></td>
                  <td><input type="text" name="nr_fabr" placeholder="Nr fabryczny" required ></td>
                  <td><input type="text" name="uwagi" placeholder="Uwagi" required ></td>
                </tr>
		      <table align="center">
			     <tr>
                  <td><input type="text" name="opis_ust" placeholder="Opis usterki" required ></td>
			     </tr>
		      </table>
                    <br></br>
                     <button type="submit">Dodaj dane</button>
                 </td>
            </table>
        </form>    
  </section>
</div> 

taki formularz jest na tej samej stronie co kod wyżej

0

Czyli wszystko masz w jednym pliku? Kod jest za duży żeby go tu wkleić?
Rozbij to na pliki. Spróbuj odesparować widoki czyli HTML od logiki.

0
  
  <?php
 $Id = $_GET['Id'];


if(is_null($Id)) {$Id=102;}
 //echo '<br>przesłane id klienta to ='.$Id;
 
 require ('connect.php');// POŁĄCZENIE Z BAZĄ

$query=" SELECT * FROM klient WHERE Id='$Id'";
$result=mysqli_query($conn, $query);
$num=mysqli_num_rows($result);
// ====  ??? mysqli_close($conn);

while($row = mysqli_fetch_assoc($result)) {  
   $imie = $_POST['imie']; 
   $nazwisko = $_POST['nazwisko'];
   $adres = $_POST['adres'];
   $tel = $_POST['tel'];
   $uwagi = $_POST['uwagi'];
   
++$i;
   
   }   
?>

<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Odczytane dane z tabeli klient</font></tr>

<table align="center">
                <tr>
				  <td>Imie :  <input type="text" name="imie" value="<? echo $imie; ?>"></td>
                  <td>Nazwisko :  <input type="text" name="nazwisko" value="<? echo $nazwisko; ?>"></td>
                  <td>Adres :  <input type="text" name="adres" value="<? echo $adres; ?>"></td>
                  <td>Telefon :  <input type="text" name="tel" value="<? echo $tel; ?>"></td>
				  <td>Uwagi :  <input type="text" name="uwagi" value="<? echo $uwagi; ?>"></td>
                </tr>
</table>
</div>
</br></br></br></br></br>

<div id='tabela'>

<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Dodawanie zlecenia</font></tr>
</br></br></br></br></br>

<?
 
If (isset($_POST['data_przy'])){
	
  
  $zl = $_GET['zl'];
  $data_przy = $_POST['data_przy'];
  $imie = $_POST['imie'];
  $nazwisko = $_POST['nazwisko'];
  $adres = $_POST['adres'];
  $tel = $_POST['tel'];
  $rodz_urz = $_POST['rodz_urz'];
  $model = $_POST['model'];
  $nr_fabr = $_POST['nr_fabr'];
  $opis_ust = $_POST['opis_ust'];
  $uwagi = $_POST['uwagi'];
  $idKlient = $_GET['Id'];
  
  
  $sql = "INSERT INTO serwis(imie, nazwisko, idKlient) VALUES 
                          ('$imie','$nazwisko','$Id')";

 if (mysqli_query($conn, $sql)) {
  $last_id = mysqli_insert_id($conn);
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
mysqli_close($conn);

?>
</div>

<div class='tabela'>

  <section id="home">    
      <h2 align="center">Rejestracja nowego klienta </h2>
        <form action="index.php?p=new_klient_dane" method="post">
            <table align="center">
                <tr>
                  <td><input type="text" name="data_przy" placeholder="Data przyjęcia" required ></td>
                </tr>
		        <tr>
                  <td><input type="text" name="rodz_urz" placeholder="Rodzaj urządzenia" required ></td>
                  <td><input type="text" name="model" placeholder="Model" required ></td>
                  <td><input type="text" name="nr_fabr" placeholder="Nr fabryczny" required ></td>
                  <td><input type="text" name="uwagi" placeholder="Uwagi" required ></td>
                </tr>
		      <table align="center">
			     <tr>
                  <td><input type="text" name="opis_ust" placeholder="Opis usterki" required ></td>
			     </tr>
		      </table>
                    <br></br>
                     <button type="submit">Dodaj dane</button>
                 </td>
            </table>
        </form>    
  </section>
</div> 


po dodaniu klienta przenosi mnie tu

0
<?php
 If (isset($_POST['tel'])){
  
require ('connect.php');// POŁĄCZENIE Z BAZĄ

  $firstName = $_POST['imie'];
  $lastName = $_POST['nazwisko'];
  $adres = $_POST['adres'];
  $tel = $_POST['tel'];
  $uwagi = $_POST['uwagi'];

$sql = "INSERT INTO klient(imie, nazwisko, adres, tel, uwagi) VALUES 
                          ('$firstName','$lastName','$adres','$tel','$uwagi')" 
              
              or die(mysql_error());
			  
              
if (mysqli_query($conn, $sql)) {
  $last_id = mysqli_insert_id($conn);
  //echo '<td><a href="/new_klient_dane.php?Id='.$RowsDane[0].'" style="color:#0000c0;" >'.$RowsDane[0].'</a></td>';
  echo "Nowy rekord dodany poprawnie. Dodane id to: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}

?>
</div>

<div class='tabela'>

  <section id="home">    
      <h2 align="center">Dodawanie nowego klienta </h2>
        <form action="index.php?p=new_klient_dane" method="post">
            <table align="center">
                <tr>
                  <td><input type="text" name="imie" placeholder="Imię" required ></td>
                  <td><input type="text" name="nazwisko" placeholder="Nazwisko" required ></td>
                  <td><input type="text" name="adres" placeholder="Adres" required ></td>
                  <td><input type="text" name="tel" placeholder="Telefon" required ></td>
                </tr>
		        <tr>
                  <td><input type="text" name="uwagi" placeholder="Uwagi" required ></td>
                </tr>
                    <br></br>
                     <button type="submit">Dodaj klienta</button>
                 </td>
            </table>
        </form>    
  </section> 
  </div>

to jest dodanie nowego klienta i po tym ten kod wyżej

0

Powiem tak, ciężko nawet będzie to poprawić w tej formie. Ponieważ nie wygląda to na naukę a raczej próbę stworzenia czegoś co może być wykorzystywane zarobkowo to proponuję żebyś zlecił wykonanie tego komuś, bo za wyciek danych zgodnie z RODO/GDPR możesz pożegnać się z firmą.
Jak wszystko masz w index.php to nie ogarniesz tego. Kod jest podatny na wszelkie ataki.
Jeśli jednak chcesz dalej wykonywać to sam, to określ przepływ danych między tymi formularzami i powydzielaj to pod jakieś konkretne URLe najlepiej. Np. dodanie klienta daj pod
strona/customer_add , dodanie zlecenia pod strona/repair_add i po dodaniu klienta czy logowaniu istniejącego daj możliwość przejścia na inną stronę. No chyba, że Twoją intencją jest coś ala single page.
Zobacz moje komentarze.

<?php
 $Id = $_GET['Id'];// A co jeśli tego Id wogole w urlu nie będzie? Masz wtedy błąd 500


if(is_null($Id)) {$Id=102;} // Czemu taki warunek? Tutaj powinieneś raczej przekierowywać na inną stronę lub wyświetlać jakąś treść

 
 require ('connect.php');// POŁĄCZENIE Z BAZĄ

$query=" SELECT * FROM klient WHERE Id='$Id'";
$result=mysqli_query($conn, $query);
$num=mysqli_num_rows($result);
// ====  ??? mysqli_close($conn);

while($row = mysqli_fetch_assoc($result)) {  
   $imie = $_POST['imie'];// Odczytujesz jakieś dane z bazy ale za klienta podstawiasz coś co zostało przesłane formularzem
   $nazwisko = $_POST['nazwisko'];
   $adres = $_POST['adres'];
   $tel = $_POST['tel'];
   $uwagi = $_POST['uwagi'];
   
++$i;
   
   }   
?>
<! --Tu nie ma tabeli więc wiersz jest niepotrzebny, pomijam już fakt CSSa --!>
<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Odczytane dane z tabeli klient</font></tr>

<table align="center">
                <tr>
				  <td>Imie :  <input type="text" name="imie" value="<? echo $imie; ?>"></td>
                  <td>Nazwisko :  <input type="text" name="nazwisko" value="<? echo $nazwisko; ?>"></td>
                  <td>Adres :  <input type="text" name="adres" value="<? echo $adres; ?>"></td>
                  <td>Telefon :  <input type="text" name="tel" value="<? echo $tel; ?>"></td>
				  <td>Uwagi :  <input type="text" name="uwagi" value="<? echo $uwagi; ?>"></td>
                </tr>
</table>
</div>
</br></br></br></br></br>

<div id='tabela'>

<tr align='center' width='80px'><font size='3' font color='blue' face='verdana'>Dodawanie zlecenia</font></tr>
</br></br></br></br></br>

<?
 
If (isset($_POST['data_przy'])){ // Co będzie jak przyjdzie Ci formularz tylko z tą jedną wartością pola a bez reszty. Error 500
	
  
  $zl = $_GET['zl'];
  $data_przy = $_POST['data_przy'];
  $imie = $_POST['imie'];
  $nazwisko = $_POST['nazwisko'];
  $adres = $_POST['adres'];
  $tel = $_POST['tel'];
  $rodz_urz = $_POST['rodz_urz'];
  $model = $_POST['model'];
  $nr_fabr = $_POST['nr_fabr'];
  $opis_ust = $_POST['opis_ust'];
  $uwagi = $_POST['uwagi'];
  $idKlient = $_GET['Id']; // Jak na początku pomieszanie POST z GET i nic nie wiadomo.
  
  
  $sql = "INSERT INTO serwis(imie, nazwisko, idKlient) VALUES 
                          ('$imie','$nazwisko','$Id')"; // TO jest SQL injection

 if (mysqli_query($conn, $sql)) {
  $last_id = mysqli_insert_id($conn);
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
mysqli_close($conn);

?>
</div>

<div class='tabela'>

  <section id="home">    
      <h2 align="center">Rejestracja nowego klienta </h2>
        <form action="index.php?p=new_klient_dane" method="post">
            <table align="center">
                <tr>
                  <td><input type="text" name="data_przy" placeholder="Data przyjęcia" required ></td>
                </tr>
		        <tr>
                  <td><input type="text" name="rodz_urz" placeholder="Rodzaj urządzenia" required ></td>
                  <td><input type="text" name="model" placeholder="Model" required ></td>
                  <td><input type="text" name="nr_fabr" placeholder="Nr fabryczny" required ></td>
                  <td><input type="text" name="uwagi" placeholder="Uwagi" required ></td>
                </tr>
		      <table align="center">
			     <tr>
                  <td><input type="text" name="opis_ust" placeholder="Opis usterki" required ></td>
			     </tr>
		      </table>
                    <br></br>
                     <button type="submit">Dodaj dane</button>
                 </td>
            </table>
        </form>    
  </section>
</div> 

0
jurek1980 napisał(a):

Powiem tak, ciężko nawet będzie to poprawić w tej formie. Ponieważ nie wygląda to na naukę a raczej próbę stworzenia czegoś co może być wykorzystywane zarobkowo to proponuję żebyś zlecił wykonanie tego komuś, bo za wyciek danych zgodnie z RODO/GDPR możesz pożegnać się z firmą.
Jak wszystko masz w index.php to nie ogarniesz tego. Kod jest podatny na wszelkie ataki.
Jeśli jednak chcesz dalej wykonywać to sam, to określ przepływ danych między tymi formularzami i powydzielaj to pod jakieś konkretne URLe najlepiej. Np. dodanie klienta daj pod
strona/customer_add , dodanie zlecenia pod strona/repair_add i po dodaniu klienta czy logowaniu istniejącego daj możliwość przejścia na inną stronę. No chyba, że Twoją intencją jest coś ala single page.

Ja tego używam dla siebie, taka bazę stworzyłem aby mieć dane napraw które czynię aby jak usterki się powtarzają sprawdzić sobie co naprawiałem. Baza jest na smallhost.pl jest dobrze zabezpieczona poprzez FTP tylko z konkretnego adresu można się zalogować, tak samo baza SQL

1

Ale masz dane ludzi a kod podatny na SQL Injection i tak zrobiony kod da mi dostęp do bazy bez problemu.
Jak wyciągnę dane klientów to możesz mieć problem.

0

Pewnie masz rację , muszę poczytać o tym sql injection

0

Jeśli chcesz to dalej robić rozbij kod chociaż na pliki i rozdziel HTML od logiki.

0
jurek1980 napisał(a):

Jeśli chcesz to dalej robić rozbij kod chociaż na pliki i rozdziel HTML od logiki.

Nie bardzo rozumiem co znaczy rozdziel HTML od logiki możesz jaśniej ?

1
jurek1980 napisał(a):
<table align="center">
                <tr>
				  <td>Imie :  <input type="text" name="imie" value="<? echo $imie; ?>"></td>
                  <td>Nazwisko :  <input type="text" name="nazwisko" value="<? echo $nazwisko; ?>"></td>
                  <td>Adres :  <input type="text" name="adres" value="<? echo $adres; ?>"></td>
                  <td>Telefon :  <input type="text" name="tel" value="<? echo $tel; ?>"></td>
				  <td>Uwagi :  <input type="text" name="uwagi" value="<? echo $uwagi; ?>"></td>
                </tr>
</table>

Użyj też htmlSpecialChars() bo oprócz SqlInjection masz też podatność na XSS:

<table align="center">
  <tr>
    <td>Imie :  <input type="text" name="imie" value="<? echo htmlSpecialChars($imie); ?>"></td>
    <td>Nazwisko :  <input type="text" name="nazwisko" value="<? echo htmlSpecialChars($nazwisko); ?>"></td>
    <td>Adres :  <input type="text" name="adres" value="<? echo htmlSpecialChars($adres); ?>"></td>
    <td>Telefon :  <input type="text" name="tel" value="<? echo htmlSpecialChars($tel); ?>"></td>
    <td>Uwagi :  <input type="text" name="uwagi" value="<? echo htmlSpecialChars($uwagi); ?>"></td>
  </tr>
0

Może lepiej zamiast uczyć się php zacząć tworzyć taka bazę z wordpress , czy ktoś ma jakieś doświadczenie czy nadaję się to do moich celów? czyli baza klientów i naprawy -zlecenia
zainstalowałem na swoim serwerze, ale na razie to czarna magia hehe

0

Zależy co chcesz robić. Nie kojarzę wtyczki typu "obsługa serwisu" dla Wordpress, i pewnie też musiałbyś to przystosować do swoich potrzeb poprzez kod.
Chyba najważniejsze to określić co potrzebujesz. Tu już coś masz. Dziurawe, ale masz.

1

@audioserwis: Ale jeżeli chcesz "przerobić" ewentualnie sam napisać taki serwis to potrzebujesz tak czy siak nauczyć się PHP. Oczywiście, myślę, że znajdzie się parę wtyczek (zerknij sobie: https://wordpress.org/plugins/computer-repair-shop/ - jeżeli to jest reklama to sorki, to nie jest moja wtyczka - od razu zaznaczam) , które zrobią to za Ciebie ale to już sam sobie musisz zadać pytanie czy chcesz w przyszłości coś robić w PHP.

I jeszcze jedna taka mała uwaga - na Twoim etapie pisania kodu to jeszcze daleka droga do "zbudowania" aplikacji typu naprawa/zlecenia. Pomijam już fakt, że uda Ci się napisać działający prototyp ale do tego dochodzą jeszcze odpowiednie zabezpieczenia. Bądź co bądź będziesz operował na bazie danych użytkowników i uwierz mi, nie chcesz mieć wycieku danych.

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