While loop in me script plakken...
Ik ben al een weekje aan het stoeien met een script maar zie door de bomen het bos niet meer.
Ik had een script dat via MySQL en PHP kan zoeken op "onderwerp". Bij dat onderwerp onthoud die het bijbehorende serienummer. Hierna ging hij een query uitvoeren om alles te laten zien waar dit serienummer bij hoort. 1 Serienummer komt namelijk vaker voor in de database en moet dus ook meerdere keren worden weergegeven.
Ik heb nu een script dat alleen maar het eerste serienummer weergeeft en niet de rest.
Wat ik eraan moet veranderen heeft iemand mij al mee geholpen alleen nu weet ik niet waar ik dat overal neer moet zetten. Die persoon zei: "Je moet ook met een while() alle records ophalen en elk serienummer aan elkaar plakken tot je uiteindelijk een lijst van nummers krijg met een komma er tussen. Die string plak je dan in de query voordat je heb gaat uitvoeren."
Als ik alleen zijn query uitvoer krijg ik een error.
Hier het deel van het script van mij waar het om draait:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?
//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","",""); //(host, username, password)
//specify database ** EDIT REQUIRED HERE **
mysql_select_db("shell") or die("Unable to select database"); //select which database we're using
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$row = mysql_fetch_array($result);
$query = "select * from onderdelen where serienummer in(".$row['serienummer'].")
order by serienummer";
$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);
if ($numrows == 0)
{
echo "<p>Sorry, uw zoekopdracht: "" . $trimmed . "" heeft geen resultaten opgeleverd.</p>";
}
// get results
$result = mysql_query($query) or die("Couldn't execute query");
// display what the person searched for
echo "<p>U heeft gezocht naar de omschrijving:<b> "" . $var . ""</b></p>";
// begin to show results set
echo "<table width='970' border=0>";
echo "<tr>";
echo "<td width='85'><strong>MESC-nummer</strong></td>";
echo "<td width='75'><strong>Type-nummer</strong></td>";
echo "<td width='210'><strong>Omschrijving</strong></td>";
echo "<td width='170'><strong>Type</strong></td>";
echo "<td width='70'><strong>Grootte</strong></td>";
echo "<td width='180'><strong>Eigenschappen</strong></td>";
echo "<td width='90'><strong>Alias</strong></td>";
echo "<td width='90'><strong>Naam</strong></td>";
echo "</tr>";
while ($row= mysql_fetch_array($result)) {
echo "<tr>";
echo "<td width='85'>".$row["serienummer"]."</td>";
echo "<td width='75'>".$row["typenummer"]."</td>";
echo "<td width='210'>".$row["omschrijving"]."</td>";
echo "<td width='170'>".$row["type"]."</td>";
echo "<td width='70'>".$row["grote"]."</td>";
echo "<td width='180'>".$row["eigenschappen"]."</td>";
echo "<td width='90'>".$row["alias"]."</td>";
echo "<td width='90'>".$row["naam"]."</td>";
echo "</tr>";
}
echo"</table>";
?>
//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","",""); //(host, username, password)
//specify database ** EDIT REQUIRED HERE **
mysql_select_db("shell") or die("Unable to select database"); //select which database we're using
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$row = mysql_fetch_array($result);
$query = "select * from onderdelen where serienummer in(".$row['serienummer'].")
order by serienummer";
$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);
if ($numrows == 0)
{
echo "<p>Sorry, uw zoekopdracht: "" . $trimmed . "" heeft geen resultaten opgeleverd.</p>";
}
// get results
$result = mysql_query($query) or die("Couldn't execute query");
// display what the person searched for
echo "<p>U heeft gezocht naar de omschrijving:<b> "" . $var . ""</b></p>";
// begin to show results set
echo "<table width='970' border=0>";
echo "<tr>";
echo "<td width='85'><strong>MESC-nummer</strong></td>";
echo "<td width='75'><strong>Type-nummer</strong></td>";
echo "<td width='210'><strong>Omschrijving</strong></td>";
echo "<td width='170'><strong>Type</strong></td>";
echo "<td width='70'><strong>Grootte</strong></td>";
echo "<td width='180'><strong>Eigenschappen</strong></td>";
echo "<td width='90'><strong>Alias</strong></td>";
echo "<td width='90'><strong>Naam</strong></td>";
echo "</tr>";
while ($row= mysql_fetch_array($result)) {
echo "<tr>";
echo "<td width='85'>".$row["serienummer"]."</td>";
echo "<td width='75'>".$row["typenummer"]."</td>";
echo "<td width='210'>".$row["omschrijving"]."</td>";
echo "<td width='170'>".$row["type"]."</td>";
echo "<td width='70'>".$row["grote"]."</td>";
echo "<td width='180'>".$row["eigenschappen"]."</td>";
echo "<td width='90'>".$row["alias"]."</td>";
echo "<td width='90'>".$row["naam"]."</td>";
echo "</tr>";
}
echo"</table>";
?>
Hier hetgene wat ik erbij in zou moeten voegen;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
// Maak een array
$aSerienummers = array();
// begin een lus die doorgaat zolang er records opgehaald kunnen worden
while($row = mysql_fetch_assoc($result))
{
// zet elk opgehaald serienummer in de array
$aSerienummers[] = $row['serienummer'];
}
// zet de array om naar een string door komma's tussen de nummers te plakken
$sString = implode(',' , $aSerienummers);
// Plak de string in de query
$query = "select * from onderdelen where serienummer in(".$sString.") order by serienummer";
?>
// Maak een array
$aSerienummers = array();
// begin een lus die doorgaat zolang er records opgehaald kunnen worden
while($row = mysql_fetch_assoc($result))
{
// zet elk opgehaald serienummer in de array
$aSerienummers[] = $row['serienummer'];
}
// zet de array om naar een string door komma's tussen de nummers te plakken
$sString = implode(',' , $aSerienummers);
// Plak de string in de query
$query = "select * from onderdelen where serienummer in(".$sString.") order by serienummer";
?>
Maargoed ik weet dus niet precies waar enzo :(
Ik hoop echt dat iemand mij hiermee kan helpen...
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$sql = "SElECT * FROM tabel ORDER BY iets ASC/DESC";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
while ($rij = mysql_fetch_object($resultaat)) {
$iets = htmlspecialchars($rij->iets); //ipv wat jij hebt bij $row[iets] enzo hebt, doe je dat zegmaar hier, dan bhoef je alleen $iets te doen
echo "".$iets."";
}
?>
$sql = "SElECT * FROM tabel ORDER BY iets ASC/DESC";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
while ($rij = mysql_fetch_object($resultaat)) {
$iets = htmlspecialchars($rij->iets); //ipv wat jij hebt bij $row[iets] enzo hebt, doe je dat zegmaar hier, dan bhoef je alleen $iets te doen
echo "".$iets."";
}
?>
op deze manier kun je alles laten weergeven (even zelf aanpassen)
De eerste query moet alle serienummers onthouden die voldoen aan de opgegeven omschrijving. De tweede query moet ervoor zorgen dat hij al deze serienummers weergeeft met de rest * wat erbij hoort. Omdat 1 serienummer vaker voorkomt in de database moet hij dus ook vaak de dubbele serienummers laten zien.
In mijn bovenste script doet hij dit. Alleen kapt hij al na zijn eerste resultaat... :$
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$sql = "SElECT * FROM tabel WHERE serienummer = 'serienummer' ORDER BY iets ASC/DESC"; // ASC is abc, DESC is z-y-x, order by iets, iets veranderen door waarop je het wilt sorteren, table veranderen door je tabel, en serieunmmer=sl vervangen door waar het serie nummer iets is
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
while ($rij = mysql_fetch_object($resultaat)) {
$iets = htmlspecialchars($rij->iets); //ipv wat jij hebt bij $row[iets] enzo hebt, doe je dat zegmaar hier, dan bhoef je alleen $iets te doen
echo "".$iets."";
}
?>
$sql = "SElECT * FROM tabel WHERE serienummer = 'serienummer' ORDER BY iets ASC/DESC"; // ASC is abc, DESC is z-y-x, order by iets, iets veranderen door waarop je het wilt sorteren, table veranderen door je tabel, en serieunmmer=sl vervangen door waar het serie nummer iets is
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
while ($rij = mysql_fetch_object($resultaat)) {
$iets = htmlspecialchars($rij->iets); //ipv wat jij hebt bij $row[iets] enzo hebt, doe je dat zegmaar hier, dan bhoef je alleen $iets te doen
echo "".$iets."";
}
?>
zo moet het geloofk wel lukken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$row = mysql_fetch_array($result);
$sql = "SElECT * FROM onderdelen WHERE serienummer = 'serienummer' ORDER BY serienummer";
$numresults=mysql_query($sql);
$numrows=mysql_num_rows($numresults);
if ($numrows == 0)
{
echo "<p>Sorry, uw zoekopdracht: "" . $trimmed . "" heeft geen resultaten opgeleverd.</p>";
}
// get results
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
// display what the person searched for
echo "<p>U heeft gezocht naar de omschrijving:<b> "" . $var . ""</b></p>";
// begin to show results set
echo "<table width='970' border=0>";
echo "<tr>";
echo "<td width='85'><strong>MESC-nummer</strong></td>";
echo "<td width='75'><strong>Type-nummer</strong></td>";
echo "<td width='210'><strong>Omschrijving</strong></td>";
echo "<td width='170'><strong>Type</strong></td>";
echo "<td width='70'><strong>Grootte</strong></td>";
echo "<td width='180'><strong>Eigenschappen</strong></td>";
echo "<td width='90'><strong>Alias</strong></td>";
echo "<td width='90'><strong>Naam</strong></td>";
echo "</tr>";
while ($row = mysql_fetch_object($resultaat)) {
echo "<tr>";
echo "<td width='85'>".$row["serienummer"]."</td>";
echo "<td width='75'>".$row["typenummer"]."</td>";
echo "<td width='210'>".$row["omschrijving"]."</td>";
echo "<td width='170'>".$row["type"]."</td>";
echo "<td width='70'>".$row["grote"]."</td>";
echo "<td width='180'>".$row["eigenschappen"]."</td>";
echo "<td width='90'>".$row["alias"]."</td>";
echo "<td width='90'>".$row["naam"]."</td>";
echo "</tr>";
}
echo"</table>";
?>
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$row = mysql_fetch_array($result);
$sql = "SElECT * FROM onderdelen WHERE serienummer = 'serienummer' ORDER BY serienummer";
$numresults=mysql_query($sql);
$numrows=mysql_num_rows($numresults);
if ($numrows == 0)
{
echo "<p>Sorry, uw zoekopdracht: "" . $trimmed . "" heeft geen resultaten opgeleverd.</p>";
}
// get results
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
// display what the person searched for
echo "<p>U heeft gezocht naar de omschrijving:<b> "" . $var . ""</b></p>";
// begin to show results set
echo "<table width='970' border=0>";
echo "<tr>";
echo "<td width='85'><strong>MESC-nummer</strong></td>";
echo "<td width='75'><strong>Type-nummer</strong></td>";
echo "<td width='210'><strong>Omschrijving</strong></td>";
echo "<td width='170'><strong>Type</strong></td>";
echo "<td width='70'><strong>Grootte</strong></td>";
echo "<td width='180'><strong>Eigenschappen</strong></td>";
echo "<td width='90'><strong>Alias</strong></td>";
echo "<td width='90'><strong>Naam</strong></td>";
echo "</tr>";
while ($row = mysql_fetch_object($resultaat)) {
echo "<tr>";
echo "<td width='85'>".$row["serienummer"]."</td>";
echo "<td width='75'>".$row["typenummer"]."</td>";
echo "<td width='210'>".$row["omschrijving"]."</td>";
echo "<td width='170'>".$row["type"]."</td>";
echo "<td width='70'>".$row["grote"]."</td>";
echo "<td width='180'>".$row["eigenschappen"]."</td>";
echo "<td width='90'>".$row["alias"]."</td>";
echo "<td width='90'>".$row["naam"]."</td>";
echo "</tr>";
}
echo"</table>";
?>
Maar dat geeft een error... :(
Je haalt eerst iets uit de database (wat?) en wil daarmee een nieuwe query uitvoeren en dan weergeven?
http://members.lycos.nl/testvirotest/voorbeeld.gif
Dit is even een zelfgemaakt screenshot van een database. Deze gebruik ik natuurlijk niet ;)
Maargoed, zoals je kan zien in het plaatje zie je dat serienummers vaker voorkomen. Nu word er dus via mijn search script gezocht op "omschrijving".
Stel dat ze op televisie zoeken. Dan moet hij dus eigenlijk alles wat bij omschrijving als "televisie" staat weergeven. Maar zoals je ziet staat niet overal in de database bij omschrijving een omschrijving. Ze hebben echter wel hetzelfde serienummer.
Dus wat het script in 2 query's eigenlijk zou moeten doen is; Zoek het serienummer wat erbij hoort. Voer daarna een query uit dat via de gevonden serienummers alles daarvan laat zien.
Zo krijg ik dus ook die regel met die lege waarde bij omschrijving. :)
Als ik dit in mijn script gebruik;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","",""); //(host, username, password)
//specify database ** EDIT REQUIRED HERE **
mysql_select_db("shell") or die("Unable to select database"); //select which database we're using
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$query = "select * from onderdelen where mescnummer in() order by serienummer";
?>
//connect to your database ** EDIT REQUIRED HERE **
mysql_connect("localhost","",""); //(host, username, password)
//specify database ** EDIT REQUIRED HERE **
mysql_select_db("shell") or die("Unable to select database"); //select which database we're using
// Build SQL Query
$result = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ");
$query = "select * from onderdelen where mescnummer in() order by serienummer";
?>
En dan de resultaten in een tabel zoals hierboven is aangegeven, uitvoer dan krijg ik niet die lege velden terug. Dus hij voert maar 1 query uit. Dat is dus de query van "zoek alles waar het woord televisie in zit en laat die regel zien". Ik moet er dus nog bij hebben; "onthoud serienummer en voer query uit die alles laat zien van de gevonden serienummers".
SELECT * FROM onderdelen WHERE serienummer =
( SELECT serienummer FROM onderdelen WHERE omschrijving LIKE '%koelkast%'; ) ORDER BY id;
Maar ik ff naar de manual, blijkt dat MySQL geen subqueries telaat, zullen er dan toch 2 moeten worden ...
heb het nu ff voor mezelf op papier geschreven wat hij moet doen...
ben geen master in php ;) maar heb wel geleerd dat je beter altijd eerst voor jezelf kan zeggen wat hij moet doen, en daarna gaan scripten.
Dit is wat hij moet doen;
query 1: selecteer het serienummer bij gevonden omschrijving, doe dit zolang er geen omschrijving meer voldoet aan je zoekcriteria
query 2: select * from onderdelen where serienummer is gelijk aan gevonden serienummers bij query 1, toon dit in tabel.
*edit*
Heb nu dit als query... Maar zal wel helemaal in de verkeerde richting zitten ofniet? :$
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
// Build SQL Query
while ($seriezoek = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ")){
$query = mysql_query("select * from onderdelen where serienummer in(".$seriezoek.") order by serienummer");
}
?>
// Build SQL Query
while ($seriezoek = mysql_query("SELECT * FROM onderdelen WHERE omschrijving LIKE '%" .$trimmed. "%' ")){
$query = mysql_query("select * from onderdelen where serienummer in(".$seriezoek.") order by serienummer");
}
?>
Gewijzigd op 20/10/2004 12:41:00 door Mick
Niemand enig idee?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?
$search = mysql_query("SELECT serienummer FROM onderdelen WHERE omschrijving");
while ($search = '%" .$trimmed. "%'){
$row = mysql_fetch_array($search);
$result = "select * from onderdelen where serienummer in(".$row['serienummer'].")
order by ID ASC";
}
?>
$search = mysql_query("SELECT serienummer FROM onderdelen WHERE omschrijving");
while ($search = '%" .$trimmed. "%'){
$row = mysql_fetch_array($search);
$result = "select * from onderdelen where serienummer in(".$row['serienummer'].")
order by ID ASC";
}
?>
Gewijzigd op 26/10/2004 15:19:00 door Mick