While loop in me script plakken...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mick

Mick

20/10/2004 08:23:00
Quote Anchor link
Goeiemorgen mensen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?
//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: &quot;" . $trimmed . "&quot; 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> &quot;" . $var . "&quot;</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)
PHP script in nieuw venster Selecteer het PHP script
1
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";
?>


Maargoed ik weet dus niet precies waar enzo :(

Ik hoop echt dat iemand mij hiermee kan helpen...
 
PHP hulp

PHP hulp

25/11/2024 01:58:21
 
Jorik

Jorik

20/10/2004 08:53:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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."";
}

?>

op deze manier kun je alles laten weergeven (even zelf aanpassen)
 
Mick

Mick

20/10/2004 10:12:00
Quote Anchor link
Maar krijg ik daar wel het gewenste resultaat mee? Want volgens mij moet je 2 query's uitvoeren om het te laten werken.

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... :$
 
Jorik

Jorik

20/10/2004 10:25:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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."";
}

?>


zo moet het geloofk wel lukken
 
Mick

Mick

20/10/2004 10:46:00
Quote Anchor link
Heb nu jouw script iets gebruikt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
// 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: &quot;" . $trimmed . "&quot; 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> &quot;" . $var . "&quot;</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... :(
 
Mitch X

Mitch X

20/10/2004 11:15:00
Quote Anchor link
Wat wil je precies doen, want dat is me nog niet helemaal duidelijk.

Je haalt eerst iets uit de database (wat?) en wil daarmee een nieuwe query uitvoeren en dan weergeven?
 
Mick

Mick

20/10/2004 11:32:00
Quote Anchor link
Ter verduidelijking;

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)
PHP script in nieuw venster Selecteer het PHP script
1
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";

?>


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".
 
Mitch X

Mitch X

20/10/2004 12:11:00
Quote Anchor link
Hmmz, ik zat aan dit te denken :
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 ...
 
Mick

Mick

20/10/2004 12:35:00
Quote Anchor link
klopt, subquery heb ik ook al geprobeerd...
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)
PHP script in nieuw venster Selecteer het PHP script
1
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");
}

?>
Gewijzigd op 20/10/2004 12:41:00 door Mick
 
Mick

Mick

25/10/2004 08:24:00
Quote Anchor link
Niemand enig idee?
 
Mick

Mick

26/10/2004 15:18:00
Quote Anchor link
Ik ben een beetje gaan knoeien maar ik denk dat dit wel in de richting komt, alleen krijg ik nu veel foutmeldingen dus er zit ergens een fout...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
;
}

?>
Gewijzigd op 26/10/2004 15:19:00 door Mick
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.