Creare dinamic coloană într-un tabel din MySQL

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
bvlucretiu
Mesaje: 88

Creare dinamic coloană într-un tabel din MySQL

Bună!
Am un tabel într-o bază de date unde în cazuri de necesitate am nevoie să inserez o coloană nouă, dar acest lucru trebuie să îl produc din interiorul unei pagini de insert (în interfața pentru client) pentru a introduce noi ingrediente preparatului respectiv; cu ce comandă sau care ar fi cea mai bună soluție în această situație!?
Ce îmi recomandați?
Vă mulțumesc!

misat Mesaje: 22
Daca inteleg corect, ai dori sa faci un anumit lucru pe server "dind o comanda" pe client fara a reincarca pagina....
Pentru acest lucru cea mai buna solutie este sa utilizezi ajax, utilizind javascript poti face cereri la serverul tau fara a reincarca pagina. Daca ai in pagina incarcat jQuery, atunci acesta ofera potibilitati de a utiliza ajax foarte simplu.

MarPlo Mesaje: 4343
Salut
Din ce am inteles, daca vrei sa creezi o noua coloana din php in tabel mysql, poti folosi acest cod:

Cod: Selectaţi tot

$sql ="ALTER TABLE table_name
ADD COLUMN column_name VARCHAR(1000) NOT NULL";

bvlucretiu Mesaje: 88
Bună!
Am de fapt o pagină unde se crează rețete (culinare, dulciuri,etc.) și am nevoie, la introducerea ingredientelor, în raport de câte ingrediente am nevoie să introduc în pagină, un câmp de input (sau toate câmpurile de input necesare unui rând (ouă - buc - 3 sau făină - grame - 300, etc)) pentru adăugarea unui nou ingredient, astfel încât să nu afișez din start 10 rânduri de câmpuri cu input, să am opțiunea de a adăuga un nou rând de câmpuri input în raport de necesitate prin apelarea unui link, iar bineînțeles în cazul necesității mai multor coloane cu ingrediente(în cazul unei rețete cu mai multe ingrediente) în tabelul MySQL, să existe posibilitatea de a crea automat o coloană nouă pentru ingredientul respectiv!
Nu știu dacă am reușit să mă fac prea bine înțeles, dar cred că am fost cât se poate de explicit!
Vă mulțumesc pentru înțelegere și pentru interesul acordat!
Toate bune!

andras Mesaje: 430
Mie nu-mi pare o idee prea buna sa modifici structura unui tabel din baza de date in functie de optiunile utilizatorului, dar ma rog, e doar parerea mea. Eu as rezolva altfel, poate o lista de ingrediente din care sa aleaga,poate o tabela de ingrediente, depinde de situatie.

bvlucretiu Mesaje: 88
Bună!
Ok, pot eu să fac mai multe coloane în tabelul bazei de date și bineînțeles ingredientele toate sunt într-o listă, practic tot o coloană în același tabel care chiar și există, însă asta ar însemna să fac coloane suficiente pentru toate ingredientele plus cantitățile ingredientelor plus unitățile de măsură fiecărui ingredient și este ok și așa însă la încărcarea unei rețete noi aș dori să pot deschide câmpuri de input pentru fiecare nou ingredient, altfel spus să pornesc de la un rând de câmpuri input reprezentând cantitate, UM, ingredient și să am posibilitatea ca la necesitatea inserării unui nou ingredient în rețeta respectivă să pot deschide un nou rând de câmpuri input cu cantitate, UM, ingredient,!
Mulțumec, toate bune!

andras Mesaje: 430
N-as pune ingredientele in coloanele tabelului de retete, as folosi 3 tabele, tabela retete (cu id, denumire), tabela ingrediente (cu id, denumire, um) si a treia tabela ar fi reteta-ingredient de tip many-to-many care sa contina id-ul retetei si id-ul ingredientului (fiecare cimp este Foreign key catre tabela parinte corespunzatoare) si cantitate. As putea face astfel oricite combinatii doresc, la fiecare nou ingredient se adauga o noua inregistrare in tabela reteta-ingredient.
E doar o sugestie, nu stiu ce ai in baza de date, dar o relatie manytomany cred ca s-ar potrivi.

bvlucretiu Mesaje: 88
Am înțeles idea, mulțumesc mult pentru ea însă acest aspect nu rezolvă problema pentru care eu am deschis acest subiect pe forum!

andras Mesaje: 430
Am avut o aplicatie asemanatoare in care la actionarea unui buton se adaugau in pagina anumite elemente (select, input) imediat sub buton (la fiecare actionare a butonului se adauga un nou rind cu aceste elemente), am rezolvat cu o functie JavaScript, iar dupa introducerea tuturor elementelor necesare si dupa completarea lor aceste se salvau o singura data in baza de date cu o functie ajax. Functia JS arata asa:

Cod: Selectaţi tot

<script>
function addTextField(elm, user, proiect, locatie, ore, ores){

	//alert('');
	var fld_nr='';
	var varoff='Nu';
	var varon='Da';
	var valoff='0';
	var valon='1';
var add_el ='';
		  /////////////////////////
add_el +='<div id="divux"> ';		  
add_el +='<br />&nbsp; User'+ fld_nr +'<select  required="required" name="df_user[]" style="max-width: 100px;">';  
add_el +='<option ></option>';
  for(var i=0; i< user.length; i++){
    add_el +='<option value="'+ user[i][0] +'">'+ user[i][2] +'</option>';
  }
add_el +='</select>';  
add_el +='&nbsp; Proiect'+ fld_nr +' <select required="required" name="df_proiect[]" style="max-width: 120px;">';  
add_el +='<option ></option>';
  for(var i=0; i< proiect.length; i++){
    add_el +='<option value="'+ proiect[i][0] +'">'+ proiect[i][1] +'</option>';
  }
add_el +='</select>';  
add_el +='&nbsp; Locatie'+ fld_nr +' <select required="required" name="df_locatie[]" style="max-width: 100px;">';  
add_el +='<option ></option>';
  for(var i=0; i< locatie.length; i++){
    add_el +='<option value="'+ locatie[i][0] +'">'+ locatie[i][1] +'</option>';
  }
add_el +='</select>'; 
add_el +='&nbsp; Ore normale'+ fld_nr +' <select style="font-size: 14px; font-weight:bold;" required="required" name="df_ore[]">';  
  for(var i=0; i< ore.length; i++){
	  if (i==10) {add_el +='<option selected ="selected" value="'+ ore[i][0] +'">'+ ore[i][1] +'</option>';}
	  else {add_el +='<option value="'+ ore[i][0] +'">'+ ore[i][1] +'</option>';}	   
  }
add_el +='</select>'; 
add_el +='&nbsp; Ore suplim.'+ fld_nr +' <select style="font-size: 14px; font-weight:bold;" required="required" name="df_ores[]">'; 
  for(var i=0; i< ores.length; i++){
 	  if (i==0) {add_el +='<option selected ="selected" value="'+ ores[i][0] +'">'+ ores[i][1] +'</option>';}
	  else {add_el +='<option value="'+ ores[i][0] +'">'+ ores[i][1] +'</option>';}	   
  }
add_el +='</select>';  
add_el += '&nbsp; Concediu'+ fld_nr +' <select style="font-size: 14px; font-weight:bold;" name="df_conc[]">';  
add_el +='<option selected ="selected" value="'+ valoff +'">'+ varoff +'</option>'; 
add_el +='<option value="'+ valon +'">'+ varon +'</option>'; 
add_el +='</select>'; 
add_el += '&nbsp; Conc.med.'+ fld_nr +' <select style="font-size: 14px; font-weight:bold;" name="df_concm[]">';  
add_el +='<option selected ="selected" value="'+ valoff +'">'+ varoff +'</option>'; 
add_el +='<option value="'+ valon +'">'+ varon +'</option>'; 
add_el +='</select>'; 
add_el +='&nbsp; Expl.'+ fld_nr +'<input type="text" name="df_expl[]" autocomplete="off" style="max-width: 120px;" />&nbsp;';
add_el +=' <img src="/atis/img/cancel_18.png" name="sterge[]" onclick="delElmP(this);"/>  ';
add_el +='</div>';  
elm.insertAdjacentHTML('afterend', add_el);  //add the element	
 }
 </script>
 
genereaza elemente input, select (combo, cu date luate din tabele) si se foloseste de functia insertAdjacentHTML(), iar valorile elementelor sint de tip array. Te poti inspira din asta, nu stiu in ce masura te va ajuta dar am facut-o mai demult, deci am cam uitat, ti-am pus-o doar ca sugestie, cam cu atit te pot ajuta.

Subiecte similare