SELECT z databáze – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SELECT z databáze – PHP – Fórum – Programujte.comSELECT z databáze – PHP – Fórum – Programujte.com

 

fix0
Stálý člen
11. 5. 2018   #1
-
0
-

Ahoj,

prosím o radu: "Proč se mi děje, co se mi děje"? Viz screenshot.

Uvítám nápady, jak to dát do cajku, aby se neignorovalo vypisování ostatních sloupečků u existujících hodnot v poli $row["nazev"]

Děkuji všem.

Připojen obrázek.

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
11. 5. 2018   #2
-
0
-

#1 fix
Ukaž zdroják, ať se můžeme podívat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d5f6:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
11. 5. 2018   #3
-
0
-

   

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/* Database connection start */
require('../../nastaveni.php');

$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());

/* Database connection end */


// storing  request (ie, get/post) global array to a variable  
$requestData= $_REQUEST;


$columns = array( 
// datatable column index  => database column name
	/*0 => 'id', 
	1 => 'nazev_firmy',
	2 => 'nazev_pobocky',
	3 => 'ic',
	4 => 'dic',
	5 => 'ulice',
	6 => 'cp',
	7 => 'mesto',
	8 => 'psc'*/
	
	0 => 'id', 
	1 => 'prijmeni', 
	2 => 'jmeno',
	3 => 'login',
	4 => 'firma',
	5 => 'email',
	6 => 'mobil',
);

// getting total number records without any search
$sql = "SET NAMES utf8;";
$sql = "SELECT id, skupina, prijmeni, jmeno, login, firma, email, mobil";
$sql.=" FROM uzivatele";
$query=mysqli_query($conn, $sql) or die("chyba ordie soubor /admin/firmy/data.php");
$totalData = mysqli_num_rows($query);
$totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.


//$sql = "SELECT id, nazev_firmy, nazev_pobocky, ic , dic, ulice, cp, mesto, psc";
$sql = "SELECT id, skupina, prijmeni, jmeno, login, firma, email, mobil";
$sql.=" FROM uzivatele WHERE 1=1";
if( !empty($requestData['search']['value']) ) {   // if there is a search parameter, $requestData['search']['value'] contains search parameter
	$sql.=" AND ( id LIKE '".$requestData['search']['value']."%' ";    
	$sql.=" OR jmeno LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR skupina LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR prijmeni LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR pozice LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR mobil LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR email LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR login LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR firma LIKE '".$requestData['search']['value']."%' ";
	$sql.=" OR pobocka LIKE '".$requestData['search']['value']."%' )";
}
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result. 
$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."  LIMIT ".$requestData['start']." ,".$requestData['length']."   ";

/* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc  */	
$query=mysqli_query($conn, $sql) or die("chyba ordie soubor /admin/firmy/data.php");

$data = array();
while( $row=mysqli_fetch_array($query) ) {  // preparing an array
	$nestedData=array(); 
	$nestedData[] = $row["id"];
			
		$id = $row["skupina"];
		$conn = new mysqli($servername, $username, $password, $dbname);
		if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}

		$sql = "SELECT nazev FROM `skupiny` WHERE id= ".$id."";

		$result = $conn->query($sql);

		if ($result->num_rows > 0) {
			while($row = $result->fetch_assoc()) {
				$nazev = $row["nazev"];
			}
		} else {
			$nazev = "Chyba: #15618";
			//$nazev = $sql;
		}
		$conn->close();

	
	$nestedData[] = $nazev;
	
	//$nestedData[] = $row["skupina"];
	$nestedData[] = $row["prijmeni"];
	$nestedData[] = $row["jmeno"];
	$nestedData[] = $row["login"];
	$nestedData[] = $row["firma"];
	$nestedData[] = $row["email"];
	$nestedData[] = $row["mobil"];
	$nestedData[] = 
	'	
	<div style="display: inline-block;width: 100%;text-align:center;">
	<i class="pe-7s-edit clickable" onclick="updateFunction('.$row["id"].')" ></i>
	<i class="pe-7s-trash clickable" onclick="deleteFunction('.$row["id"].')" ></i>
	</div>
	';
	
	$data[] = $nestedData;
}

$json_data = array(
			"draw"            => intval( $requestData['draw'] ),   // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. 
			"recordsTotal"    => intval( $totalData ),  // total number of records
			"recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
			"data"            => $data   // total data array
			);

echo json_encode($json_data);  // send data as json format

?>
Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
11. 5. 2018   #4
-
+1
-
Zajímavé
fix +

#3 fix

$nestedData[] = $nazev;

patří dovnitř cyklu.

BTW: Proč tu databázi v cyklu otevíráš a znovu zavíráš, když ji máš otevřenou? To ji chceš uštvat? Proč ten výpis neuděláš jedním SQL dotazem?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d5f6:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
11. 5. 2018   #5
-
0
-

#4 Kit
V hlavním cyklu, který vytváří pole pro předání JSONem je a proč by musel být i v tom druhém cyklu, který převádí číslo na název uživatelské skupiny nechápu, mělo by to fungovat stejně, ale udělám to tak.

Proč otevírám a zavírám spojení s databází nevím, dobrý postřeh, děkuji.

Výpis udělat jedním dotazem, to asi myslíš nějaký typ JOINu mezi tabulkou uzivatele a tabulkou skupiny? To by mi podstatně ulehčilo práci.

Tedy to předělám dle tvých rad, děkuji za tvůj čas.

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
11. 5. 2018   #6
-
+1
-
Zajímavé
fix +

#5 fix
 

SELECT id, skupina, prijmeni, jmeno, login, firma, email, mobil, nazev
    FROM uzivatele LEFT JOIN `skupiny` ON uzivatele.skupina=skupiny.id;
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d5f6:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
11. 5. 2018   #7
-
0
-

#6 Kit

Děkuji ti, né že bych to nedal takhle do kupy, ale je pravda, že by mi to chvilku trvalo a ušetřil si mi tím tak 10 minut práce googlení a zkoušení. :-D Když už tak bych použil jediný JOIN se kterým mám zkušenost a to INNER JOIN. :-D

Nahlásit jako SPAM
IP: 92.240.177.–
Kit+15
Guru
11. 5. 2018   #8
-
0
-

#7 fix
INNER JOIN by ti nevypsal uživatele, kteří nejsou v žádné skupině, což by mohl být i záměr.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d5f6:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
12. 5. 2018   #9
-
0
-

Je to postavené, tak že je nezbytné, aby každý uživatel byl v nějaké skupině. Nemělo by nastat, že by existoval uživatel bez skupiny, ale pokud by nějak nastalo, tak by tomu uživateli nic nefungovalo a celý web by měl rozbitý. Nicméně adminovi by se v té tabulce zobrazila ta chybová hláška, což je lepší, Takže LEFT JOIN jsi zvolil dobře, děkuji.

Nahlásit jako SPAM
IP: 92.240.177.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý