Ga terug   Computer Idee Forum > Internet > Websites maken

Antwoord
 
Discussietools Weergave
Oud 23 May 2011, 20:04   #1
anoniem31645
Guest
 
Berichten: n/a
Standaard while lus met informatie uit 2 tabelen

Nu heb ik 2 tabellen van Zencart in mijn database. In de een staat de naam van het product en in de ander de prijs en de naam van het plaatje. Ik wil echter een pagina maken waar op ik het plaatje toon en dan een tekst vak voor de titel en de prijs zodat ik vanuit die pagina direct de prijs en titel kan inzien en eventueel allemaal makelij kan veranderen via zencart vind ik het toch wat te omslachtig).

Omdat er geen vast aantal producten is wil ik iets zoals dit in een while lus plaatsen:
PHP-code:
<form action="" method="get">
<table width="525"border="1" cellpadding="4" cellspacing="2" bordercolor="#666666" bgcolor="#E4E4E4">
  <tr>
    <td>Foto</td>
    <td>Product</td>
    <td>Valuta</td>
    <td>Neto prijs</td>
  </tr>
  
<?php
while($obj mysql_fetch_array($qry)) 
{  
  echo
'<tr>
    <td width="100"> <a <img src="/map/'
.$qry_ad_price['products_image'].'" height="24" ></td>
    <td width="300">'
;
    echo 
'<input type="text" name="naam" id="naam" value="'.$qry_ad_name['products_name'].'"></td>
    <td width="25">&euro;</td>
    <td width="100">'

    echo 
'<input type="text" name="prijs" id="prijs" value="'.$qry_ad_price['products_price'].' "></td>
  </tr>'
;
}

 
?>
</table>
</form>
Hier ligt dan ook het probleem. Ik moet dus uit 2 tabellen informatie ophalen en dit bundelen tot 1 aray voor de wile lus zoals deze: while($obj = mysql_fetch_array($qry))

Dit moet dus 1 worden:
PHP-code:
    //get price and imagename from tabel 'shop_products'.
    
$sql_ad_price "SELECT `products_price`, `products_image` FROM `shop_products` WHERE `products_id`='".$categorie."'";
    
$result_ad_price mysql_query($sql_ad_price);
    
$qry_ad_price mysql_fetch_array($result_ad_price);
    
    
//get product name from tabel; 'shop_products_description'.
    
$sql_ad_name "SELECT `products_name` FROM `shop_products_description` WHERE `products_id`='".$---."'";                                     
    
$result_ad_name mysql_query($sql_ad_name);
    
$qry_ad_name mysql_fetch_array($result_ad_name); 
Hoe zou ik dit het beste kunnen aanpakken?

Laatst gewijzigd door Sjoukito : 24 May 2011 om 00:36
  Met citaat antwoorden
Oud 23 May 2011, 21:17   #2
anoniem14945
Guest
 
Berichten: n/a
Standaard

Dat kun je het beste direct in MySQL oplossen, en niet in PHP. Da's namelijk veel efficienter. Het kan wel in PHP (binnen de eerste lus moet je dan een nieuwe query uitvoeren om de aanvullende gegevens op te halen; dat geeft dus n+1 queries), maar dat zou ik niet doen.

Beschouw het volgende:
Code:
SELECT `shop_products`.`products_price`, `shop_products`.`products_image`, `shop_products_description`.`products_name` FROM `shop_products`, `shop_products_description` WHERE `shop_products`.`products_id` = `shop_products_description`.`products_id` AND `products_id` = '".$categorie."'
Je haalt daarmee iets op uit twee tabellen tegelijkertijd, en met `shop_products`.`products_id` = `shop_products_description`.`products_id` zorg je er voor dat de dingen die bij elkaar horen ook bij elkaar uit de database worden gehaald.

Mogelijk kun je het eerste gedeelte SELECT `shop_products`.`products_price`, `shop_products`.`products_image`, `shop_products_description`.`products_name` nog versimpelen tot SELECT `products_price`, `products_image`, `products_name`. Dat kan alleen als de drie kolomnamen ieder maar in één van de twee tabellen voor komen.
  Met citaat antwoorden
Oud 24 May 2011, 00:25   #3
anoniem31645
Guest
 
Berichten: n/a
Standaard

Kijk dat ziet er goed uit
Ik loop alleen tegen 1 probleem aan met het WERE gedeelte, zoals ik wel op meerdere pagina's doe gebruik ik het onderstaande menu. In dit geval om te zorgen dat ik producten uit 1 bepaalde categorie te zien krijg.

Nu staat er in de ene tabel wel tot welke categorie een product behoord maar in de andere niet. Ik kan dus `products_price`, `products_image` wel selecteren aan de hand van de bijbehorende categorie maar `products_name` niet.

Het is wel dat wanneer `id`1 in de ene tabel bij categorie 3 hoort dit in de andere tabel ook zo is. Ik neem aan dat ik moet gaan zorgen dat ik op de een of andere manier aan geef dat ik uit de ene tabel id1 ophaal ik dat ook uit de andere doe.


PHP-code:
<form name="jump" method="post" action="post">
     <select name="menu" onChange="location=document.jump.menu.options[document.jump.menu.selectedIndex].value;" >
     <option value="#">-----Product categorie:-----</option>
<?php
$sql_statement 
"SELECT `categories_id`, `categories_name` FROM `shop_categories_description`"
$qry mysql_query($sql_statement); 
while(
$obj mysql_fetch_array($qry)) 

echo 
'<option value=?page=product_update&amp;categorie='. (htmlspecialchars ($obj['categories_id'])) . '">' $obj['categories_name'] . '</option>';
}
?>
</select>
</form>
  Met citaat antwoorden
Oud 24 May 2011, 11:30   #4
anoniem31645
Guest
 
Berichten: n/a
Standaard

ok Ik geloof dat ik het WHERE gedeelte verkeerd had begrepen.
Als ik het nu goed zie word in het stukje code wat je gaf juist het id van de ene tabel aan die van de andere tabel en dan gefilterd aan de hand van de categorie?

Ik heb nu het onderstaande maar bij de while lus gaat het nu fout, normaal werkt het gewoon zo maar moet ik nu omdat ik informatie uit 2 tabellen halen iets anders doen?

PHP-code:
$sql_prod "SELECT `products_price`, `products_image`, `products_name`. FROM `test_tabel1`, `test_tabel`WHERE `test_tabel1`.`products_id` = `test_tabel`.`products_id` AND `master_categories_id` = '".($_GET["categorie"]) ."'";
$result_prod mysql_query($sql_prod);
while (
$obj_prod mysql_fetch_array ($result_prod))

  echo
'<tr>
    <td width="100"> <a <img src="/map/'
.$obj_prod['products_image'].'" height="24" ></td>
    <td width="300">'
;
    echo 
'<input type="text" name="naam" id="naam" value="'.$obj_prod['products_name'].'"></td>
    <td width="25">&euro;</td>
    <td width="100">'

    echo 
'<input type="text" name="prijs" id="prijs" value="'.$obj_prod['products_price'].' "></td>
  </tr>'
;
}

 
?> 

Laatst gewijzigd door Sjoukito : 24 May 2011 om 11:54
  Met citaat antwoorden
Oud 24 May 2011, 12:32   #5
anoniem15124
Guest
 
Berichten: n/a
Standaard

Kijk eens naar join.
  Met citaat antwoorden
Oud 25 May 2011, 10:09   #6
anoniem31645
Guest
 
Berichten: n/a
Standaard

a dus dat was waar ik naar op zoek was, "join".

Met behulp van een flink aantal sites heb ik nu dit onderstaande (wat zo goed als hetzelfde is als wat foobar me al gaf alleen nu snap ik de opbouw ook). Voor zover ik weet zou het moeten werken maar ik krijg dezelfde melding als voorheen. namelijk:
Code:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /../test7.php on line 85
Line 85 is het begin van de wile lus, dus waar "{" staat.

PHP-code:
$sql_prod " SELECT
 `test_tabel`. `products_price`, 
 `test_tabel`. `products_image`, 
 `test_tabel`. `master_categories_id`,
 `test_tabel`. `product_id`,

 `test_tabel_1`. `product_name`, 
 `test_tabel_1`. `product_id`

 FROM 
 `test_tabel`, `test_tabel_1`
 
 WHERE 
 `test_tabel`. `master_categories_id` = '"
.($_GET["categorie"]) ."'

 AND
 `test_tabel`. `product_id` = `test_tabel_1`. `product_id`
 
 "
;

$result_prod mysql_query($sql_prod);
while (
$obj_prod = (mysql_fetch_array ($result_prod)))

  echo
'<tr>
    <td width="100"> <a <img src="/map/'
.$obj_prod['products_image'].'" height="24" ></td>
    <td width="300">'
;
    echo 
'<input type="text" name="naam" id="naam" value="'.$obj_prod['products_name'].'"></td>
    <td width="25">&euro;</td>
    <td width="100">'

    echo 
'<input type="text" name="prijs" id="prijs" value="'.$obj_prod['products_price'].' "></td>
  </tr>'
;
}
?> 
  Met citaat antwoorden
Oud 25 May 2011, 11:34   #7
anoniem15124
Guest
 
Berichten: n/a
Standaard

Toch weer de standaard opmerkingen:
bouw (goede) foutafhandeling in.
Heb je de query al ge-echoot naar het scherm? Wat zie je dan en is die query dan zoals je zou verwachten? Wat als je die query kopieert en uitvoert in phpmyadmin?

Ik ben heel benieuwd of het met al die back-tics goed gaat.
  Met citaat antwoorden
Oud 25 May 2011, 12:36   #8
anoniem14945
Guest
 
Berichten: n/a
Standaard

Inderdaad: wat zegt mysql_error er over en hoe ziet de query er uit?

Backticks lijken goed te gaan. Ik vermoed dat je geen spatie na de punt mag die tussen tabelnaam en kolomnaam in staat.
  Met citaat antwoorden
Oud 26 May 2011, 00:05   #9
anoniem31645
Guest
 
Berichten: n/a
Standaard

Inderdaad het waren de spaties die het in de soep lieten lopen.
Nu nog het update gedeelte.

Inmiddels heb ik netjes een tellertje toegevoegd in het update formulier (voor de while $i=0 en in de while ++$i).
Als ik het goed heb moet ik nu dus in het update bestand alleen nog dit ondferstaande toevoegen. En $aantal is dan gelijk aan het aantal update quiery's (gelijk aan de hier boven genoemde $i)?

PHP-code:
$i 0;
while (
$i $aantal) {

// variable definieeren

//update query
//mysql_query

++$i
  Met citaat antwoorden
Oud 26 May 2011, 09:12   #10
anoniem14945
Guest
 
Berichten: n/a
Standaard

Vergeet de afsluitende } niet.

Let in je formulier wel even op met zaken als
echo '<input type="text" name="naam"
in een while lus: je krijgt zo meer dan één veld met de naam "naam" en dat kan natuurlijk niet. Hier is kun je uitstekend met een array werken, door ook een tellertje mee te laten lopen:
echo '<input type="text" name="naam['.$i.']"
In plaats van $i kun je ook direct het juiste id uit de database nemen, dat heb je toch nodig om de update te kunnen doen.

In plaats van een while lus kun je in het update script dan een for each lus gebruiken:
PHP-code:
for each ($_POST['naam'] as $id => $value) {
    
$sql "UPDATE `tabel` SET `naam` = '".$value."', `prijs` = '".$_POST['prijs']['id']."' WHERE `id` = '".$id."'";

Let even op mysql_real_escape_string en foutcontrole; dat heb ik voor de duidelijkheid niet in het voorbeeld.
  Met citaat antwoorden
Antwoord

Discussietools
Weergave

Regels voor berichten
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Forumnavigatie


Alle tijden zijn GMT +1. Het is nu 22:45.


Powered by vBulletin Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.