Získanie dát z druhej tabuľky – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Získanie dát z druhej tabuľky – PHP – Fórum – Programujte.comZískanie dát z druhej tabuľky – PHP – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
12. 4. 2018   #1
-
0
-

Ahojte, mám problém a neviem si poradiť..
Mám 2 tabuľky:
 názov: obsahuje tieto stĺpce
ponuky: id title description travel destination datefrom dateto image price
rezervacie: id userid people datefrom dateto finalprice destinationid note
pouzivatelia: id meno heslo email adresa telefon

Mám php script, ktorý mi pracuje s tabuľkou rezervacie... (výpis všetkých rezervácii daného používateľa)
Problém je ten, že potrebujem na základe stĺpca destinationid prejsť do tabuľky ponuky, aby som získal title a destination tohto id...  (destinationid z tabulky rezervacie teda oznacuje id v tabulke ponuky)
Vracia mi to stále iba jedno id a nezobrazí mi druhý záznam (iné id) pri oboch záznamoch mi dáva to isté title a destination.
Prvé 2 stĺpce sú z tabulky ponuky, s tým je problém...
 

Připojen obrázek.



Zdrojový kód, ktorý aktuálne používam:
 

<!DOCTYPE html>
<html lang="sk">
<?php 
session_start();
	include("connect.php");
		$rezervacie = mysqli_query($con,"SELECT * FROM `rezervacie` WHERE `userid`>='".$_SESSION['uid']."'") or die(mysqli_error($con));
		while($line = mysqli_fetch_assoc($rezervacie)){

			$idcko =  $line['destinationid'] ;

		} 
		
	 $ponuka_get = mysqli_query($con,"SELECT * FROM `ponuky` WHERE `id`='".$idcko."'") or die(mysqli_error($con));
$ponuka = mysqli_fetch_assoc($ponuka_get); 

?>
  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Webaplikácia s využitím PHP pre predmet Databázové systémy. Zadanie č.18 - cestovná agentúra">
    <meta name="author" content="Martin Chlebovec FEI">
	<link rel="icon" type="image/png" href="img/tuke.png" />
	<meta name="robots" content="noindex, nofollow">
    <title>Cestovná agentúra - prihlásenie</title>
    <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <style>
      body {
        padding-top: 54px;
      }
      @media (min-width: 992px) {
        body {
          padding-top: 56px;
        }
      }

.footer {
    position: fixed;
    left: 0;
    bottom: 0;
    width: 100%;
    background-color: #909193;
    color: white;
    text-align: center;
}
    </style>

  </head>
  <body>

    <!-- Navigation -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
      <div class="container">
        <a class="navbar-brand"><font color="white">Martin Chlebovec</font></a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarResponsive">
          <?php 
	
		  
		  
		  if(isset($_SESSION['uid'])){
		  
		  ?>
		 <ul class="navbar-nav ml-auto">
            <li class="nav-item">
              <a class="nav-link" href="index.php">Novinky</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="vyhladavanie.php">Vyhľadávanie</a>
            </li>
			 <li class="nav-item">
              <a class="nav-link" href="rezervacie.php">Moje rezervácie</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="logout.php">Odhlásiť sa</a>
            </li>
          
          </ul>
		
		  <?php } ?>
        </div>
      </div>
    </nav>
  <div class="container">
	<center><h2>Rezervácia</h2></center>
<center>	
<?php
		  if(!isset($_SESSION['uid'])){
	
	   header("Location: login.php");
}

   
  
?>   
	<table width=80%>
<thead><tr><th>Názov ubytovania</th><th>Destinácia</th><th>Počet osôb</th><th>Od</th><th>Do</th><th>Cena</th></tr>
<tbody> 


<?php
 	$rezervacie = mysqli_query($con,"SELECT * FROM `rezervacie` WHERE `userid`>='".$_SESSION['uid']."' ORDER BY `datefrom` ASC") or die(mysqli_error($con));
		while($line = mysqli_fetch_assoc($rezervacie)){
		
			echo "<tr>";
			echo "<td>". $ponuka['title'] ."</td>";
			echo "<td>". $ponuka['destination'] ."</td>";
			echo "<td>". $line['people'] ."</td>";
			echo "<td>". $line['datefrom'] ."</td>";
			echo "<td>". $line['dateto'] ."</td>";
				echo "<td>". $line['finalprice'] ."</td>";
			echo "</tr>";
		}  ?> </tbody></table>
</center>
    </div>
	<?php 
	include("footer.php");
	?>

    <!-- Bootstrap core JavaScript -->
    <script src="vendor/jquery/jquery.min.js"></script>
    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

  </body>

</html>

Skúšal som túto časť kódu:

	 $ponuka_get = mysqli_query($con,"SELECT * FROM `ponuky` WHERE `id`='".$idcko."'") or die(mysqli_error($con));
$ponuka = mysqli_fetch_assoc($ponuka_get); 

Dávať aj do cyklov while, ale bezúspešne, výsledok stále rovnaký.. 
 

Nahlásit jako SPAM
IP: 147.232.177.–
Kit+15
Guru
12. 4. 2018   #2
-
0
-

#1 Martin
Mám dvě tabulky, jsou to tyto tři: ponuky, rezervacie, pouzivatelia a destination...

Chybí ti JOIN na destination v SELECTu tabulky rezervacie.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:f1e5:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
12. 4. 2018   #3
-
0
-

Neviem to upraviť tak, aby mi to fungovalo..

Nahlásit jako SPAM
IP: 147.232.177.–
Martin
~ Anonymní uživatel
1602 příspěvků
13. 4. 2018   #4
-
0
-

Help prosím :/

Nahlásit jako SPAM
IP: 147.232.157.–
MilanL+1
Grafoman
13. 4. 2018   #5
-
0
-

#4 Martin
stačí po googlit "sql dotaz nad více tabulkami" odkazů a vysvětlení to najde dost, hledej tam pak "vnější spojení"

Nahlásit jako SPAM
IP: 91.139.9.–
peter
~ Anonymní uživatel
4016 příspěvků
13. 4. 2018   #6
-
0
-

Bud pouzijes join, viz Kit a nebo cely ten kod budes muset prekopat, abys ho mel spravne.

google = mysql query select left join example
-> http://www.mysqltutorial.org/…in.aspx ;
priklad propojeni tabulek customers a orders

SELECT
 c.customerNumber,
 c.customerName,
 orderNumber,
 o.status
FROM
 customers c
LEFT JOIN orders o ON c.customerNumber = o.customerNumber;

Ta druha moznost je horsi. Tam je treba zmenit cely kod.

'Skúšal som túto časť kódu $ponuka_get = ... Dávať aj do cyklov while, ale bezúspešne, výsledok stále rovnaký.'
Njn. Takze zpet k zakladum.

$query    = "SELECT * FROM `rezervacie` WHERE `userid`>='".$_SESSION['uid']."'"; // nemas osetreny vstup do sql dotazu
$resource = mysqli_query($connect, $query) or die(mysqli_error($connect));
// nemas tam vubec kontrolu, zda je resource objekt, cili neni ===false
while(($row = mysqli_fetch_assoc($resource))!==null) // nemas kontrolu zda neni $row null
	{
	$id = $row['destinationid'];
	}

Co to ted udela?
- Do promenne $query ulozis zapis sql dotazu jako string. Doporucuji pouzivat pomocnou pormennou.
- $query predas funkci mysqli_query
- ta vrati false / mysqli_result_object (true)
- z tohoto specialniho objektu lze ziskat data jen pres mysqli_fetch_assoc neb jinou fetch funkci
Super, takze mas cyklus, ktery z resource ziskava $id. V tom cyklu to $id nijak nepouzivas. Po skonceni cyklu zustane v $id pouze posledni hodnota. Takze do toho cyklu musis pridat nejaky dalsi kod, ktery to $id nejak pouzije. Treba aspon echo $id; 

// Pr. 1 - echo pod cyklem, pod zavorkami { ... } echo $id;
$id = 1;
$id = 4;
$id = 2;
echo $id; // Vypise 2.

// Pr. 2 - echo uvnitr cyklu, uvnitr zavorek { ... echo $id; }
$id = 1;
echo $id; // Vypise 1.
$id = 4;
echo $id; // Vypise 4.
$id = 2;
echo $id; // Vypise 2.

Pokud to id ches pouzit pro dalsi sql dotaz, tak klidne muzes. Ale pak vse, kolem toho dotazu musi byt uvnitr prvniho while. A to plati i pro vypis.

function sql($query) // connect potrebujes pouze v pripade, kdy pouzivat 2 a vice connectu
{
return  mysqli_query($query) or die(mysqli_error());
}

echo '<pre>';
$query1   = "SELECT * FROM `rezervacie` WHERE `userid`>='%s'";
$query2   = "SELECT * FROM `ponuky` WHERE `id`='%s'";
$q1 = sprintf($query1,$_SESSION['uid']); // A1
$r1 = sql($query); // A2
while(($row1 = mysqli_fetch_assoc($r1))!==null) // A3
	{
	$id1 = $row['destinationid'];
	var_dump($row1); // A4
	$q1 = sprintf($query2,$id1); // B1
	$r2 = sql($query); // B2
	while(($row2 = mysqli_fetch_assoc($r2))!==null) // B3
		{
		var_dump($row2); // B4
		}
	}
echo '</pre>';

A1 - A4 je v podstate stejne jako B1-B4. Ale B je uvnitr cyklu pro A. Kdezto ty to mas pekne pod sebou, takze se vypise pouze jedina hodnota, radek.
Pozn. To sprintf neresi tvuj problem s bezpecnosti, pouze jsem si chtel zjednodusit praci a mit ty sql dotazy pohromade.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:38...–
MilanL+1
Grafoman
16. 4. 2018   #7
-
0
-

#6 peter
drobnost neměli by řádky A2 a B2 být ..= sql($q1) ?

Nahlásit jako SPAM
IP: 91.139.9.–
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, 33 hostů

Podobná vlákna

Výpis dat do tabulky v C — založil Filip

Vytáhnutí dat z tabulky — založil Petr

Uprava dat z tabulky — založil nord

Vypis dat z tabulky — založil Bloudy

 

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