Toon posts:

[PHP+MySQL] Multiple rows updaten met een for loop

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb nu dit:
PHP:
1
2
    $result = mysql_query("SELECT * FROM sale WHERE verk_id = '$last_id'") or die("SQL query mislukt <br>" . mysql_error());
    $aantal_rijen = mysql_num_rows($result);


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for ($i = 0; $i < $aantal_rijen; $i++)                                                                                                          
{                                                                                                                                               
$verk_id = mysql_result($result, $i, 'verk_id');                                                                                                
$art_nr = mysql_result($result, $i, 'art_nr');                                                                                                  
$cat_id= mysql_result($result, $i, 'cat_id');                                                                                                   
$id = mysql_result($result, $i, 'id');                                                                                                          
$aantal = mysql_result($result, $i, 'aantal');                                                                                                  
$prijsps = mysql_result($result, $i, 'prijs');                                                                                                  
$prijstot = mysql_result($result, $i, 'prijstot');                                                                                              
                                                                                                                                    
include 'defname.php';                                                                                                                          
$actie = mysql_query("UPDATE $tabel_naam SET voorraad = voorraad-'$aantal' WHERE id = '$id'") or die("voorraad niet bijgewerkt" . mysql_error());
}                                                                                                                                               
echo "</table>";                                                                                                                                
echo "<br>";                                                                                                                                    
                                                                                                                                                
echo "<hr>";                                                                                                                                    
}


defname.php zet het $cat_id om naar een tabelnaam. Iedere categorie ($cat_id) heeft een eigen tabel, met verschillende eigenschappen.

De bedoeling is, dat de produkten die op dat moment in de basket zitten (die gegevens worden dus met de eerste query uit de tabel gehaald) worden weergegeven. En dat de voorraad van die produkten wordt bijgewerkt.

Ik weet alleen niet of dit uberhaupt wel werkt. Als ik de code gebruik hoe die hierboven staat krijg ik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 44

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 45

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 46

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 47

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 48

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 49

Warning: mysql_result(): Unable to jump to row 1 on MySQL result index 6 in c:\inetpub\wwwroot\stock\sell.php on line 50
           

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 8 in c:\inetpub\wwwroot\stock\defname.php on line 7
voorraad niet bijgewerktYou have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET voorraad = voorraad-'' WHERE id = ''' at line 1


Het werkt met 1 rij wel goed, maar met >1 looptie dus daarop vast.

Ik kwam tijdens het zoek wel op [rml][ PHP]/[ MySQL] multiple row update probleem[/rml] terecht, maar dat was het volgens mij toch niet helemaal.

Iemand tips voor me?

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 12:15
weet je zeker of het scriptje die de nieuwe tabel aanmaakt ook meer dan 1 rij in de database zet? probeer eens te kijken hoeveel rijen de tabel heeft met mysql_num_rows()

Verwijderd

Topicstarter
de tabel heeft meerdere rijen, hij geeft ze namelijk goed weer bij basket.php...

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 12:15
Die error komt meestal als je een rij wilt aanroepen die niet bestaat

Edit:
Ik neem trouwens aan dat je al op google hebt gezocht? :?

[ Voor 34% gewijzigd door FlowinG op 07-11-2003 16:01 ]


Verwijderd

Topicstarter
ik heb net ff gekeken wattie zegt met mysql_num_rows(), dan geeft hij aan dat er 2 rows zijn.

zou toch ook vreemd zijn? want mysql_num_rows() had ik namelijk ook in de php code meegenomen (hij controleert al hoeveel rows er zijn).

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 12:15
nou de fout komt dus van het aantal rijen, maar als ik kijk komt het aantal rijen vanuit de tabel 'sale' en de update doe je in een andere tabel, en daar zitten blijkbaar minder rijen in. Ik weet ook niet precies wat je doet met defname.php.

Verwijderd

Topicstarter
FlowinG schreef op 07 november 2003 @ 16:18:
nou de fout komt dus van het aantal rijen, maar als ik kijk komt het aantal rijen vanuit de tabel 'sale' en de update doe je in een andere tabel, en daar zitten blijkbaar minder rijen in. Ik weet ook niet precies wat je doet met defname.php.
inhoud defname:
PHP:
1
2
3
4
5
6
7
8
9
$result = mysql_query("SELECT * FROM cat WHERE cat_id = '$cat_id'") or die("SQL query mislukt" . mysql_error());
$rows = mysql_num_rows($result);

if ($rows = 1) {
    $tabel_naam = mysql_result($result, 0, 'tabel_naam');
    }
else {
echo "er zijn meerdere tabelnamen met de naam ".$tabel_naam.".";
}


ik update idd een veld in een andere tabel. namelijk de voorraad in de tabel die bij het $cat_id hoort.

Verwijderd

PHP:
1
if ($rows = 1) {


moet

PHP:
1
if ($rows == 1) {


zijn :)

Verwijderd

Topicstarter
Verwijderd schreef op 07 november 2003 @ 20:31:
PHP:
1
if ($rows = 1) {


moet

PHP:
1
if ($rows == 1) {


zijn :)
Inderdaad, maar dat was helaas niet de oplossing. Het zit hem denk ik ook niet in het stukje met defname.php. Want 1 item verwerken is geen probleem, ook bij meerdere items wordt het eerste item "verkocht". Maar hij springt dus niet naar de volgende rij. 8)7

Verwijderd

Topicstarter
helemaal niemand?

ik heb het ondertussen met een mysql_fetch_row geprobeerd. maar dan doetie ook alleen de eerste rij. |:( ;(

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Verwijderd schreef op 17 november 2003 @ 15:49:
helemaal niemand?

ik heb het ondertussen met een mysql_fetch_row geprobeerd. maar dan doetie ook alleen de eerste rij. |:( ;(
Gebruik dan ook mysql_fetch_array() ;)

Sundown Circus


Verwijderd

Topicstarter
RedRose schreef op 17 november 2003 @ 15:54:
[...]
Gebruik dan ook mysql_fetch_array() ;)
ook al geprobeerd...

Verwijderd

Topicstarter
is er dan echt helemaal niemand mij hier iets meer over kan melden?

hoe zou ik het dan precies met fetch_array moeten doen? want ik heb wel wat lopen kloten daarmee, maar echt lukken wil het niet... 8)7

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 15:43

BrZ

Verwijderd schreef op 10 januari 2004 @ 19:53:
is er dan echt helemaal niemand mij hier iets meer over kan melden?

hoe zou ik het dan precies met fetch_array moeten doen? want ik heb wel wat lopen kloten daarmee, maar echt lukken wil het niet... 8)7
fetch array gebruiken is denk ik geen oplossing, je code die er staat is namelijk gewoon goed.
Het gaat iig al fout bij de 2e row bij de 1e mysql_result. Nogal vreemd aangezien er toch echt 2 rows waren (dat had je gecontroleerd.)
Weet je zeker dat je tussen je 1e en 2e stukje code niet de variabele $result nog ergens gebruikt? Per ongeluk in iets wat je include ofzo, waardoro je het over het hoofd ziet?

Verwijderd

Topicstarter
BrZ schreef op 10 januari 2004 @ 20:06:
[...]

fetch array gebruiken is denk ik geen oplossing, je code die er staat is namelijk gewoon goed.
Het gaat iig al fout bij de 2e row bij de 1e mysql_result. Nogal vreemd aangezien er toch echt 2 rows waren (dat had je gecontroleerd.)
Weet je zeker dat je tussen je 1e en 2e stukje code niet de variabele $result nog ergens gebruikt? Per ongeluk in iets wat je include ofzo, waardoro je het over het hoofd ziet?
goeie tip! ik zal daar morgen nog eens goed naar kijken... bedankt iig.

Verwijderd

Topicstarter
beetje late reactie...
maar dat was het inderdaad..
ik had een include erin zitten, en daar stond dus ook een query met $result erin.
Dat heb ik aangepast, en het script liep als een trein!

Dus bedankt voor jullie support!

Verwijderd

<?php
$resultdata = mysql_query("SELECT * FROM sale WHERE verk_id = '$last_id'") or die("SQL query mislukt <br>" . mysql_error());

while ($resultarray = mysql_fetch_assoc($resultdata)) {

$verk_id =$resultarray["verk_id"];
$art_id =$resultarray["art_nr"];
$cat_id =$resultarray["cat_id"];
$id =$resultarray["id"];
$aantal =$resultarray["aantal"];
$prijsps =$resultarray["prijs"];
$prijstot =$resultarray["prijstot"];

include 'defname.php';
$actie = mysql_query("UPDATE $tabel_naam SET voorraad = voorraad-'$aantal' WHERE id = '$id'") or die("voorraad niet bijgewerkt" . mysql_error());

}
?>


Even tussendoor, je kan het allemaal een stuk korter en sneller maken.
Zo hoeft je niet mysql_numrows() te gebruiken, mysql_result veel minder vaak en ook geen var steeds bijwerken ($i).

mysql_fetch_array[] is helemaal niet nodig omdat je met namen werkt ($resultarray["id"]) en niet met id's ($resultarray[0]) dus je hoeft daarvoor niets te reserveren.

php.net:
Recommended high-performance alternatives : mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() and mysql_fetch_object().
Pagina: 1