Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Libre Office nu vad liniile

Modalitați amuzante și ...

O disparitie de ani buni, Acces D...

Mancarea e scumpa
 Parere achiziționare BMW G20

Schimbarea bateriei moderne la VA...

Rostschreck Lidl

Si noi suntem Florin Piersic? / J...
 Rascumparare euroobligatiuni (pri...

Detartraj partial slatina

Cu ce pot izola fonic peretii pen...

Telefon cu senzor compass BUN
 Blocare google chrome cu master p...

Instalare Siemens NX pe macbook

sfat achizitie telefon pana in 20...

Stoc Smart CAM TV
 

Crearea unei pagini noi la selectarea unei linii

- - - - -
  • Please log in to reply
10 replies to this topic

#1
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Salut,

Încerc să-mi dezvolt un proiect simplu și m-am blocat.
Lucrez cu o bază de date. Câteva din inregistrările din baza de date sunt adăugate într-un tabel și oferă un fel de preview  utilizatorului.
Nu știu cum aș putea face ca atunci când dă clik pe o întregistrare să i se încarce o nouă pagină cu toate proprietătile din respectivul rând.

În preview afișez doar șase atribute pentru fiecare înregistrare, iar de tot sunt 30 când dau click aș vrea să se încarce o pagină nouă cu toate atributele.
Nu aș vrea să fac asta la mână și să creez pagini cu interogarea tuturor câmpurilor și să o pun ca link pentru că nu ar fi foarte eficient.

Are cineva vreo idee despre cum aș putea face asta? Sau poate chiar o idee mai buna :D

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
Pasand noii pagini id'ul randului, ce te impiedica sa afisezi toate informatiile?

Edited by dani.user, 11 March 2017 - 18:35.


#3
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Asta nu e nici o problema, un select where am mai văzut :)) problema e ca nu stiu cum sa creez noua pagina automat cu noile date.

#4
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,631
  • Înscris: 30.07.2003
Elegant e sa ceri din browser via Ajax catre PHP datele in cauza, de aici te duci pe SQL sa le iei si inapoi in browser cu Javascript le pui asa cum doresti (sa fie cursiva povestea, nu hop alta pagina, clipeste imaginea, urat). Daca nu, nu inteleg cum de nu poti in PHP sa parcurgi datele in cauza si sa le arunci browserului cum doresti!

Edited by neagu_laurentiu, 12 March 2017 - 10:36.


#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
  • Varianta "clasica", aiurea ca arhitectura: creezi detalii_rand.php care primeste drept input id-ul randului si afiseaza toate detaliile (grija la drepturi de acces si toate cele)
  • Varianta MVC, in controller adaugi o noua metoda ce primeste id-ul randului
  • Varianta cu MVC + API, expui in controller o metoda ca mai sus, doar ca returneza un json cu informatiile necesare, nu randeaza o pagina intreaga
  • Varianta cu ascuns datele: trimiti de la bun inceput toate detaliile randului daca nu ingreuneaza prea tare sistemul, dar afisezi selectiv doar o parte, iar daca userul apasa vreun buton afisezi si restul
Solutii sunt multe. Tutorialele introductive in php/mysql prezinta bazele pentru a intelege cat de cat ce se intampla. Sunt doar o introducere, nu pot fi aplicate cu succes, pe termen lung, in productie. Mai trebuie multe notiuni de software engineering pana se poate crea un sistem flexibil ce sa nu devina un calvar de intretinut dupa doar cateva saptamani.

#6
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011

View Postneagu_laurentiu, on 12 martie 2017 - 10:34, said:

Elegant e sa ceri din browser via Ajax catre PHP datele in cauza, de aici te duci pe SQL sa le iei si inapoi in browser cu Javascript le pui asa cum doresti (sa fie cursiva povestea, nu hop alta pagina, clipeste imaginea, urat). Daca nu, nu inteleg cum de nu poti in PHP sa parcurgi datele in cauza si sa le arunci browserului cum doresti!

De parcurs nu e problema, nu reusesc sa-l fac functional cu link-ul. Ce fac nu trebuie sa fie ceva complex, o folosesc doar ca sa trimit niste informatii de la o aplicatie desktop si sa le afisez intr-o interfata web.
Incerc ca de exemplu in index.php sa am un tabel cu toate intregistrarile (doar o parte din coloane) si cand da clik sa mearga in details.php?id=valoare

View Postdani.user, on 12 martie 2017 - 10:40, said:

  • Varianta "clasica", aiurea ca arhitectura: creezi detalii_rand.php care primeste drept input id-ul randului si afiseaza toate detaliile (grija la drepturi de acces si toate cele)
  • Varianta MVC, in controller adaugi o noua metoda ce primeste id-ul randului
  • Varianta cu MVC + API, expui in controller o metoda ca mai sus, doar ca returneza un json cu informatiile necesare, nu randeaza o pagina intreaga
  • Varianta cu ascuns datele: trimiti de la bun inceput toate detaliile randului daca nu ingreuneaza prea tare sistemul, dar afisezi selectiv doar o parte, iar daca userul apasa vreun buton afisezi si restul
Solutii sunt multe. Tutorialele introductive in php/mysql prezinta bazele pentru a intelege cat de cat ce se intampla. Sunt doar o introducere, nu pot fi aplicate cu succes, pe termen lung, in productie. Mai trebuie multe notiuni de software engineering pana se poate crea un sistem flexibil ce sa nu devina un calvar de intretinut dupa doar cateva saptamani.

Uite ce am facut eu pana acum doar ca nu prea merge..

Varianta initiala (print doar cateva coloane din db intr un tabel).
<?php
$host = "localhost";
$user = "user";
$pass = "";
$db_name = "db";
//create connection
$connection = mysqli_connect($host, $user, $pass, $db_name);
//test if connection failed
if(mysqli_connect_errno()){
die("connection failed: "
	 . mysqli_connect_error()
	 . " (" . mysqli_connect_errno()
	 . ")");
}
//get results from database
$result = mysqli_query($connection,"SELECT * FROM test");
$all_property = array(); //declare an array for saving property
//showing property
echo '<table class="data-table">
	 <tr class="data-heading">'; //initialize table tag
while ($property = mysqli_fetch_field($result)) {
echo '<td>' . $property->name . '</td>'; //get field name for header
array_push($all_property, $property->name); //save those to array
}
echo '</tr>'; //end tr tag
//showing all data
while ($row = mysqli_fetch_array($result)) {
echo "<tr>";
foreach ($all_property as $item) {
	 echo '<td>' . $row[$item] . '</td>'; //get items using property value
}
echo '</tr>';
}
echo "</table>";
?>


Apoi am incercat ceva modificari dupá cum am zis mai sus și arată cam așa

<?php
$host = "localhost";
$user = "user";
$pass = "";
$db_name = "db";
//create connection
$connection = mysqli_connect($host, $user, $pass, $db_name);
//test if connection failed
if(mysqli_connect_errno()){
die("connection failed: "
	 . mysqli_connect_error()
	 . " (" . mysqli_connect_errno()
	 . ")");
}
//get results from database
$result = mysqli_query($connection,"SELECT * FROM test");
$all_property = array(); //declare an array for saving property
$thead=array();
$tbody=array();
// Set Properties
$all_property = array('id','first','sec','school','data'); 
$thead=sprintf('<tr>%s</tr>',implode('',$all_property)); // implode & put into a proper row
// Get Data
while ($row = mysqli_fetch_array($result)) {
	 $tr=array();
	 foreach ($all_property as $item) {
		 // Here is a solution: Make id clickable
			 if($item=='id')
				 $tr[]=sprintf('<th><a href="details.php?id=%s">%s</a></th>',$item,$item);
			 else $tr[]=sprintf('<td>%s</td>');
	 }
	 $tbody[]=sprintf('<tr>%s</tr>',implode('',$tr));
}
?>


<table class="">
<thead>
	 <?php print $thead; ?>
</thead>
<tbody>
	 <?php print $tbody; ?>
<tbody>
</table>


Însă primesc eroare pentru fiecare coloana de la sprintf.

Edited by adi94, 12 March 2017 - 15:38.


#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
sprintf('<td>%s</td>') aici nu-i dai nici un parametru

#8
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Da asta era, însă am mai rămas cu o eroare la lina 48 pentru tbody..
[ https://i.imgur.com/ECy1yr0.png - Pentru incarcare in pagina (embed) Click aici ]

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
Mesajul de eroare e foarte sugestiv. $tbody al tau e array, nu string.

#10
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Am  scăpat de eroare după ce am băgat într-un for însă tot nu funcționează cum ar trebui...
<?php
  for($i = 0; $i < count($tbody); ++$i) {
   print ($tbody[$i]); }
?>


În pagina principala îmi afișează pentru fiecare rand datele de aici
$all_property = array('id','first','sec','school','data');

în locul celor din db iar pe detailes.php îmi spune că thead nu e definită. Se pare că nu vrea să-mi dea pace așa ușor.

Edited by adi94, 12 March 2017 - 16:39.


#11
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Am rezolvat pana la urma. Multumesc :)

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate