[PHP/My SQL] Lege sub rows weergeven

Pagina: 1
Acties:
  • 266 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Ik heb een database waarvan het eerste id begint op 2 en de tweede id begint op row 12. (Sub)row 3 t/m 11 is een subrow van het eerste ID zeg maar. Ik wil dat hij deze ook laat zien in mijn zoekopdracht.

Wat ik dus graag zou willen is het volgende;
Je zoekt naar een serienummer.

In je code zeg je dan:

- Zoek naar opgegeven serienummer en laat row zien.
- Als de volgende row bij serienummer leeg is, laat ook die row zien, is deze niet leeg, kijk of het opgegeven serienummer gelijk is aan zoekopdracht. Zo ja, herhaal dit hierboven. Zo nee, zoek verder naar opgegeven serienummer en herhaal dit hierboven.

Hij moet die rows daaronder ook kunnen weergeven. De extra gegevens die eronder staan hebben altijd een lege waarde bij de serienummers.


---
Ik heb het verduidelijkt met screenshots.

http://members.lycos.nl/testvirotest/voorbeeld.jpg
Dit hierboven is hoe de database eruit ziet.

http://members.lycos.nl/testvirotest/voorbeeld2.gif
Dit is hoe mijn zoekopdracht eruit komt als ik de rijen (nr, serienummer, typenummer, omschrijving, type, grote, eigenschappen) wil laten zien.

Hier kun je mijn gevonden, maar aangepaste script downloaden waar ik nu mee bezig ben;
http://members.lycos.nl/testvirotest/search.zip

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

En wat lukt er niet dan? Kun je dat deel van het script hier posten, ik heb geen zin je hele code door te spitten. De opzet van de code lijkt me simpel: doe een query naar je database en loop dan door je recordset heen.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

PHP mag in Programming & Webscripting

W&G => P&W

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Ik plaats ze ook nooit goed :p

Maar hetgeen wat hij nu doet is dat hij alleen maar de eerste row pakt. De lege rows daaronder pakt hij niet. Ik weet ook niet hoe je dus zegt dat hij ook die lege rows moet weergeven daaronder.

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
je kijkt in welke row dat serienummer staat, bij het id (nr) van de row tel je elke keer 1 op en kijk je of de table serienummer leeg is

bijv:

PHP:
1
2
3
4
5
6
7
8
9
10
11
for($id= $nr; $vol = 1; $id++)
{
$query = mysql_guery("SELECT * FROM tabelnaam WHERE ID=".$id."");
$obj = mysql_fetch_array($query);
if($obj['serienummer'] == "")
{
$vol= 0;
}else{
$vol= 1;
}
}

[ Voor 6% gewijzigd door Wolf87 op 04-10-2004 14:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Op zich is dit niet echt goed database ontwerp.

Als het nog mogelijk is het ontwerp aan te passen, zou ik het in 2 tabellen splitsen.

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@JimmyShelter

Inderdaad. Ik had het ook anders gedaan. Maar het valt niet meer aan te passen. ;(

@ Wolf 87

Ik heb je scriptje nu zo geplaatst

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
<? 
// begin to show results set
echo "Resultaten";
$count = 1 + $s ;

for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == ""); 
{ 
$vol= 0; 
}else{ 
$vol= 1; 
} 
}




// now you can display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["serienummer"];  
  $title2 = $row["typenummer"];
  $title3 = $row["omschrijving"];
  $title4 = $row["type"];
$title5 = $row["grote"];
$title6 = $row["eigenschappen"]; 
?>


Alleen gaf hij nu een error (Parse error: parse error, unexpected T_ELSE in c:\phpdev5\www\public\data\search.php on line 75)

Line 75 is deze;
}else{

[ Voor 28% gewijzigd door mickjuh op 04-10-2004 15:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

De ; achter de if regel moet weg.

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ Jimmy,

Als ik die ; weghaal dan krijg ik de volgende error:

U heeft gezocht naar: "blck"

Resultaten
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev5\www\public\data\search.php on line 71

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev5\www\public\data\search.php on line 71

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev5\www\public\data\search.php on line 71

etc etc etc.

Deze fout krijg ik een stuk of 50 keer nu.

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
stond een foutje in, deze is goed:

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
<? 
// begin to show results set 
echo "Resultaten"; 
$count = 1 + $s ; 

for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == "")
{ 
$vol= 0; 
}}else{ 
$vol= 1; 
} 
 




// now you can display the results returned 
  while ($row= mysql_fetch_array($result)) { 
  $title = $row["serienummer"];   
  $title2 = $row["typenummer"]; 
  $title3 = $row["omschrijving"]; 
  $title4 = $row["type"]; 
$title5 = $row["grote"]; 
$title6 = $row["eigenschappen"]; 
?> 

[ Voor 12% gewijzigd door Wolf87 op 04-10-2004 15:22 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Mijn ID veld heette "nr". Deze heb ik nu even aangepast naar ID.
Maar nu krijg ik alweer de fout van line 75.

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
<?// get results
  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
echo "<p>U heeft gezocht naar: &quot;" . $var . "&quot;</p>";

// begin to show results set
echo "Resultaten";
$count = 1 + $s ;

for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == "")
{ 
$vol= 0; 
}}else{ 
$vol= 1; 
} 




// now you can display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["serienummer"];  
  $title2 = $row["typenummer"];
  $title3 = $row["omschrijving"];
  $title4 = $row["type"];
$title5 = $row["grote"];
$title6 = $row["eigenschappen"];

  echo "<BR>";
  echo "$count.)&nbsp;$title &nbsp;$title2 &nbsp;$title3 &nbsp;$title4 &nbsp;$title5 &nbsp;$title6";
  
  $count++ ;
  }

$currPage = (($s/$limit) + 1);

//break before paging
  echo "<br>";?>


Lijn 75 is deze: }}else{

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Misschien plaats ik jouw code ook wel op de verkeerde plek in het script. Maar volgens mij staat hij hier goed. Als je graag het hele script van 133 lines wilt zien kan ik die ook wel posten. :)

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
gooi hem er maar ff op, maar wat je ID hebt gemaakt kon gewoon nr blijven, in dir for loop staat $id = $nr ($nr komt uit de database)

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Okeej komtie :P

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<html>
<body>
<form name="form" action="search.php" method="get">
  <input type="text" name="q" />
  <input type="submit" name="Submit" value="Zoeken" />
</form>
</body>
</html>

<?php

  // Get the search variable from URL
  $var = @$_GET['q'] ;
  $trimmed = trim($var); //trim whitespace from the stored variable

// rows to return
$limit=10; 

// check for an empty string and display a message.
if ($trimmed == "")
  {
  echo "<p>Geef hier uw zoekopdracht</p>";
  exit;
  }

// check for a search parameter
if (!isset($var))
  {
  echo "<p>We dont seem to have a search parameter!</p>";
  exit;
  }

//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  
$query = "select * from onderdelen where omschrijving like \"%$trimmed%\"  
  order by serienummer"; // EDIT HERE and specify your table and field names for the SQL query

 $numresults=mysql_query($query);
 $numrows=mysql_num_rows($numresults);

if ($numrows == 0)
  {
  echo "<h4>Resultaten</h4>";
  echo "<p>Sorry, uw zoekopdracht: &quot;" . $trimmed . "&quot; heeft geen resultaten opgeleverd.</p>";
  }

// next determine if s has been passed to script, if not use 0
  if (empty($s)) {
  $s=0;
  }

// get results
  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

// display what the person searched for
echo "<p>U heeft gezocht naar: &quot;" . $var . "&quot;</p>";

// begin to show results set
echo "Resultaten";
$count = 1 + $s ;

for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == "")
{ 
$vol= 0; 
}}else{ 
$vol= 1; 
} 




// now you can display the results returned
  while ($row= mysql_fetch_array($result)) {
  $title = $row["serienummer"];  
  $title2 = $row["typenummer"];
  $title3 = $row["omschrijving"];
  $title4 = $row["type"];
$title5 = $row["grote"];
$title6 = $row["eigenschappen"];

  echo "<BR>";
  echo "$count.)&nbsp;$title &nbsp;$title2 &nbsp;$title3 &nbsp;$title4 &nbsp;$title5 &nbsp;$title6";
  
  $count++ ;
  }

$currPage = (($s/$limit) + 1);

//break before paging
  echo "<br>";

  // next we need to do the links to other results
  if ($s>=1) { // bypass PREV link if s is 0
  $prevs=($s-$limit);
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt; 
  Vorige 10</a>&nbsp&nbsp;";
  }

// calculate number of pages needing links
  $pages=intval($numrows/$limit);

// $pages now contains int of pages needed unless there is a remainder from division

  if ($numrows%$limit) {
  // has remainder so add one page
  $pages++;
  }

// check to see if last page
  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) {

  // not last page so give NEXT link
  $news=$s+$limit;

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Volgende 10 &gt;&gt;</a>";
  }

$a = $s + ($limit) ;
  if ($a > $numrows) { $a = $numrows ; }
  $b = $s + 1 ;
  echo "<p>Getoonde resultaten <b>$b</b> tot <b>$a</b> van de <b>$numrows</b></p>";
  
?>

Acties:
  • 0 Henk 'm!

Verwijderd

nofi maar dit is een ERG slecht databes ontwerp, 't lijkt meer op een 1 op 1 kopie van een spreadsheet naar een database.

waarom is het slecht?

1. tis niet uit te breiden met meer attributen voor elk serienummer, of je moet alle ID's gaan hernummeren.

2. je moet altijd gesorteerd op id je data uit de database trekken, anders klopt het niet meer

3. je kan maar met 1 connectie tegelijk data in de database stoppen, omdat het anders mogelijk is dat dat verschillende records(1 record is meerdere rows in dit ontwerp) door elkaar komen te staan, (dus er mag maar 1 gebruiker tegelijk van je webpagina gebruik maken om data in de database te stoppen)


4. als je een item verwijdert, en er daarna weer 1 toevoegt kan je er donder op zeggen, dat op een gegeven moment de ene helft van de data in het gat van de zojuist verwijderde data komt te staan, en de andere helft aan het eind. waardoor je database meer een data-schroothoop wordt

5. it's plain icky

ik zou je ten zeerste aanraden iets aan je DB te doen, want dit is een ramp die staat te wachten om te gebeuren.

als je interesse hebt kan ik wel een beter database ontwerpje hier laten zien.

[ Voor 7% gewijzigd door Verwijderd op 04-10-2004 15:49 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
En dit is de errror:
Parse error: parse error, unexpected T_ELSE in search.php on line 75

[ Voor 12% gewijzigd door mickjuh op 04-10-2004 15:46 ]


Acties:
  • 0 Henk 'm!

  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-09 16:30

MAZZA

Barbie is er weer!

Nu ben ik niet een PHP'er eigenlijk maar is een mysql query in een for lus wel wat je wil? :) Klinkt als een slecht database ontwerp eigenlijk. Waarom koppel je niet 2 tabellen aan elkaar?

Of praat ik erg raar? :P

/edit: Wat hierboven (Resc) gezegd wordt dus ;)

[ Voor 14% gewijzigd door MAZZA op 04-10-2004 15:51 ]


Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
zo zou hij het moeten doen
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<html> 
<body> 
<form name="form" action="search.php" method="get"> 
  <input type="text" name="q" /> 
  <input type="submit" name="Submit" value="Zoeken" /> 
</form> 
</body> 
</html> 

<?php 

  // Get the search variable from URL 
  $var = @$_GET['q'] ; 
  $trimmed = trim($var); //trim whitespace from the stored variable 

// rows to return 
$limit=10; 

// check for an empty string and display a message. 
if ($trimmed == "") 
  { 
  echo "<p>Geef hier uw zoekopdracht</p>"; 
  exit; 
  } 

// check for a search parameter 
if (!isset($var)) 
  { 
  echo "<p>We dont seem to have a search parameter!</p>"; 
  exit; 
  } 

//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   
$query = "select * from onderdelen where omschrijving like \"%$trimmed%\"   
  order by serienummer"; // EDIT HERE and specify your table and field names for the SQL query 

$numresults=mysql_query($query); 
$numrows=mysql_num_rows($numresults); 

if ($numrows == 0) 
  { 
  echo "<h4>Resultaten</h4>"; 
  echo "<p>Sorry, uw zoekopdracht: &quot;" . $trimmed . "&quot; heeft geen resultaten opgeleverd.</p>"; 
  } 

// next determine if s has been passed to script, if not use 0 
  if (empty($s)) { 
  $s=0; 
  } 

// get results 
  $query .= " limit $s,$limit"; 
  $result = mysql_query($query) or die("Couldn't execute query"); 

// display what the person searched for 
echo "<p>U heeft gezocht naar: &quot;" . $var . "&quot;</p>"; 

// begin to show results set 
echo "Resultaten"; 
$count = 1 + $s ; 

for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == "") 
{ 
$vol= 0; 
}else{ 
$vol= 1; 
}}




// now you can display the results returned 
  while ($row= mysql_fetch_array($result)) { 
  $title = $row["serienummer"];   
  $title2 = $row["typenummer"]; 
  $title3 = $row["omschrijving"]; 
  $title4 = $row["type"]; 
$title5 = $row["grote"]; 
$title6 = $row["eigenschappen"]; 

  echo "<BR>"; 
  echo "$count.)&nbsp;$title &nbsp;$title2 &nbsp;$title3 &nbsp;$title4 &nbsp;$title5 &nbsp;$title6"; 
   
  $count++ ; 
  } 

$currPage = (($s/$limit) + 1); 

//break before paging 
  echo "<br>"; 

  // next we need to do the links to other results 
  if ($s>=1) { // bypass PREV link if s is 0 
  $prevs=($s-$limit); 
  print "&nbsp;<a href=\"$PHP_SELF?s=$prevs&q=$var\">&lt;&lt; 
  Vorige 10</a>&nbsp&nbsp;"; 
  } 

// calculate number of pages needing links 
  $pages=intval($numrows/$limit); 

// $pages now contains int of pages needed unless there is a remainder from division 

  if ($numrows%$limit) { 
  // has remainder so add one page 
  $pages++; 
  } 

// check to see if last page 
  if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { 

  // not last page so give NEXT link 
  $news=$s+$limit; 

  echo "&nbsp;<a href=\"$PHP_SELF?s=$news&q=$var\">Volgende 10 &gt;&gt;</a>"; 
  } 

$a = $s + ($limit) ; 
  if ($a > $numrows) { $a = $numrows ; } 
  $b = $s + 1 ; 
  echo "<p>Getoonde resultaten <b>$b</b> tot <b>$a</b> van de <b>$numrows</b></p>"; 
   
?> 

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ Mazza:

Neej je praat helemaal niet raar. Maar het probleem is dat deze database vanuit een excel sheet komt. Deze excel sheet bevat ongeveer 60.000 rows. Daarnaast moeten er nog een stuk of 60 van deze excel sheets bij in komen. Dus aanpassen gaat niet zo 1...2...3 :)

Acties:
  • 0 Henk 'm!

  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-09 16:30

MAZZA

Barbie is er weer!

mickjuh schreef op 04 oktober 2004 @ 15:52:
@ Mazza:

Neej je praat helemaal niet raar. Maar het probleem is dat deze database vanuit een excel sheet komt. Deze excel sheet bevat ongeveer 60.000 rows. Daarnaast moeten er nog een stuk of 60 van deze excel sheets bij in komen. Dus aanpassen gaat niet zo 1...2...3 :)
:)

Maar het probleem wordt ook al een beetje geschetst door ReSc. Op een gegeven moment loop je ermee in de soep. En om dat te voorkomen kan je beter nu vast je ontwerp zo maken dat je niet na 40 van die andere excel sheets erachter komt dat je alsnog opnieuw moet beginnen :)

/edit: Ik weet overigens uit ervaring dat 'de baas' het nooit prettig vindt om "opnieuw beginnen" te horen. Echter is het in dit geval vrij hard te maken dat het erg nuttig is om toch maar wel te doen.

[ Voor 14% gewijzigd door MAZZA op 04-10-2004 15:56 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ Wolf 87
Okeej, hij ging nu al wat langer zoeken.

Nu krijg ik dit;

Resultaten
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev5\www\public\data\search.php on line 71

Fatal error: Maximum execution time of 30 seconds exceeded in c:\phpdev5\www\public\data\search.php on line 70

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
ff een vraagje, hoe heet het id of nr veld nu in je database, en het * kan je ook veranderen in serienummer, want dat is het enige wat je in dit stukje nodig hebt

Acties:
  • 0 Henk 'm!

Verwijderd

je praat over 360K records(even aangenomen dat elke sheet even groot is) en je wilt het zo in de database opslaan? zie mijn eerdere post, dit is een ramp die staan te wachten om te gebeuren.
tip: schrijf een Excell macro o.i.d. die de data voor je bewerkt en exporteerd zodat je het in een fatsoenlijk db ontwerp kan stoppen anders gaat dit niet werken zoals jij dat graag hebt.
geloof me, echt...


en het probleem is makkelijk(nou ja, vanaf hier gezien dan) te verhelpen.
op 2 manieren:


als je de tabel uit plaatje 1 veranderd zodat de data uit rows nr.3 t/m 11
bij row 2 komt te staan heb je voor elk serienummer 1 row, en je problemen zijn weg

of je kan in rows 3 t/m 11 het serienummer toevoegen zodat je iig altijd weet bij welk serienummer de data hoort.

[ Voor 32% gewijzigd door Verwijderd op 04-10-2004 16:12 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ Mazza:

true true, maar ik heb het zelf niet gemaakt, de xls. ik zou graag ook met 2 tabellen werken maar dat gaat nu gewoon niet. daarnaast komt er als het goed is niets meer bij. het gaat er alleen om dat er een makkelijke zoekfunctie is want om door 60 xls sheets te bladeren a 60.000 rows om iets te zoeken is niet handig.

het script werkt goed alleen liet alleen maar de eerste row zien. ik wil dat hij die lege rows daaronder ook liet zien :)

@ Wolf 87:
Dat heet nu "ID". Voorheen "nr". Ik zal die * ff aanpassen, moment

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
je praat over 360K records(even aangenomen dat elke sheet even groot is) en je wilt het zo in de database opslaan? zie mijn eerdere post, dit is een ramp die staan te wachten om te gebeuren.
tip: schrijf een Excell macro o.i.d. die de data voor je bewerkt en exporteerd zodat je het in een fatsoenlijk db ontwerp kan stoppen anders gaat dit niet werken zoals jij dat graag hebt.
geloof me, echt...
Ik geloof je ook. Maar het probleem is dat die lege rows met extra informatie bij elk onderdeel verschillend is. Ze heetten nergens hetzelfde. Als je deze extra info in een aparte tabel gaat opslaan krijg je ook erg veel velden.

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
maar je moet $nr wel defineren naar het begin id van dat serienummer, dat doe je zo te zien nog nergens

[ Voor 60% gewijzigd door Wolf87 op 04-10-2004 16:14 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Heb nu er iets bij ingevoegd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?// begin to show results set 
echo "Resultaten"; 
$count = 1 + $s ; 

$nr= mysql_field_name('ID');
for($id= $nr; $vol = 1; $id++) 
{ 
$query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id.""); 
$obj = mysql_fetch_array($query); 
if($obj['serienummer'] == "") 
{ 
$vol= 0; 
}else{ 
$vol= 1; 
}}?>


Ik weet alleen niet of ik de juiste code hiervoor gebruik.

Ik krijg nu met dit erbij tussen, deze error:
Warning: Wrong parameter count for mysql_field_name() in c:\phpdev5\www\public\data\search.php on line 68

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\phpdev5\www\public\data\search.php on line 72

Fatal error: Maximum execution time of 30 seconds exceeded in c:\phpdev5\www\public\data\search.php on line 71

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
mysql_field_name bestaat niet, hier moet je gewoon een query maken die naar de zoekopdracht het serienummer opzoekt en hiervan het ID in $nr zet

nog even een ander vraagje, welke versie van php gebruik je, want begrijp niet waarom mysql_fetch_array niet klopt

en verander het sterretje nog even in serienummer, en waarschijnlijk moet je je execution time voor een mysql_query wat vergroten omdat deze te lang duurt

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
PHP 5.0.2

en ik gebruik phpdev5.

Het sterretje is verandert in serienummer en die time zal ik ook even aanpassen.

Ik heb net even gezocht op php.net en daar stond wel een mysql_field_name.
MAar ik moet dus deze gebruiken?

$nr = mysql_query("SELECT nr FROM onderdelen");

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Nu krijg ik weer heel veel foutmeldingen over die mysql_fetch_array
Ik denk dan dat het aan mijn php / mysql versie ligt? ;(

En waar zou ik die tijd kunnen veranderen? :D

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
dat kan in je php.ini, staat waarschijnlijk in je windows map

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
verandert :)

Maar ik zie het waarschijnlijk al. Ik kijk bij de info van phpdev5.
phpdev5
Welcome to phpdev5, phpdev5 comes in 2 flavours... with apache2.0.39 else with apache1.3.26 ... or both
so you setup should be...
apache 1.3.26 AND/OR apache 2.0.39
PHP4.2.1
MySQL4 (alpha but stabler than the older release version
phpMyAdmin 2.2.6
PHP-GTK 0.51
AnalogX php configurator
Zend Optimiser
PhpWebsite
Hij gebruikt hier de PHP 4.2.1 ;(

Ik heb wel PHP 5.0.2 geinstalled... :/

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
vreemd, heb net ff gekeken en vanaf php3 wordt mysql_fetch_array ondersteunt

Acties:
  • 0 Henk 'm!

Verwijderd

sla de XLS sheets op als CVS, maak een scriptje om die CVS'jes in je database te proppen.. ff goed LOOPje schrijven, moet lukken. regel voor regel, met onthouden van vorige ID, wanneer een nieuwe ID, dan overschrijven.

en dan kan je mooie simpele php scriptje! hup snelheid is 10 keer beter

succes!

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ Dancing Tim

Dan moet ik zoiets maar gaan proberen dan. XLS opslaan na CVS gaat lukken.
Dat scriptje word moeilijker. :D

Acties:
  • 0 Henk 'm!

  • Roeligan
  • Registratie: December 2001
  • Laatst online: 22-07 11:37

Roeligan

Feyenoord

gebruik hiervoor de load data infile functie ;) is niet zo moeilijk.

A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
okeej, csv is nu aangemaakt. de opmaak is behoorlijk vern*ukt ;)
heb nu een csv-tje van 2,4 mb.

nu moet ik dus een php scriptje schrijven met sql commando's en de "load data infile" functie om de gegevens in de database te stoppen?
ik kan nu toch ook beter een nieuwe tabel aanmaken?

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Zo ziet mijn csv er nu via wordpad eruit

code:
1
2
3
4
5
6
7
8
9
10
11
301740051,03AAAA,BLCK DERCK 34.9MM 8172KG,Type,,TRAVELLING,"Blocks, Derrick",Derrick blocks,PC
,,,"Rating, load",t,500,,,
,,,"Number, sheaves",,6,,,
,,,"Standard, external",,API SPEC 8C PSL 1,,,
,,,"Size, drilling line",mm,34.9 (1.3/8IN),,,
,,,Mass,kg,8172,,,
,,,***Long Description***,,,,,
,,,Notes: Refer information 03/,015: gu,idelines for the ordering of,,,
,,,hoisting equipment.,,,,,
,,,Typical movable item,,,,,
301740101,03AAAA,BLCK DERCK 38.1MM 8172KG,Type,,TRAVELLING,"Blocks, Derrick",Derrick blocks,PC


Ik moet dus nu zoiets als dit gebruiken?

LOAD DATA INFILE '0301740051.csv' INTO TABLE 'onderdelen2' FIELDS TERMINATED BY ',' LINES TERMINATED BY ',,,,' ('serienummer', 'typenummer', 'omschrijving', 'type', 'grootte', 'eigenschappen', 'alias', 'naam','iets')"; ?

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Die lines, hoe geef je dat aan? ik heb daar nu ,,,, staan maar dat klopt niet...

Daarnaast moet die load data infile nog in een loopje komen? Waarvan hij die paar rows als 1 id kan opslaan?
Modbreak:Er bestaat een Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif-knop, waarmee je je bericht kan editen als je nog wat wil toevoegen. Kicken van topics, zoals je nu doet, staan we niet toe op het forum.

Zie ook: Algemene gedragsregels (Netiquette) #not-done

[ Voor 48% gewijzigd door gorgi_19 op 05-10-2004 09:33 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

mickjuh: Je wilt nu heel erg aan het handje meegenomen worden. Probeer het uit, ga zelf eens testen wat er gebeurd. Kijk ook eens naar de documentatie op bijvoorbeeld http://dev.mysql.com/doc/mysql/en/LOAD_DATA.html

Programming & Webscripting vereist zelfwerkzaamheid van diegene die het probleem heeft en wil oplossen, in dit geval jij dus :)

[ Voor 22% gewijzigd door gorgi_19 op 05-10-2004 09:37 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Guidance
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2019
Als aanvulling wil ik even opmerken:

Ik heb deze thread met verbazing doorgelezen. Advies aan Mickjuh: Voor je je code hier plaatst, controleer goed of je niet ergens een ), } of ; verkeerd hebt staan of bent vergeten. In bovenstaande posts heb je namelijk na verbetering door anderen nog steeds de volgende fout proberen op te lossen: while() { .....; ?> wat uiteraard een fout geeft 50 regels verderop. Maar ook de for-loop kruizen met if..else... ???

Misschien ben ik een zeikerd, maar je code zou je minder problemen geven als je een beetje 'tidier' zou schrijven. MAW inspringen waar hoort. Blokken correct formateren:

for()
{
....
}
etc.

Succes verder.

Guidance

|:(

Acties:
  • 0 Henk 'm!

Verwijderd

Guidance schreef op 05 oktober 2004 @ 11:06:

Misschien ben ik een zeikerd, maar je code zou je minder problemen geven als je een beetje 'tidier' zou schrijven. MAW inspringen waar hoort. Blokken correct formateren:

for()
{
....
}
etc.
Dan kun je je voorbeeld wel beter in een code of php blok plaatsen hier. :P

Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
@ gorgi_19:
Ik zal er de volgende keer aan denken ;) Maar ik probeer zelf al veel uit. Maar veel vragen is toch nooit verkeerd? :D

@Roeligan:
Als ik de CVS wil overpompen na een tabel krijg ik deze foutmelding
Warning: upload_max_filesize of 2097152 bytes exceeded - file [textfile=C:\phpdev5\www\public\test\0301740051.csv] not saved in Unknown on line 0

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\libraries\ob.lib.php on line 53

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\header.inc.php on line 28

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\header.inc.php on line 29

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\header.inc.php on line 30

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\header.inc.php on line 31

Warning: Cannot add header information - headers already sent in c:\phpdev5\phpmyadmin\header.inc.php on line 33

Database shell - table onderdelen2 running on localhost
@Guidance:
Zitten er echt grote fouten in het script of is hij alleen slordig opgebouwt?

for()
{
....
}

Deze regels heb ik overgenomen vanaf dit topic omdat ik zoiets zocht. For werkt niet met if en else?

Acties:
  • 0 Henk 'm!

  • Wolf87
  • Registratie: Juli 2004
  • Laatst online: 21:18
Guidance schreef op 05 oktober 2004 @ 11:06:
Als aanvulling wil ik even opmerken:

Ik heb deze thread met verbazing doorgelezen. Advies aan Mickjuh: Voor je je code hier plaatst, controleer goed of je niet ergens een ), } of ; verkeerd hebt staan of bent vergeten. In bovenstaande posts heb je namelijk na verbetering door anderen nog steeds de volgende fout proberen op te lossen: while() { .....; ?> wat uiteraard een fout geeft 50 regels verderop. Maar ook de for-loop kruizen met if..else... ???

Misschien ben ik een zeikerd, maar je code zou je minder problemen geven als je een beetje 'tidier' zou schrijven. MAW inspringen waar hoort. Blokken correct formateren:

for()
{
....
}
etc.

Succes verder.

Guidance

|:(
Wat is er fout aan het gebruik van if else in een for loop, op php.net kom je dit vaak genoeg tegen

Acties:
  • 0 Henk 'm!

Verwijderd

@ wolf87
guidance doelde op dit stukje code waarin een for en een if-else gekruist zijn en niet genest (ff tabjes ingevoegd voor leesbaarheid)
PHP:
1
2
3
4
5
6
7
8
9
10
11
for($id= $nr; $vol = 1; $id++)
{
       $query = mysql_query("SELECT * FROM onderdelen WHERE ID=".$id."");
       $obj = mysql_fetch_array($query);
       if($obj['serienummer'] == "")
      {
           $vol= 0;
      }
} else {
      $vol= 1;
}

@ TS
ik heb dit topic nog eens goed doorgelezen, en het valt me op dat je vrij veel beginners fouten maakt met PHP en MySQL: lees eens PHP Cookbook van o'reilly
en PHP and MySQL (ja, ik ben o'reilly fan, en met reden ;))
er zijn ook voorbeeld hoofdstukken van te downloaden zodat je ff kan kijken of de stijl van het boek je ligt.

het cookbook is een ideaal boek om stukjes code uit te kopieeren, en om snel PHP te leren. (en als de baas echt dit zoek-progje nodig heeft koopt ie de boeken voor je,zeker als je hem dit sommetje laat zien ((ouwe zoekmanier tijd) * uurloon - (nieuwe zoekmanier tijd) * uurloon) groter dan (prijs boeken))

hier is hoe ik dit projectje zou doen:

1. exporteer alle excellsheets naar csv

2. bouw een PHP script dat die csv file (van disk is sneller dan uploaden) leest en 2 nieuwe csv's schrijft met in de ene de regel data met een serienummer , zonder de extra kommas en in de andere de "lege" rows met ervoor het serienummer
van dit script kan je meerdere versies bouwen als je excellsheets niet allemaal dezelfde opbouw hebben.
3 bouw een php script dat de nieuwe csv-en leest en in 2 verschillende tabellen stopt.

4 bouw een script waarmee je in de database kan zoeken

[ Voor 122% gewijzigd door Verwijderd op 05-10-2004 15:20 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Okeej, ik heb het nu bijna voor elkaar met het script...

Alleen wil ik graag de database bijvullen.

Kijk: Afbeeldingslocatie: http://members.lycos.nl/testvirotest/voorbeeld.jpg

Het is misschien maar een heel klein en makkelijk scriptje maar ik weet niet hoe ik zoiets moet aanpakken.

Afbeeldingslocatie: http://members.lycos.nl/testvirotest/help.gif

Je ziet bijvoorbeeld dat het eerste serienummer is doorgetrokken tot er een nieuw serienummer komt. Nu zie je daar een ander serienummer staan, deze is niet doorgetrokken.

Ik zou graag willen dat als er een leeg veld is dat hij het gegeven dat boven hem staat kopiert en in die lege cel zet. Als er al iets in die cel staat moet hij gewoon een cel verder naar beneden.

[ Voor 51% gewijzigd door mickjuh op 08-10-2004 12:12 ]


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 09-09 16:55

mickjuh

Good news everyone!

Topicstarter
Weet iemand hoe je kan zoeken op bijv. de bovenste invoer van de kolom serienummer?

Acties:
  • 0 Henk 'm!

Verwijderd

mickjuh schreef op 08 oktober 2004 @ 12:14:
Weet iemand hoe je kan zoeken op bijv. de bovenste invoer van de kolom serienummer?
???
je bedoelt waarschijnlijk de rows met een typenummer erin?
kijk of er een typenummer bestaat...
Ik zou graag willen dat als er een leeg veld is dat hij het gegeven dat boven hem staat kopiert en in die lege cel zet. Als er al iets in die cel staat moet hij gewoon een cel verder naar beneden.
ik zie dat je nog steeds in de excell manier denkt over databases

een database-table is meer een grote zak met rijen met zoekfunctie, dan een op volgorde staande tabel.

de functie die jij wilt zul je in PHP moeten maken in het script dat de csv in de database propt
pseudo-
code:
1
2
3
4
5
6
7
8
9
10
11
12
mijn_serienummer="";
while (nog-meer-regels-in-csv-file)
{
   lees regel uit cvs;
   if ( typenummer != leeg) {
         mijn_serienummer = serienummer;
  }
   if (serienummer == leeg) { 
         serienummer = mijn_serienummer;
   }
   stop regel in db
}

[ Voor 58% gewijzigd door Verwijderd op 08-10-2004 12:34 ]

Pagina: 1