login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem met mysql_data_seek();

Offline roelh - 12/06/2006 10:20
Avatar van roelhPHP gevorderde Ik gebruik nu dit

  1. mysql_data_seek($query, 0);


Om een while 2X te kunnen gebruiken.
Nu werkt het allemaal goed, maar ik krijg een fout als er nog niks is gebeurt met de while. Namelijk deze:

  1. Warning: mysql_data_seek(): Offset 0 is invalid for MySQL result index 4 (or the query data is unbuffered) in c:\appserv\www\auto\bedrijven\main.php on line 30


Hoe kan ik oplossen dat deze fout dan niet weergegeven word?
Groet,

26 antwoorden

Gesponsorde links
Offline marten - 12/06/2006 10:23
Avatar van marten Beheerder
Citaat:
Nu werkt het allemaal goed, maar ik krijg een fout als er nog niks is gebeurt met de while


Voordat je de mysql_data_seek wilt gaan uitvoeren een if else structuur inbouwen

if(isset(dataseek)) {
while uitvoeren
else (
//weet ik veel 
}

zoiets 
Offline roelh - 12/06/2006 10:27
Avatar van roelh PHP gevorderde Hmms, en dat gaat echt werken denk je?
Heb al zoiets geprobeerd, maar deed het niet namelijk 
Offline marten - 12/06/2006 10:28
Avatar van marten Beheerder als je het goed doet zal het wel werken denk ik 
laat je oplossing eens zien wat je geprobeerd had
Offline roelh - 12/06/2006 10:32
Avatar van roelh PHP gevorderde na ik had dan dus
if(mysql_data_seek($query, 0)

Maar verder kom ik dan ff niet, want hoe kan ik nu laten weten wanneer een waarde groot is.
En hij moet bij een waarde van 0 gewoon die data seek niet uitvoeren.
Offline Thomas - 12/06/2006 10:47
Avatar van Thomas Moderator Geef je de resultaten van $query ergens vrij met mysql_free_result? Dan kun je het resultaat niet hergebruiken omdat je het al hebt weggegooid.
Offline roelh - 12/06/2006 11:18
Avatar van roelh PHP gevorderde Neen kijk.
Ik heb een query.
daarna gebruik ik een while om de query gegevens op te vragen.
Daarna heb ik de while niet nodig.
Op een gegeven moment wel weer. Maar omdat de query al X gebruikt is moet je eerst mysql_data_seek doen.
Maar als er nog niks gebeurt is, is er een fout met mysql_data_seek.
Offline Thomas - 12/06/2006 11:38
Avatar van Thomas Moderator Ah, k.

Misschien is het een idee om je query-resultaten standaard op te slaan in een array? Dat doe ik ook en dat werkt best fijn, je kunt er dan gewoon met een for(each)-lus doorheen.
Offline roelh - 12/06/2006 11:45
Avatar van roelh PHP gevorderde Dat zou eventueel ook kunnen ja.
Maar dat is iets meer werk, dus met die data_seek_data gaat niet lukken?
Ook raar vind ik. Als er geen auto's zijn bij dat bedrijf, laat hij bedrijfsnaam niet zien.
Weetje daar misschien iets voor? Als dat namelijk opgelost is, is me probleem ook opgelost.
Offline marten - 12/06/2006 11:47
Avatar van marten Beheerder Dan zal ik toch je query moeten zien.....
Offline roelh - 12/06/2006 11:52
Avatar van roelh PHP gevorderde Alstu, het hele script waar het om gaat 

  1. <?
  2. ?>
  3. <LINK REL="stylesheet" HREF="../style.css" TYPE="text/css">
  4. <?
  5. include "../config.php";
  6.  
  7. if(isset($_SESSION['id'])){
  8. $query = mysql_query ("SELECT autos.id, autos.merk, autos.type, autos.verkocht, autos.bouwjaar, bedrijven.bedrijfsnaam, bedrijven.adres, bedrijven.postcode, bedrijven.plaats FROM autos INNER JOIN bedrijven ON (autos.dealerid = bedrijven.id) where dealerid = '".$_SESSION['id']."'");
  9. $arr = mysql_fetch_assoc($query);
  10. ?>
  11. <table border="0" width="100%" align="center">
  12. <tr>
  13. <td align="center"><?
  14. echo $arr['bedrijfsnaam'];
  15. echo "<br>";
  16. echo $arr['adres'];
  17. echo "<br>";
  18. echo $arr['postcode']; ?>&nbsp;<?=$arr['plaats'];?>
  19. </td>
  20. </tr>
  21. </table>
  22. Welkom op uw persoonlijke bedrijfspagina.<br>
  23. Hier kunt u uw auto's bewerken, verwijderen of nieuwe op plaatsen.<br>
  24. <table border="0" width="100%" align="center">
  25. <tr>
  26. <td><b>Merk</b></td><td><b>Type</b></td><td><b>Bouwjaar</b></td><td><b>Verkocht</b></td><td><b>Bewerk</b></td><td><b>Verwijder</b></td>
  27. </tr>
  28. <?
  29. mysql_data_seek($query, 0);
  30. while($arr = mysql_fetch_assoc($query)){
  31. ?>
  32. <tr>
  33. <td><a href="../autos.php?id=<?= $arr['id'];?>"><?=$arr['merk'];?></a></td><td><?=$arr['type'];?></td><td><?=$arr['bouwjaar'];?></td><td><?=$arr['verkocht'];?></td><td><a href="bewerk_auto.php?id=<?=$arr['id'];?>">Bewerk</a></td><td><a href="delete_auto?id=<?= $arr['id'];?>" onClick="return confirm('Weet u zeker dat u dit bedrijf wilt verwijderen?');">Verwijderen</a></td>
  34. </tr>
  35. <?
  36. }
  37. ?>
  38. </table>
  39. <?
  40. }
  41.  
  42. ?>
Offline marten - 12/06/2006 12:07
Avatar van marten Beheerder mysql_data_seek() werkt volgens mij alleen maar met mysql_fetch_row.....
Offline roelh - 12/06/2006 12:18
Avatar van roelh PHP gevorderde Neen werkt ook bij assoc 
Maar heb het al anders opgelost, een query meer maargoed. Hieronder de oplossing 
Heb ik nog 1 vraagje.
Ik heb nu dit zo

  1. <select size="1" name="btw">
  2.  
  3. <option value="Ja" <?php if($show['btw'] == "Ja") { echo "selected"; } ?>>Ja</option>
  4. <option value="Nee" <?php if($show['btw'] == "Nee") { echo "selected"; } ?>>Nee</option>
  5.  
  6. </select>


Hij selecteerd wat in DB staat en geeft in dropdownmenu weer.
NU wil ik hetzelfe voor het bouwjaar doen.
Als ik het zo wil doen benk lang bezig en moet ik elk jaar het script veranderen.
Nu is me vraag, hoekan ik dat anders doen? Bouwjaren staan niet in DB maar heb met een for lus gedaan.
Enig idee misschien?

Groet,

Dit is de goede code wat werkt van het vorig probleem.
  1. <?
  2. ?>
  3. <LINK REL="stylesheet" HREF="../style.css" TYPE="text/css">
  4. <?
  5. include "../config.php";
  6.  
  7. if(isset($_SESSION['id'])){
  8. $query = mysql_query ("SELECT bedrijfsnaam, adres, postcode, plaats FROM bedrijven where id = '".$_SESSION['id']."'") or die (mysql_error());
  9. $arr = mysql_fetch_assoc($query);
  10. ?>
  11. <table border="0" width="100%" align="center">
  12. <tr>
  13. <td align="center"><?
  14. echo $arr['bedrijfsnaam'];
  15. echo "<br>";
  16. echo $arr['adres'];
  17. echo "<br>";
  18. echo $arr['postcode']; ?>&nbsp;<?=$arr['plaats'];?>
  19. </td>
  20. </tr>
  21. </table>
  22. Welkom op uw persoonlijke bedrijfspagina.<br>
  23. Hier kunt u uw auto's bewerken, verwijderen of nieuwe op plaatsen.<br>
  24. <?
  25. $query1 = mysql_query ("SELECT id, merk, type, bouwjaar, verkocht FROM autos where dealerid = '".$_SESSION['id']."'");
  26. ?>
  27. <table border="0" width="100%" align="center">
  28. <tr>
  29. <td><b>Merk</b></td><td><b>Type</b></td><td><b>Bouwjaar</b></td><td><b>Verkocht</b></td><td><b>Bewerk</b></td><td><b>Verwijder</b></td>
  30. </tr>
  31. <?
  32. while($arrr = mysql_fetch_assoc($query1)){
  33. ?>
  34. <tr>
  35. <td><a href="../autos.php?id=<?= $arrr['id'];?>"><?=$arrr['merk'];?></a></td><td><?=$arrr['type'];?></td><td><?=$arrr['bouwjaar'];?></td><td><?=$arrr['verkocht'];?></td><td><a href="bewerk_auto.php?id=<?=$arrr['id'];?>">Bewerk</a></td><td><a href="delete_auto?id=<?= $arrr['id'];?>" onClick="return confirm('Weet u zeker dat u dit bedrijf wilt verwijderen?');">Verwijderen</a></td>
  36. </tr>
  37. <?
  38. }
  39. ?>
  40. </table>
  41. <?
  42. }
  43.  
  44. ?>
Offline Thomas - 12/06/2006 12:36
Avatar van Thomas Moderator mysql_data_seek werkt niet op lege result-sets geloof ik.
Het is niet vreemd dat je geen bedrijven krijgt als deze geen auto's heeft, je gebruikt immers een INNER JOIN.

Waarschijnlijk je beter het bedrijf LEFT JOINen met auto, dan krijg je ook de bedrijven te zien die geen auto's hebben.

Als je voor het bouwjaar een for-lus gebruikt, is dit toch geen werk? Gebruik dezelfde constructie die je voor BTW gebruikt hebt (zet het if-statement in de for-lus).
Offline roelh - 12/06/2006 12:40
Avatar van roelh PHP gevorderde Ja, maar k heb vanaf bouwjaar 1970 tot nu
DUs betekent dat ik een hele lange lus krijg?
En als het 2007 is? Kan ik het script weer aanpassen dus, is ook niet handig lijkt me 
Het moet toch lukken? Haal gewoon bouwjaar uit DB en dan ergens mee vergelijken? En bij de rest laat hij andere bouwjaren zien.
Krijg het maar niet voor elkaar.
Offline Rens - 12/06/2006 12:51
Avatar van Rens Gouden medaille

Crew algemeen
  1. <?PHP
  2. for($i = 1970; $i <= date("Y"); $i++)
  3. {
  4. echo $i."<br />";
  5. }
  6. ?>


  1. <?PHP
  2. $aJaar = range("1970", date("Y"));
  3. for($i = 0; $i < count($aJaar); $i++)
  4. {
  5. echo $aJaar[$i]."<br />";
  6. }
  7. ?>

Is allebei vanaf 1970 tot 2006...
Offline Thomas - 12/06/2006 12:51 (laatste wijziging 12/06/2006 12:52)
Avatar van Thomas Moderator
  1. <?php
  2. function selected($a, $b)
  3. {
  4. return ($a == $b) ? " selected=\"selected\"" : "";
  5. }
  6.  
  7. for($jaar = date("Y"); $jaar > 1950; $jaar--)
  8. {
  9. echo "<option value=\"".$jaar."\"".selected($jaar, $db['bouwjaar']).">".$jaar."</option>";
  10. }
  11. ?>


:?:
Offline Maarten - 12/06/2006 13:15
Avatar van Maarten Erelid Gij zult geen HTML binnen dubbele quotes echo'en (of gij zult het wel en gij zult meer werk hebben)

  1. <?php
  2. function selected($a, $b)
  3. {
  4. return ($a == $b) ? ' selected="selected"' : '';
  5. }
  6.  
  7. for($jaar = date("Y"); $jaar > 1950; $jaar--)
  8. {
  9. echo '<option value="'.$jaar.'"'.selected($jaar, $db['bouwjaar']).'>'.$jaar.'</option>';
  10. }
  11. ?>
Is uiteraard slechts een detail 
Offline roelh - 12/06/2006 13:30 (laatste wijziging 12/06/2006 13:44)
Avatar van roelh PHP gevorderde @Rensjuh, dat bedoelde ik niet, bedoel meer wat FangorN en Murfy hebben neergezet ;) Maar toch bedankt voor je hulp.

@ FangorN & Murfy, Thanks, het werkt 

Edit:
Nu wil ik dit ook voor bouwmaand gebruiken, kopier ik hem, verander de waardes en gaat het script niet verder.
Je kunt hem toch zovaak gebruiken als je wilt toch?
Offline Maarten - 12/06/2006 13:57
Avatar van Maarten Erelid Geef even je code die je voor de bouwmaand gebruikt hebt.
Offline roelh - 12/06/2006 14:17 (laatste wijziging 12/06/2006 14:19)
Avatar van roelh PHP gevorderde Hier heb je bouwjaar en bouwmaand. Hopelijk kun je er wat mee 
Alvast bedankt! 

  1. <tr>
  2. <td>Bouwjaar:</td>
  3. <td>
  4. <select size="1" name="bouwjaar">
  5. <?php
  6. function selected($a, $b)
  7. {
  8. return ($a == $b) ? ' selected="selected"' : '';
  9. }
  10.  
  11. for($jaar = date("Y"); $jaar >= 1970; $jaar--)
  12. {
  13. echo '<option value="'.$jaar.'"'.selected($jaar, $show['bouwjaar']).'>'.$jaar.'</option>';
  14. }
  15. ?> </select>
  16. </td>
  17. </tr>
  18. <tr>
  19. <td>Bouwmaand:</td>
  20. <td>
  21. <select size="1" name="bouwmaand">
  22. <?php
  23. function selected($c, $d)
  24. {
  25. return ($c == $d) ? ' selected="selected"' : '';
  26. }
  27.  
  28. for($i = 1; $i <= 12; $i++)
  29. {
  30. echo '<option value="'.$i.'"'.selected($i, $show['bouwmaand']).'>'.$i.'</option>';
  31. }
  32. ?> </select>
  33. </td>
  34. </tr>
Offline Maarten - 12/06/2006 14:25
Avatar van Maarten Erelid Die tweede
  1. function selected($c, $d)
  2. {
  3. return ($c == $d) ? ' selected="selected"' : '';
  4. }
moet weg.
Offline roelh - 12/06/2006 15:49
Avatar van roelh PHP gevorderde Hmmss ff vraagje dan, hoezo moet die 2e weg dan? Je moet toch weer een functie opzetten of zie ik dat verkeerd?
Heb ik iig alweer wat geleerd 
Het werkt, maar als kan beetje uitleg, weet ik dat de volgende X weer 
Offline Thomas - 12/06/2006 15:53 (laatste wijziging 12/06/2006 15:54)
Avatar van Thomas Moderator Het idee van functies is, dat je ze eenmalig declareert, en daarna meedere keren gebruikt... Je kreeg waarschijnlijk een foutmelding in de trant van "cannot redeclare function ..., previously declared in ...".
Offline roelh - 12/06/2006 15:55
Avatar van roelh PHP gevorderde Neen, kreeg geen fouten, hij maakte alleen het script niet af, hij stopte bij bouwmaand.
Maar dan weet ik dat ook weer, iig bedankt 
Kom zo een heel stuk verder weer, thanks all! 
Offline Maarten - 12/06/2006 16:53
Avatar van Maarten Erelid Dan moet je ook eens leren tijdens je ontwikkeling bovenaan je pagina te zetten:
  1. <?php
  2. ?>
Zo wordt de minste foutmelding op je scherm gedumpt en kan je dus foutloze scripts gaan maken, alsook gemakkelijk debuggen, want dan had je de melding die FangorN aanhaalde wèl gezien, deze op Google kunnen gooien en was het gefixed geweest.
Error reporting dus 
Offline roelh - 12/06/2006 17:03
Avatar van roelh PHP gevorderde Is goed, die gebruik ik voortaan 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.553s