Wstawianie rekordów do bazy

0

Witam serdecznie. Z góry przepraszam za pytanie, ale potrzebuję pomocy z pewnym skryptem. Skrypt ma:

  • Pobierać dane z formularza
  • Wyświetlać napis „Czytelnik: .................. został dodany do bazy danych” (w miejscu kropek należy umieścić nazwisko pobrane z formularza)
  • Tworzyć kod czytelnika składający się z dwóch początkowych liter imienia, dwóch ostatnich cyfr z roku urodzenia oraz dwóch początkowych liter nazwiska (wszystkie litery w kodzie powinny być małe)
  • Wysyła do bazy danych zmodyfikowane zapytanie 1 (INSERT INTO czytelnicy(imie,nazwisko,kod) VALUES('Anna','Michalak','an05mi');), wstawiające do tabeli czytelnicy nowy rekord zawierający imię i nazwisko pobrane z formularza oraz kod czytelnika wygenerowany w skrypcie

Mam problem w momencie wyświetlenia nazwy dodanego użytkownika, oraz tego, by napisać część z tworzenia kodu.
Jestem strasznie zielony, oraz początkujący z php więc proszę o wyrozumiałość.

<?php
if(isset($_POST["submit"]))
{
  czytelnik();
}
function czytelnik(){

  $imie = $_POST['imie'];
  $nazwisko = $_POST['nazwisko'];
  $rokurodzenia = $_POST['rokurodzenia'];

  $connection = @mysqli_connect('localhost', 'root', '' ,'biblioteka')
  or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  $wn = mysqli_query($connection, "INSERT INTO czytelnicy(imie,nazwisko) VALUES ('$imie','$nazwisko')");
  while($z1= mysqli_fetch_array($wn))
  {
    echo "Czytelnik:".$z1["imie"]." ".$z1["nazwisko"]."został dodany do bazy danych";
  }
  mysqli_close($connection);
}
?>
0

Przede wszystkim: jaki problem masz konkretnie? :-)

0

@Patryk27: Nie potrafię:
-wypisać użytkownika, który został aktualnie wpisany do bazy, ponieważ dostaje błąd (ma się wyświetlić jego nazwisko na stronie html) "mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in" ale rekord zostaje dodany do bazy
-dopisać do tego części skryptu, która tworzy kod czytelnika składający się z dwóch początkowych liter imienia, dwóch ostatnich cyfr z roku urodzenia oraz dwóch początkowych liter nazwiska (wszystkie litery w kodzie powinny być małe) np. an05mi
Jedynie co to udało mi się wygrzebać z waszej strony to to, że muszę użyć:

SELECT CONCAT(LEFT(nazwisko,2), LEFT(imie,1),id) AS "kod_pracownika" FROM pracownicy;
2

nie potrafię [...] wypisać użytkownika, który został aktualnie wpisany do bazy

Zapytanie typu INSERT INTO nie zwraca rezultatów, zatem nie ma sensu uruchamiać na nim mysqli_fetch_array() (ta funkcja ma sens wyłącznie dla zapytań typu SELECT); wystarczy:

echo "Czytelnik:".$imie." ".$nazwisko."został dodany do bazy danych";

Btw, poczytaj o PDO oraz parameter binding - obecnie Twój kod podatny jest na tzw. SQL injection (spróbuj jako imię lub nazwisko wpisać coś zawierającego apostrofy).

nie potrafię [...] dopisać do tego części skryptu, która tworzy kod czytelnika składający się z dwóch początkowych liter imienia, dwóch ostatnich cyfr z roku urodzenia oraz dwóch początkowych liter nazwiska (wszystkie litery w kodzie powinny być małe) np. an05mi

Kod czytelnika powinien / może być zapisywany do bazy danych? Jeśli tak, dodałbym do tabeli czytelnicy nową kolumnę o nazwie kod i generowałbym go po stronie PHP za pomocą substr.

0

@Patryk27:
Jestem zapoznany z PDO, ale to jest zadanie egzaminacyjne ee09 i chyba nie mogę używać PDO na egzaminie, ale to i tak bez znaczenia, bo to ma po prostu działać. Bardzo dziękuję za pomoc jeden problem mam już z głowy. "Kod czytelnika powinien / może być zapisywany do bazy danych?" -Tak dokładnie już posiadam taką kolumnę:
screenshot-20201116205745.png

1

Tak dokładnie już posiadam taką kolumnę:

Ok, to świetnie - w takim razie IMO nie warto bawić się w budowanie kodu czytelnika po stronie bazy danych i wystarczy oprzeć się o standardowe substr + strtolower w PHPie:

$kod = strtolower(substr(...)) . ($rokurodzenia % 100) . strtolower(substr(...));
$wn = mysqli_query($connection, "INSERT INTO czytelnicy(imie, nazwisko, kod) VALUES ('$imie', '$nazwisko', '$kod')");
0

@Patryk27:
Jeju z nieba mi spadłeś! Zrobiłem coś takiego

$kod = strtolower(substr($imie, 0, 2)) . (substr($rokurodzenia, -2, 2 % 100)) . strtolower(substr($nazwisko, 0, 2)); 

I chyba nie ma w tym błędów więc bardzo dziękuję za pomoc i jestem mega wdzięczny! Pozdrawiam.

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