veld ophalen uit andere tabel

Status
Niet open voor verdere reacties.

thapriest

Gebruiker
Lid geworden
28 okt 2009
Berichten
559
Beste lezer,

Ik heb meerdere tabellen(logisch), waaronder 1 grote, waaraan een aantal kleintjes gekoppeld zouden moeten worden.

Voorbeeld ik heb tabel reisaanbod daarin wordt onder land_id een nummer opgeslagen dat in de tabel landen correspondeert met het land(dus bijv. 2 = nederland) .

Nu heb ik het deels al voor elkaar om het nummer in reisaanbod te krijgen, en de naam in landen.

Echter, hoe haal ik nu (in bijv. een dropdown) de namen behorende bij het nummer.
Ik heb dit namelijk nodig in een bewerkformulier voor die tabellen.
 
Wat moet je precies hebben waarvan? Je zal in ieder geval moeten werken met joins in je query.
 
Hoi,

In tabel reisaanbod staat een veld land_id, daar wordt(om ruimte te besparen) een nummer ingevoerd van 0 tm 12.
die nummers correspondereren met een land in de tabel landen. (dus bijv. land_id 1, is in landen id nummer ook 1, en de naam die daarbij hoort is dan bijv, duitsland.

Nu wil ik in een dropdown de lijst met acco's ophalen en de selected optie moet dan degene zijn die in tabel reisaanbod aangegeven staat voor die reis. Die staat dus daar echter met een nummer aangegegeven, en ik wil dat hij de namen laat zien daarbij.
 
Je kunt koppelinformatie ophalen via een join in je query:

[sql]
SELECTtabelA.naam, tabelB.land_id
FROM tabelA
INNER JOIN tabelB ON tabelA.land_id = tabelB.land_id
WHERE tabelB.tonen = 'ja'
[/sql]

Zoiets bijvoorbeeld zou de namen teruggeven en de ids uit twee verschillende tabellen. Is dat ongeveer wat je bedoeld?
 
Hmmm ik moet eerlijk bekennen dat ik m niet helmaal snap, ik heb nog nooit met JOIN gewerkt:o

ik haal op deze manier nu alle andere waarden op uit de tabel reisaanbod(ik ben dus een bewerk formulier aan het maken, die een eerder aangemaakt record kan wijzigen)

PHP:
$query="SELECT * FROM accomodations WHERE id = '".$_GET['nid']."' ";
 $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {
        $land_id = $record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoFaciliteiten'];
        $klasse = $record['klasse'];
		$plaats=$record['plaats'];
		$offer=$record['details'];
		$published=$record['published'];
		
			}

in het formulier echo ik dan de waarde.
 
Als ik jou was zou ik even de introductie cursus voor SQL doen, denk dat je er nog een hoop van op kunt steken:
http://www.w3schools.com/sql/sql_intro.asp

Wat je iig moet doen is de JOIN opnemen in de query die je in het begin uitvoert, en die geeft dan een extra veld (of een heleboel zelfs) terug, en daar kun je dan weer de landnamen uit halen.
 
PHP:
$query="SELECT * FROM accomodations WHERE id = '".$_GET['nid']."' ";

Ik wil even opmerken dat je hier een levensgroot SQL-injectie probleem hebt zitten. Verander dit op zijn minst in
PHP:
$query="SELECT * FROM accomodations WHERE id = '".(int)$_GET['nid']."' ";
Dan wordt er een getal van gemaakt (ik neem ten minste aan dat "nid" een id (en dus een getal) is) en kunnen er geen "rare" tekens in voorkomen.
 
Laatst bewerkt:
Ik wil even opmerken dat je hier een levensgroot SQL-injectie probleem hebt zitten. Verander dit op zijn minst in

Dank je, nooit aan gedacht;) meteen gewijzigd....

Frats
Als ik jou was zou ik even de introductie cursus voor SQL doen, denk dat je er nog een hoop van op kunt steken:
http://www.w3schools.com/sql/sql_intro.asp

Wat je iig moet doen is de JOIN opnemen in de query die je in het begin uitvoert, en die geeft dan een extra veld (of een heleboel zelfs) terug, en daar kun je dan weer de landnamen uit halen.

Even een klein stukkie doorgelzen, zal vanavond eens even beginnen met helemaa door te nemne, interessante kost.

Ik heb nu dit gedaan:
PHP:
$query="SELECT * FROM accomodations WHERE id = '".(int)$_GET['nid']."'  ";
 $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {
        $land_id = $record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoFaciliteiten'];
        $klasse = $record['klasse'];
		$plaats=$record['plaats'];
		$offer=$record['details'];
		$published=$record['published'];
		
			}
		$testquery=" SELECT accomodations.land_id, countries.id, countries.naam	FROM accomodations INNER JOIN countries ON accomodations.land_id= countries.id	WHERE countries.id=".$land_id." ";
			$result2 = mysql_query($testquery) or die(mysql_error());
			while ($record = mysql_fetch_array($result2)){
			$naam2=$record['naam'];}
			
			echo $naam2;
	//Haal landen, reissoorten en accommodatie types op uit database, en geef weer in een dropdown
		$sql = "SELECT * FROM `countries` ";
        $result = mysql_query($sql);
         while($disp = mysql_fetch_array($result))
         {
		 $country .= '<option value="'.$disp['id'].'">  '.$disp['naam'].' </option>'; 
         }

Hier haal ik m op:
PHP:
    <td><label>Land </label></td>
    <td><select name="land" id="land">
	<option value="<?php echo $naam2;?>" selected="selected"><?php echo $naam2;?>  </option>
	<option value="<?php echo $land_id;?>" /><?php echo $country?></option>

    </select></td>

Hij doet eiegenlijk nu precies wat ie moet doen, haalt het juiste land bij id op, en bij aanklikken ander land zet hij goede Land_id weer in accomodations.Maar, ik krijg nu de waarde die gezet is, dus stel de reis staat met Duitsland in de databse, krijg ik in de dropdown 2x de keus voor duitsland. hoe voporkom ik dit?
 
Ik krijg er nu dus uit: het record welke gezet is(dus het goede land) dan een leeg record en dan de opsomming van de landen incluis het land dat reeds bovenin weer wordt gegeven.

iemand een idee?
 
Werkt helaas niet:(

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bewerk Reis</title>
 <?php
include 'dbconnect.php';

			if ($_SERVER["REQUEST_METHOD"] == "POST") {
$query2= "UPDATE accomodations SET code='".$_POST['code']."' , land_id='".$_POST['land']."' , naam='".$_POST['naam']."' , plaats='".$_POST['plaats']."' , intro='".$_POST['intro']."' , vanafPrijs='".$_POST['prijs']."' , infoAlgemeen='".$_POST['beschrijving']."' , infoFaciliteiten='".$_POST['faciliteiten']."' , klasse='".$_POST['klasse']."' , details='".$_POST['aanbiedingen']."' , active='".$_POST['published']."', offer_price='".$_POST['offer']."' WHERE id='".$_GET['nid']."' ";
$result = mysql_query($query2) or die(mysql_error());

        echo "Opgeslagen";
        }


$query="SELECT * FROM accomodations WHERE id = '".(int)$_GET['nid']."'   ";
 $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {
        $land_id = $record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoFaciliteiten'];
        $klasse = $record['klasse'];
		$plaats=$record['plaats'];
		$offer=$record['details'];
		$published=$record['published'];
		
			}
		$testquery=" SELECT accomodations.land_id, countries.id, countries.naam	FROM accomodations INNER JOIN countries ON accomodations.land_id= countries.id	WHERE countries.id=".$land_id." ORDER BY naam ";
			$result2 = mysql_query($testquery) or die(mysql_error());
			while ($record = mysql_fetch_array($result2)){
			$naam2=$record['naam'];}
			
			echo $naam2;
	//Haal landen, reissoorten en accommodatie types op uit database, en geef weer in een dropdown
		 $sql = "SELECT DISTINCT naam FROM `countries` ORDER BY naam  ";
        $result = mysql_query($sql);
         while($disp = mysql_fetch_array($result))
         {
         $country .= '<option value="'.$disp['id'].'">  '.$disp['naam'].' </option>'; 
         }
		 
		 
		 	$sql = "SELECT * FROM `reis_soorten` ";
        $result = mysql_query($sql);
         while($disp = mysql_fetch_array($result))
         {
		 $soortreis .= '<option value="'.$disp['id'].'">  '.$disp['name'].' </option>'; 
         }
		 
		  	$sql = "SELECT * FROM `accomodatie_types` ";
        $result = mysql_query($sql);
         while($disp = mysql_fetch_array($result))
         {
		 $soortacco .= '<option value="'.$disp['id'].'">  '.$disp['name'].' </option>'; 
         }
				$checkbox = "SELECT active FROM `accomodations` WHERE id = '" .$_GET['nid']."' ";
		$uitkomst = mysql_query($checkbox);
		$check = mysql_fetch_array($uitkomst);
	if (in_array("1", $check, TRUE)){ 
			$published2 .= '<input type="checkbox" value="1" checked name="published" />';}
	else	{
			$published2 .= '<input type="checkbox" value="1"  name="published" />'; 
			}
			
		
		 
		 			$checkbox2 = "SELECT offer_price FROM `accomodations` WHERE id = '" .$_GET['nid']."' ";
		$uitkomst2 = mysql_query($checkbox2);
		$check2 = mysql_fetch_assoc($uitkomst2);
	if ($check2 >= 1) { 
			$published3 .= '<input type="checkbox" value="1"  name="offer" />'; }
	else	{
			$published3 .= '<input type="checkbox" value="1" checked name="offer" />';}
			
			
			echo $check2;
		 
 ?>
</head>

<body>
<form id="bewerken" name="bewerken" method="post" form action="">
<table width="560" border="0">
  <tr>
    <td>Naam</td>
    <td><input type="text" name="naam" id="naam" value="<?php echo $naam;?>" /></td>
  </tr>
  <tr>
    <td>Code</td>
    <td><input type="text" name="code" id="code" value="<?php echo $code; ?>" /></td>
  </tr>
  <tr>
    <td><label>Plaats </label></td>
    <td><input type="text" name="plaats" id="plaats" value="<?php echo $plaats;?>" /></td>
  </tr>
  <tr>
    <td><label>Vanaf Prijs</label></td>
    <td><input type="text" name="prijs" id="prijs" value="<?php echo $vanafPrijs;?>" /></td>
  </tr>
  <tr>
    <td><label>Land </label></td>
    <td><select name="land" id="land">
 <option value="<?php echo $land_id;?>" selected="selected"><?php echo $naam2;?>  </option>
    <option value="" /><?php echo $country?></option>
 	
    </select></td>
  </tr>
  <tr>
    <td><label>Soort Reis</label></td>
    <td><select name="soortreis" id="soortreis">
	<option value="">  <?php echo $soortreis;?> </option>
    </select></td>
  </tr>
  <tr>
    <td><label>Soort Accommodatie</label></td>
    <td><select name="soortacco" id="soortacco">
	<option value="">  <?php echo $soortacco;?> </option>
    </select></td>
  </tr>
  <tr>
    <td>Klasse</td>
    <td><select name="klasse" id="klasse">
	<option value="<?php echo $klasse;?>">  <?php echo $klasse;?> </option>
    </select></td>
  </tr>
  <tr>
    <td><label>Korte tekst</label></td>
    <td><textarea name="intro" id="intro" cols="45" rows="5"><?php echo $intro;?></textarea></td>
  </tr>
  <tr>
    <td><label>Volledige Beschrijving</label></td>
    <td><textarea name="beschrijving" id="beschrijving" cols="45" rows="5"><?php echo $infoAlgemeen;?></textarea></td>
  </tr>
  <tr>
    <td><label>Faciliteiten</label></td>
    <td><textarea name="faciliteiten" id="faciliteiten"  cols="45" rows="5"><?php echo $infoFaciliteiten;?></textarea></td>
  </tr>
  <tr>
    <td><label>Aanbiedingen</label></td>
    <td><textarea name="aanbiedingen" id="aanbiedingen"  cols="45" rows="5"><?php echo $offer;?></textarea></td>
  </tr>
  <tr>
    <td><?php echo $published3; ?></td>
    <td><label>Als Aanbieding tonen?</label></td>
  </tr>
  <tr>
    <td><?php echo $published2; ?></td>
    <td><label>Laten zien op de site?</label></td>
  </tr>
</table>
<p>
  <label>
  <input type="submit" name="opslaan" id="opslaan" value="opslaan" />
  </label>
</p>
</body></form>
</html>
<?php

		?>
 
En hoe pas ik hem daar dan toe? als ik hem voor het ophalen van de naam zet, krijg ik een wrong syntax melding..
 
hmmm nee resulteert in een leeg record in de dropdown helaas..
Ik zoek verder
 
DISTINCT gaat je niet helpen. Dat voorkomt alleen maar dubbele records als je dubbele records uit je tabel haalt bij je query. Dat is hier niet het geval. De reden dat het geselecteerde land dubbel voorkomt, komt door deze code:
HTML:
<option value="<?php echo $land_id;?>" selected="selected"><?php echo $naam2;?>  </option>
    <option value="" /><?php echo $country?></option>
$naam2 is het geselecteerde land en $country bevat alle landen, inclusief het geselecteerde land. De makkelijkste manier om dit te voorkomen is om te voorkomen dat $country het geselecteerde land bevat. Dit kan je eenvoudig doen door je query op regel 42
PHP:
$sql = "SELECT DISTINCT naam FROM `countries` ORDER BY naam  ";
te veranderen in
PHP:
$sql = "SELECT DISTINCT id, naam FROM `countries` WHERE id != $land_id ORDER BY naam  ";
 
Dat werkt inderdaad:-)

Alleen hou ik nog een leeg record tussen het geselecteerde land en de landen in de tabel, enig idee hoe ik dat voorkom?
 
Je hebt een "lege" "option" in je HTML staan. Verander
HTML:
<option value="<?php echo $land_id;?>" selected="selected"><?php echo $naam2;?>  </option>
    <option value="" /><?php echo $country?></option>
in
HTML:
<option value="<?php echo $land_id;?>" selected="selected"><?php echo $naam2;?>  </option>
    <?php echo $country?>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan