ugrás a tartalomhoz

Két php közötti kapcsolat

batcher_90 · 2016. Már. 24. (Cs), 14.49
Sziasztok,

Abban szeretném a segítésgeteket kérni, hogy hogyan tudom megvalósítani azt, hogy az egyik php-ben szereplő lekérdezés(SQL) eredményére tudjak hivatkozni egy másik phpben ?!
Válaszokat előre is köszönöm !
 
1

Rengeteg megoldás létezik rá,

smokey · 2016. Már. 24. (Cs), 14.57
Rengeteg megoldás létezik rá, és így a kérdés alapján több rossz megoldás jut eszembe, mint jó. Tudnál kódrészletet küldeni?
2

smokey válasz

batcher_90 · 2016. Már. 24. (Cs), 15.06
if (isset($_POST['search']))
{
$valueToSearch = $_POST['valueToSearch'];
$query = "SELECT * FROM `adattable` WHERE CONCAT (`adat1`, `adat2`, `adat3`, `adat4`) LIKE'%".$valueToSearch."%'";
$search_result = filterTable($query);


ennek az eredményét szeretném egy másik phpben használni
3

Másképp kérdezem: Az a PHP,

smokey · 2016. Már. 24. (Cs), 16.06
Másképp kérdezem: Az a PHP, amiben az eredményt fel szeretnéd használni, az egy inlcudolt PHP? Az a gond, hogy nehéz kitalálni, hogy pontosan mi a célod, viszont egy tippem van: Azt szeretnéd, hogy a $search_result felhasználható legyen mondjuk egy viewban (pl egy kigenerált HTML kódban)? Lehet a te esetedben a másik PHP fájlban simán tudod használni a $search_result változó értékét mindenféle trükk nélkül. Túl nagy és/vagy titkos a két PHP fájl, hogy megoszd? Talán több infó kiderül.
4

szóval : )

batcher_90 · 2016. Már. 24. (Cs), 16.59
A feladat amit meg szeretnék valósítani az az, hogy egy "helyi szerver" oldalon készítettem egy keresőt(php), ami természetesen egy hozzácsatolt adatbázisban keres. Az eredményt egy táblázat formájában kiirattam az oldalra. Ezt a táblázatot szeretném ha le lehetne tölteni excel formátumban egy kattintással. Így vmivel világosabb a feladat??
Bocs a gyenge fogalmazásért de elég kezdő vagyok még ebben. :)
5

Semmi gond, így már teljesen

smokey · 2016. Már. 24. (Cs), 17.47
Semmi gond, így már teljesen világos. Ebben az esetben én annyit csinálnék, hogy a keresést természetesen egy függvénybe szervezném ki (ha eddig ez nem történt volna meg). HTML táblázat és Excel estében is ezt a függvényt használnám, ugyanazokkal a paraméterekkel, így biztosan ugyanaz lesz a result. HTML táblázat esetén mehet a renderelés úgy ahogy eddig. Excel esetén pedig egy másik végpontra irányítanám a kérést, ami a HTML helyett egy letölthető állományt tesz ki az outputra.

Ha használsz valami Excel táblázat készítő libet, akkor ez azt természetesen manuálisan kell összeraknod, de egyébként a HTML kódot is ki tudod tolni xls kiterjesztéssel, mert az Excel tudja parsolni a HTML kódot; szóval ha készítesz egy table.html-t, aminek a tartalma egy valid HTML táblázat, és akiterjesztést átirod xls-re, és megynitod Excellel, akkor szépn meg fog jelenni az a táblázat, amit szeretnél.

File outputot generálni HTML helyett viszonylag egyszerű, a header-ökkel kell játszanod, erre találsz rengeteg példát, pl itt: http://stackoverflow.com/questions/12541000/how-to-export-html-table-to-excel-or-pdf-in-php

Tipp: kereséni GET requesttel érdemes, nem POST-tal, mert szűrőfeltételeket el tudod tárolni az URL query stringjében, és ezzel megkönnyíted az életed.

Konkrét példa:
/search.php?keyword=asd > kigenerálja a HTML táblázatot az "asd" keresőszó alapján
/search.php?keyword=asd&format=xls > megycsinálja ugyanazt a lekérdezést, mert ugyanaz a paraméter megy el mindkét esetben, plusz hozzáfűzöd a format paramétert, amivel megmondod a sciprtnek, hogy ne HTML-t generáljon, hanem egy XLS outputot.
6

részlet

batcher_90 · 2016. Már. 24. (Cs), 18.13
Lehet h így egyszerűbb lesz ...



<?php

if (isset($_POST['search']))
{
$valueToSearch = $_POST['valueToSearch'];
$query = "SELECT * FROM `TABLA` WHERE CONCAT (`adat1`, `adat2`, `adat3`, `adat4`, `adat5`, `adat6`, `adat7`, `adat8`, `adat9`) LIKE'%".$valueToSearch."%'";
$search_result = filterTable($query);
}
else {
$query = "SELECT * FROM `TABLA`";
$search_result = filterTable($query);
}

function filterTable($query)
{
$connect = mysqli_connect("localhost", "root", "", "szerver");
return mysqli_query($connect,$query);

}


?>

<!DOCTYPE html>
<html>
<h1 align="center">Search</h1>
<head>
<title> Query</title>

<form method="post" action="download_all.php">
<input type="submit" name="export_excel" class="btn btn-success" value="Export to Excel"></input>
</form>
<style>
table,tr,th,td

</style>
</head>

<body>


<form action="http://localhost/szerver/printer.php" method="post">
<input type="text" name="valueToSearch" placeholder="Value to Search"><br><br>
<input type="submit" name="search" value="Filter"><br><br>




<table align="center" border=1px>
<tr>
<th>adat1</th>
<th>adat2</th>
<th>adat4</th>
<th>adat7</th>
<th>adat6</th>
<th>adat5</th>
<th>adat3</th>
<th>adat8</th>
<th>adat9</th>




</tr>
<?php
while($row = mysqli_fetch_array($search_result )):
echo "<tr>";
echo "<td>".$row['adat1']."</td>";
echo "<td>".$row['adat2']."</td>";
echo"<td>" .$row['adat4']."</td>";
echo"<td>" .$row['adat7']."</td>";
echo"<td>" .$row['adat6']."</td>";
echo"<td>" .$row['adat5']."</td>";
echo"<td>" .$row['adat3']."</td>";
echo"<td>" .$row['adat8']."</td>";
echo"<td>" .$row['adat9']."</td>";


echo "</tr>";

endwhile;
?>
</table>

</form>





</body>


</html>

Az itt kapott eredményt szeretném excelbe lementeni az oldalról(bármikor) egy kattintással(Export to excel gomb)
7

Kedves batcher_90! Smokey

tisch.david · 2016. Már. 24. (Cs), 18.26
Kedves batcher_90!

Smokey válasza a helytálló. Amit Te szeretnél, azt nem úgy csinálják, hogy valahogy letapogatják a HTML táblázat tartalmát és azt kirakják Excel formátumba, hanem úgy, hogy ha kell az eredmény Excel formátumban is, mégegyszer lefuttatják a lekérdezést, de a kimenetet már nem HTML formában tolják ki a böngészőnek, megjelenítésre, hanem Excel formátumban (mondjuk az egyszerűség kedvéért CSV-ben) állítják elő, és olyan HTTP fejléccel küldik ki, ami a böngészőt arra utasítja, hogy kínálja fel a tartalmat letöltésre vagy megnyitásra, mintha az egy file lenne.

Érthető így Számodra vagy van még, ami nem világos?
Üdv:

Dávid
8

köszi

batcher_90 · 2016. Már. 24. (Cs), 18.35
Tehát a $_POST["export_excel"](ezzel szeretném lementeni excelbe) alá írja be ugyanazt a lekérdezést amit a keresőnél használtam és menni is fog ?
Gondolom már a tökötök tele van a hülye kérdéseimmel, köszi a türelmet :)
11

Szia!Nem, rossz kérdés

tisch.david · 2016. Már. 25. (P), 09.54
Szia!

Nem, rossz kérdés nincs, szívesen válaszolok. Szóval: ha szerver oldalon szeretnéd az Excelt előállítani, akkor a kliensből küldött adatokkal valóban el kell küldened egy jelzőt, hogy most Excelben kéred az eredményt. Mondjuk van egy rádiógomb, amivel beállítja, hogy HTML táblázat kell neki vagy Excel táblázat. Ezt a változót szerver oldalon megvizsgálod, és a lekérdezésed lefuttatása után vagy HTML táblázatot küldesz ki, vagy mondjuk CSV-t, a megfelelő HTTP header beállítása után. Vagyis meta kóddal:

...
result = execute_sql_query(...); //adatok elokeresese
if ($_POST['format'] == 'excel') { //Excel kimenet kell
  header(...); //letoltesre utasito fejlec kikuldese
  send_output_in_excel_format(...); //Excel formatum eloallitasa es kikuldese
} else { //HTML kimenet kell
  echo 'html_code'; //HTML oldal kikuldese
}
...
Üdv:

Dávid
9

Köszi a megerősítést :)

smokey · 2016. Már. 24. (Cs), 18.37
Köszi a megerősítést :)

BTW, Kliens oldali, JavaScript alapú Excel tábla generálásra is van lehetőség. https://jsfiddle.net/lesson8/jWAJ7/
10

Szólnék, hogy a kódodban egy

bamegakapa · 2016. Már. 24. (Cs), 19.17
Szólnék, hogy a kódodban egy csúnya sebezhetőség van, ún. SQL injection, a kívülről (jelen esetben POST-ból) érkező adatot egy az egyben belerakod az SQL lekérdezésbe. Ez rendkívül veszélyes.

Olvass utána a dolognak. A mysqli-ben emlékeim szerint vannak prepared statementek, azokkal jársz a legjobban.