Page 1 of 1
Why are my arrays duplicating
Posted: Mon Jan 28, 2008 9:35 am
by micknc
I am trying to return two separate pieces of data with arrays. The data is right but the first array returns the same number of rows as the second array. There are two rows in the first array but they are duplicated 3 time because there are 6 rows in the second array. I am new so I am sure I am just doing something wrong.
here is the code that I am dealing with:
Code: Select all
<?
while($rowtrack = mysql_fetch_array($resulttrack)){
?> <tr align="center">
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_DATE'];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_TIME'];?></td>
<td<font color="ffffff" face="arial"><? echo $status_codes[$rowtrack['TRACK_STATUS']];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_NUMBER'];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_NOTES'];?></td>
<?
}
?>
And then later I have the following
Code: Select all
while($row = mysql_fetch_array($result)){
?>
<tr><td width="100"><font color='ffffff' face='arial'><? echo $row['QTY'];?></td><td width="500"><font color='ffffff' face='arial'><? echo $row['DESCRIP'];?></td>
<?
}
?>
Result and Result track are defined earlier with two different queries. Resulttrack has two rows of data and result has 6. Both are variable depending on the earlier search so i can't just say "return 2 rows" because the next search may have 5.
Am I making sense?
Re: Why are my arrays duplicating
Posted: Mon Jan 28, 2008 10:27 am
by JAM
Looks right. What does this give you;
Code: Select all
// query goes here, directly after put...
echo mysql_num_rows($resulttrack);
echo mysql_num_rows($result);
You didn't manage to stick these while-loops within another loop by mistake?
Re: Why are my arrays duplicating
Posted: Mon Jan 28, 2008 11:15 am
by micknc
I don't think so. Here is the code that I have. It is pretty rudimentary but I working my way through understanding php:
Code: Select all
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Sales Order View</title>
</head>
<body bgcolor="#36393D" link="white" vlink="ffefab" alink="ffefab">
<?
$id=$_GET['id'];
mysql_connect("localhost", "user", "password") or die(mysql_error());
mysql_select_db("ncfarmsi_oakst") or die(mysql_error());
// Make a MySQL Connection
// Construct our join query
$query = "SELECT LINEITM.QTY,LINEITM.DESCRIP, CUSTSHP.CITY, CUSTSHP.STATE FROM LINEITM, CUSTSHP WHERE LINEITM.SHIP_ID = CUSTSHP.SHIP_ID AND LINEITM.SO_NO=$id";
$querys = "SELECT LINEITM.QTY,LINEITM.DESCRIP, CUSTSHP.CITY, CUSTSHP.STATE FROM LINEITM, CUSTSHP WHERE LINEITM.SHIP_ID = CUSTSHP.SHIP_ID AND LINEITM.SO_NO=$id";
$querysohead = "SELECT LINEITM.SO_NO, SOHEAD.REQRD_DATE, SOHEAD.PO_NO FROM LINEITM, SOHEAD WHERE LINEITM.SO_NO = SOHEAD.SO_NO AND LINEITM.SO_NO=$id";
$querytrack = "SELECT LINEITM.SO_NO, TRACK.SO_NO, TRACK.TRACK_STATUS, TRACK.TRACK_DATE, TRACK.TRACK_TIME, TRACK.TRACK_NOTES, TRACK.TRACK_NUMBER FROM LINEITM, TRACK WHERE LINEITM.SO_NO = TRACK.SO_NO AND LINEITM.SO_NO=$id";
$results=mysql_query($querys);
$rows = mysql_fetch_assoc($results);
$resultsohead=mysql_query($querysohead);
$rowsohead = mysql_fetch_assoc($resultsohead);
$resulttrack=mysql_query($querytrack);
$rowtrack = mysql_fetch_assoc($resulttrack);
$status_codes = array(
'19' => 'Test Field',
'20' => 'Order Shipped',
);
?>
<table width="600" align="center" border="4" bgcolor="#D01F3C"><tr><td align="center"><font color="ffffff" face="arial"><h2>Order Verification</h2>
<table><tr><td><font color="ffffff" face="arial">Our Information indicates the following for SO #<? echo $rowsohead['SO_NO'];?>:</td></tr></table>
<table width="450" align="center">
<tr><td><font color="ffffff" face="arial">Ship Date: <? echo $rowsohead['REQRD_DATE'];?></td>
<td>     </td><td><font color="ffffff" face="arial">Your PO Number: <? echo $rowsohead['PO_NO'];?></td></tr>
<tr><td><font color="ffffff" face="arial">Customer City: <? echo $rows['CITY'];?></td>
<td><font color="ffffff" face="arial">     </td><td><font color="ffffff" face="arial">Customer State: <? echo $rows['STATE'];?></td></tr></table></td></tr></table>
<table width="600" align="center" border="0">
<tr align="center">
<td bgcolor="#D01F3C"><font color="ffffff" face="arial">Date</td>
<td bgcolor="#D01F3C"><font color="ffffff" face="arial">Time</td>
<td bgcolor="#D01F3C"><font color="ffffff" face="arial">Status</td>
<td bgcolor="#D01F3C"><font color="ffffff" face="arial">Tracking #</td>
<td bgcolor="#D01F3C"><font color="ffffff" face="arial">Notes</td>
</tr>
<?
while($rowtrack = mysql_fetch_array($resulttrack)){
?> <tr align="center">
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_DATE'];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_TIME'];?></td>
<td<font color="ffffff" face="arial"><? echo $status_codes[$rowtrack['TRACK_STATUS']];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_NUMBER'];?></td>
<td<font color="ffffff" face="arial"><? echo $rowtrack['TRACK_NOTES'];?></td>
<?
}
?>
</tr>
</table>
<?
echo "<br>";
$result = mysql_query($query) or die(mysql_error());
echo "<table width='600' align='center'><tr><td width='100'><font color='ffffff' face='arial'>Quanity</td><td width='500'><font color='ffffff' face='arial'>Items on Order</td></tr>";
// Print out the contents of each row into a table
while($row = mysql_fetch_array($result)){
?>
<tr><td width="100"><font color='ffffff' face='arial'><? echo $row['QTY'];?></td><td width="500"><font color='ffffff' face='arial'><? echo $row['DESCRIP'];?></td>
<?
}
?>
</tr></table><br>
<table width ="450" align="center"><tr><td align="center">
<?php
$myurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo "<p><a href=sendpage.php?myurl=" .$myurl. ">Click here if you would like to duplicate this order in the future.</a></p>";
?>
</tr></td></table>
Re: Why are my arrays duplicating
Posted: Mon Jan 28, 2008 9:03 pm
by micknc
I got it worked out. It was this line.
Code: Select all
$querytrack = "SELECT LINEITM.SO_NO, TRACK.SO_NO, TRACK.TRACK_STATUS, TRACK.TRACK_DATE, TRACK.TRACK_TIME, TRACK.TRACK_NOTES, TRACK.TRACK_NUMBER FROM LINEITM, TRACK WHERE LINEITM.SO_NO = TRACK.SO_NO AND LINEITM.SO_NO=$id";
Every time it called a new so from lineitm it put in a return from track. It didn't need to be near as complicated as the SO_NO was in track as well.
All i needed:
Code: Select all
$querytrack = "SELECT * FROM TRACK WHERE TRACK_SO_NO=$id";
Learning little by little.