nav_dugme codeBlog codeBlog
  • početna Početna stranica
  • Sačuvani članci Sačuvani članci
  • Članci
     (spisak)
  • Kontakt
Povratak na vrh stranice

Info & povezani članci Info o članku - dugme

Info

trejler_sat Datum objave: 20.02.2021.

trejler_dokument Jezici: PHP,
MySql

trejler_teg_narandzasti Težina: 6/10

PHP
MySql
baze podataka
upit
internet
web server
localhost
backend
optimizacija
tutorijali
saveti

Tema: PHP

Uvod u PHP i back-end programiranjePovezivanje skripti sa MySql bazama podatakaTutorijal - Kreiranje forme za prijavu korisnika$_GET - Prosleđivanje podataka preko URL-a ($_GET)$_POST - Prosleđivanje podataka preko HTML forme$_SESSION - Direktno prosleđivanje podataka između stranica

Povezani članci

Uvod u web dizajn - 1. deo - Početni koraciPokretanje lokalnog web serveraUvod u relacione baze podataka i SQLUvod u Node.jsUvod u PythonStruktura web adresa i pristup internet stranicamaŠablonske niske u programskim jezicimaHTTP statusni kodoviLokalno skladištenje podataka browsera (sessionStorage, localStorage, cookies)Asinhrono programiranje u JavaScriptuASCII, Unicode i UTF - Predstavljanje znakova na računarimaGNU/Linux - 1. deo - Uvod
Svi članci
Code is like humor. When you have to explain it, it’s bad.
Cory House

Tutorijal - PHP - Ažuriranje praznih kolona u bazi podataka

Facebook LinkedIn Twitter Viber WhatsApp E-mail
zoom_plus zoom_minus bookmark
početna > Članci > Saveti

Uvod

U članku o povezivanju PHP skripti sa MySql bazama podataka kreirali smo strukturu baze podataka, popunili smo tabele sadržajem, i na kraju smo dodali novu praznu kolonu u koju je potrebno uneti e-mail adrese korisnika (za koje smo prethodno uneli sve ostale podatke).

Ovoga puta, pozabavićemo se (upravo), unosom e-mail adresa koje nedostaju.

Na prvi pogled može delovati da se posao ažuriranja praznih kolona mora obaviti ručno, * međutim, uz malo snalaženja i uz korišćenje do sada stečenog znanja, * i (naravno) - pod uslovom da su podaci zapisani u elektronskom obliku (i u prigodnom formatu), zadatak se može rešiti na znatno elegantniji način (s tim da način rešavanja zavisi od toga odakle tačno se preuzimaju podaci) .....

* Ukoliko podataka "nema nigde" i pri tom su e-mail adrese proizvoljne, to jest, nisu formirane po obrascu nalik na ime_prezime@domen.rs i sl, ne preostaje ništa drugo osim ručnog unosa, međutim, radićemo uz pretpostavku da podaci 'ipak postoje', 'negde' (na šta ćemo se detaljnije osvrnuti u nastavku).

Ažuriranje tabele preko MySql upita

Da se podsetimo: tabela koju smo kreirali u poslednjem članku ....

tutorijal_php_azuriranje_praznih_kolona_u_bazi_podataka_01
Slika 1. - Struktura tabele "ucenici", pre dodavanja nove kolone.

.... biće proširena nakon izvršavanja sledeće skripte:

		
<?php
	require_once("povezivanje.php");

	$naziv_tabele = "ucenici";
	
	$upit     = "ALTER TABLE $naziv_tabele ADD email varchar(255) "
	$upit    .= "NOT NULL AFTER prezime";
	$rezultat = mysqli_query($veza, $upit);

	if (!$rezultat)
	{
		echo "Greška pri dodavanju nove kolone.<br>";
		exit();
	}
?>
		
	
Slika 2. - PHP skripta za dodavanje nove kolone ("email").

Između kolona prezime i prosek_ocena, pojaviće se kolona email ....

tutorijal_php_azuriranje_praznih_kolona_u_bazi_podataka_02
Slika 3. - Struktura tabele "ucenici", posle dodavanja nove kolone ("email").

.... međutim - kolona email je prazna - i potrebno je popuniti je odgovarajućim podacima.

U praksi, podaci koje treba uneti u polja tabele (u MySql bazi podataka), mogu se nalaziti: u drugoj tabeli (u istoj ili različitoj bazi podataka), mogu biti u pomoćnoj tabeli u nekom programu za rad sa (običnim) tabelama, ili u tekstualnoj datoteci, a ako baš "nemamo sreće", moramo (ipak) podatke upisati ručno.

Podaci se naravno mogu nalaziti i na nekoj drugoj proizvoljnoj lokaciji, ali, naveli smo najtipičnije slučajeve.

Kao što smo nagovestili, smatraćemo da podaci postoje ('negde'), a u prvom slučaju smatraćemo da su e-mail adrese zapisane u drugoj tabeli, u istoj bazi, pri čemu druga tabela nosi naziv email_pomocna i ima sledeći sadržaj:

		
id | email
----------
 1 | ivanmilanovic@proba.rs
 2 | jovandelic@proba.rs
 3 | zoranamiljkovic@proba.rs
		
	
Slika 4. - Sadržaj tabele "email_pomocna", iz koje ćemo "povlačiti" podatke i upisivati ih u tabelu "ucenici".

Kolona email u tabeli ucenici, sada se može ažurirati preko sledećeg ugnežđenog upita:

		
UPDATE ucenici SET email=
(
	SELECT
		email
	FROM
		email_adrese
	WHERE
		email_adrese.id=ucenici.id
)
		
	
Slika 5. - Upit za ažuriranje tabele "ucenici". U pitanju je ugnežđeni upit koji iz pomoćne tabele preuzima podatke (e-mail adrese) i upisuje ih u glavnu tabelu.

Da pojasnimo: budući da spoljni upit (UPDATE), ne koristi klauzu WHERE, biće obrađeni svi slogovi tabele ucenici, i stoga će za svaki slog tabele ucenici (odnosno, za svaki id), biti pokrenut unutrašnji upitu (SELECT) - preko koga se email adrese iz pomoćne tabele pronalaze i upisuju u tabelu ucenici (pri čemu se id iz tabele ucenici mora poklopiti sa id-om iz pomoćne tabele).

Ukoliko pomoćna tabela postoji i ukoliko se id-ovi poklapaju, sve je u najboljem redu i podaci će biti preuzeti, međutim, svakako postoje i druge potencijalne situacije ....

Ažuriranje podataka preko PHP skripte

Prethodno prikazani metod, prikladan je za upotrebu ukoliko tabela sa traženim podacima već postoji, dok je u suprotnom praktičnije:

  • uneti osnovne podatke u pomoćnu PHP skriptu
  • formatirati podatke kao niz (i potom, takođe preko PHP skripte ....)
  • ažurirati podatke u bazi

Ovoga puta, smatraćemo da postoje podaci koji su kopirani iz tabele (ili iz tekstualne datoteke i sl), smestićemo podatke u pomoćnu PHP datoteku, nazvaćemo datoteku email_adrese.php, unećemo sledeći sadržaj ....

		
ivanmilanovic@proba.rs
jovandelic@proba.rs
zoranamiljkovic@proba.rs
		
	
Slika 6. - Početni sadržaj skripte email_adrese.php (u nastavku, najpraktičnije je da spisak (koji je dobijen kopiranjem iz tabele), bude formatiran kao pomoćna PHP skripta koja sadrži niz podataka).

.... posle čega preostaje samo da se podaci formatiraju.

O tome kako se odjednom može uređivati više redova (u većini editora), pisali smo u članku o efikasnoj obradi teksta, i stoga verujemo da čitaoci mogu (brzo i lako) formatirati datoteku email_adrese.php na sledeći način ....

		
<?php
	$email_adrese = [
		"",
		"ivanmilanovic@proba.rs",
		"jovandelic@proba.rs",
		"zoranamiljkovic@proba.rs",
	];
?>
		
	
Slika 7. - Pomoćna PHP skripta sa e-mail adresama.

.... posle čega se može kreirati i skripta za ažuriranje.

Ažuriranje tabele sa uređenim id-ovima

U prvom slučaju, pretpostavićemo da id-ovi u tabeli ucenici počinju od 1 i da se ređaju "bez preskakanja", iz čega sledi i pretpostavka da id poslednjeg sloga odgovara broju slogova u tabeli (ili, prostije - pretpostavićemo da nije dolazilo do uklanjanja slogova).

U navedenim okolnostima, niz stringova $email_adrese može se koristiti na veoma jednostavan način: budući da je prvi string u nizu prazna niska, indeks prve "prave" niske odgovara id-u prvog sloga u tabeli.

Ako pozovemo sledeću skriptu ....

		
<?php
	// Skripta za povezivanje, koju smo
	// već napisali u prethodnom članku:
	require_once("povezivanje.php")
	or die("Skripta 'povezivanje.php' nije pronađena!");

	// Skripta koju smo kreirali u prethodnom
	// odeljku (elegantnije nego da se email
	// adrese čuvaju u skripti koju
	// trenutno pišemo):
	require_once("email_adrese.php")
	or die("Skripta 'email_adrese.php' nije pronađena!");

	$naziv_tabele = "ucenici";
	$duzina_niza  = count($email_adrese);

	// Vrednost promenljive $i menja se
	// u toku izvršavanja petlje
	// (u rasponu od 1 do $duzina_niza - 1),
	// pri čemu se svaka pojedinačna vrednost
	// promenljive $i ovoga puta poklapa sa
	// nekim od id-ova iz tabele ucenici 

	for ($i = 1; $i < $duzina_niza; ++$i)
	{
		$email    = $email_adrese[$i];
		$upit     = "UPDATE $naziv_tabele SET email='$email' WHERE id=$i";
		$rezultat = mysqli_query($veza, $upit);

		if (!$rezultat)
		{
			echo "Došlo je do greške pri ažuriranju email adrese.<br>";
			echo "id: $i<br>";
			echo "email: $email<br>";
			exit();
		}
	}
?>
		
	
Slika 8. - PHP skripta za ažuriranje polja email (pri čemu se podrazumeva da id-ovi slogova u tabeli počinju od 1, i nema brisanih slogova).

.... podaci će biti ažurirani.

Ažuriranje tabele sa proizvoljnim id-ovima

Ukoliko nije zadovoljen uslov da su id-ovi u tabeli poređani od 1 do n (n = broj slogova), ili, prostije - ako jeste dolazilo do uklanjanja slogova, potrebno je primeniti drugačiji pristup.

Spisak email adresa koji čuvamo u datoteci email_adrese.php potrebno je prepraviti, tako da e-mail adrese budu uparene sa id-ovima:

		
<?php
	$email_adrese = array(
		array(0, ""),
		array(1, "ivanmilanovic@proba.rs"),
		array(2, "jovandelic@proba.rs"),
		array(3, "zoranamiljkovic@proba.rs"),
		array(4, "silvanaarmenulic@proba.rs")
	);
?>
		
	
Slika 9. - Pomoćna skripta sa e-mail adresama, dopunjena id-ovima (sada se skripta može koristiti i kada id-ovi slogova u tabeli ne počinju od 1, i kada postoje "rupe" u id-ovima).

Ovoga puta (mnogo 'zvaničnije' nego u prethodnoj situaciji), definisan je niz nizova, što praktično znači da svaki pojedinačni element osnovnog "niza nizova" sam po sebi predstavlja niz koji se sastoji od dva elementa:

  • element sa indeksom 0 sadrži id sloga
  • element sa indeksom 1 sadrži podatak koji treba ažurirati (e-mail adresu)

Sada je moguće obraćati se elementima multidimenzionalnog niza na način koji je pomalo komplikovaniji - ali i funkcionalniji - u tom smislu da se više ne mora voditi računa o tome da li se indeksi niza poklapaju sa id-ovima slogova (jer svaki od "unutrašnjih nizova" u multidimenzionalnom nizu sadrži i id).

Nova skripta za ažuriranje, ima sledeći oblik:

		
<?php
	require_once("povezivanje.php")
	or die("Skripta 'povezivanje.php' nije pronađena!");

	require_once("email_adrese.php")
	or die("Skripta 'email_adrese.php' nije pronađena!");

	$naziv_tabele = "ucenici";
	$duzina_niza  = count($email_adrese);

	// Vrednosti promenljive $i više se
	// ne poklapaju sa id-ovima iz tabele, ali,
	// to ne predstavlja problem, budući da je
	// id zapisan u "unutrašnjim" nizovima
	// multidimenzionalnog niza $email_adrese
	
	for ($i = 0; $i < $duzina_niza; ++$i)
	{
		$ajDi     = $email_adrese[$i][0];
		$email    = $email_adrese[$i][1];
		$upit     = "UPDATE $naziv_tabele SET email='$email' WHERE id=$ajDi";
		$rezultat = mysqli_query($veza, $upit);

		if (!$rezultat)
		{
			echo "Došlo je do greške pri ažuriranju email adrese.<br>";
			echo "id: $i<br>";
			echo "email: $email<br>";
			exit();
		}
	}
?>
		
	
Slika 10. - Složenija i sveobuhvatnija skripta za ažuriranje email adresa, koja koristi dopunjeni spisak iz pomoćne skripte email_adrese.php (tj. koristi id-ove koji su pripisani e-mail adresama).

Navedeni pristup takođe omogućava i to da se u svakom koraku for petlje ažurira i više od jedne kolone (naravno, pod uslovom da se prethodno dopuni i pomoćna tabela).

Za kraj ....

Kao i u članku o povezivanju regularnih izraza sa programskim jezicima, i ovoga puta smo videli šta se može postići kada se na praktičan način iskorite prednosti dva sistema:

  • baze podataka nemaju kontrolne strukture kao što su grananja i petlje, ali - omogućavaju skladištenje podataka
  • programski jezici sami po sebi ne omogućavaju skladištenje podataka u relacione baze, ali - omogućavaju korišćenje petlji i drugih kontrolnih struktura, i mogu se povezati sa bazama

Automatizacija "dosadnih" zadataka (uz primenu osnovne snalažljivosti i osnovnih tehnika), u velikoj meri "olakšava život" (i programerima, i drugim korisnicima računara) - i upravo je to jedna od glavnih blagodeti programiranja.

Autor članka Nikola Vukićević Za web portal codeblog.rs
Napomena: Tekstovi, slike, web aplikacije i svi ostali sadržaji na sajtu codeblog.rs (osim u slučajevima gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog pismenog odobrenja autora.
© 2020-2026. Sva prava zadržana.
Facebook LinkedIn Twitter Viber WhatsApp E-mail
početna > Članci > Tutorijal - PHP - Ažuriranje praznih kolona u bazi podataka
codeBlog codeBlog
Sajt posvećen popularizaciji kulture i veštine programiranja.
Napomena: Tekstovi i slike na sajtu codeblog.rs (osim u slučajevima, gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog odobrenja autora.
© 2020-2026. Sva prava zadržana.
Facebook - logo
Instagram - logo
LinkedIn - logo
Twitter - logo
E-mail
Naslovna
   •
Uslovi korišćenja
   •
Obaveštenja
   •
FAQ
   •
Kontakt