Ga terug   Computer Idee Forum > Internet > Websites maken

Antwoord
 
Discussietools Weergave
Oud 26 May 2011, 11:11   #11
anoniem31645
Guest
 
Berichten: n/a
Standaard

Inmiddels had ik een while lus gemaakt welke netjes werkt maar waar in ik de waardes niet krijg. Ook naam['.$i.'] had ik inmiddels toegevoegd.
Maar aangezien een for each sneller zal zijn ga ik daar verder.

Ik heb het inmiddels naar het onderstaande aangepast maar ik snap het eerste gedeelte niet zo goed. $_POST['naam'] is toch naam plus het id nummer als ik name="naam'.$obj_prod['products_id'].'" gebruik in het formulier?

En is $id gewoon het id getal dat bij het product hoort dus de waarde uit <input type="hidden" name="id'.$i.'" value="'.$obj_prod['products_id'].'"/> ?
En als laatste hoe kom je aan $value.

Ik ben inmiddels sinds 5uur met de wile lus bezig geweest en daarna de for each en ik geloof dat ik me een beetje blind staar op het moment.


PHP-code:
for each ($_POST['naam'] as $id => $value) {
    
$sql "
    UPDATE
    `test_tabel`, `test_tabel_1`
    
    SET
    `test_tabel`. `products_price` = '"
.$_POST['prijs']['id']."', 
    `test_tabel_1`. `products_name` = '"
.$value."'

    WHERE test_tabel_1. products_id = '"
.$_POST['products_id']."'
    And test_tabel. products_id = '"
.$_POST['products_id']."'
    
    "
;

  Met citaat antwoorden
Oud 26 May 2011, 18:08   #12
anoniem15124
Guest
 
Berichten: n/a
Standaard

Ik begrijp dat het niet werkt?

Wat krijg je te zien als je query echoot naar het scherm? Zie je dan wat je zou verwachten? Zit er foutafhandeling in? Met die twee dingen kun je vaak zelf makkelijk controleren of dat wat je denkt dat zou moeten gebeuren ook gebeurt.
  Met citaat antwoorden
Oud 26 May 2011, 18:16   #13
anoniem14945
Guest
 
Berichten: n/a
Standaard

Citaat:
Oorspronkelijk geplaatst door Sjoukito Bekijk bericht
Ik heb het inmiddels naar het onderstaande aangepast maar ik snap het eerste gedeelte niet zo goed. $_POST['naam'] is toch naam plus het id nummer als ik name="naam'.$obj_prod['products_id'].'" gebruik in het formulier?
Ja, dan wel. En dan kun je for each helemaal niet gebruiken. Daarvoor moet $_POST['naam'] ook een array zijn. Zie mijn vorige bericht hoe je dat kunt gebruiken.

$id en $value komen hier vandaan:
for each ($_POST['naam'] as $id => $value) {

Voor iedere waarde in de array wordt $id gelijk gesteld aan de sleutel en $value aan de waarde. Neem de volgende array:
$array = array(
1 => 'blauw',
2 => 'groen,
3 => 'rood')

Haal je dat door een for each lus, dan is de eerste keer dat de lus wordt doorlopen $id gelijk aan 1 en $value gelijk aan 'blauw'. De tweede keer is $id gelijk aan 2 en $value gelijk aan 'groen', etc.
  Met citaat antwoorden
Oud 27 May 2011, 11:54   #14
anoniem31645
Guest
 
Berichten: n/a
Standaard

Ok , in grote lijnen snap ik hoe een for each lus moet werken.
Het onderstaande script is mijn array, als ik het goed heb, heb ik deze nu correct opgebouwd. (ik gebruik [$i] omdat dit in het script overzichtelijker is in de script code dan het id uit mijn database te gebruiken (naar mijn id dan)).

PHP-code:
$i 0;
while (
$obj_prod = (mysql_fetch_array ($result_prod)))

echo 
'<input type="hidden" name="idnr'.$i.'" id="idnr'.$i.'" value="'.$obj_prod['products_id'].'"/>';
echo 
'<tr>
        <td width="100"> <img src="/map/'
.$obj_prod['products_image'].'" height="24" ></td>
        <td width="300">
        <input type="text" name="naam'
.$i.'" id="naam'.$i.'" value="'.$obj_prod['products_name'].'"></td>
        <td width="100">&euro;&nbsp;
        <input type="text" name="prijs'
.$i.'" id="prijs'.$i.'" value="'.$obj_prod['products_price'].'"></td>
      </tr>
  '
;
++
$i;  

Nu de lus:
Ik heb het onderstaande om te kijken of de lus werkt.
Nu krijg ik een syntax fout namenlijk: unexpected T_STRING, expecting '('

PHP-code:

for each ($_POST['name'] as $id => $value) {

print 
$_POST['products_price'] .', <br />'$_POST['name'].', <br />'$_POST['products_id'] ;


Ps: de fout afhandeling heb ik er inmiddels weer uitgegooid omdat ik gewoon door de bomen het bos niet meer zag. Ik weet dat dit niet is hoe het hoort maarja.

Zie http://sjoukito.com/test7.php
  Met citaat antwoorden
Oud 27 May 2011, 12:45   #15
anoniem14945
Guest
 
Berichten: n/a
Standaard

Ik zou toch het id uit de database gebruiken. Op het moment dat je gegevens gaat wegschrijven moet je natuurlijk wel weten welke gegevens te overschrijven: dat kan dan mooi aan de hand van het unieke database-id.

Je gebruikt in je formulier nog steeds geen arrays, dus kun je nog steeds geen for each gebruiken voor je verwerkscript. Met de huidige code bestaat er namelijk geen $_POST['name'], maar heb je $_POST['name0'], $_POST['name1'], $_POST['name2'] etc. En daar kan for each helemaal niets mee.

In de code die je nu toont zie ik geen fout. Bij een 'unexpected' fout zit het daadwerkelijke probleem vaak een regel eerder dan aangegeven.

Dat je foutafhandeling er op een gegeven moment uit gooit is op zich niet zo erg. Immers, als iets werkt heb je in principe geen foutafhandeling nodig. Op het moment dat iets niet werkt is foutafhandeling weldegelijk van belang, in ieder geval voor het gedeelte dat niet werkt. Gaat er iets mis in je sql? Dan altijd de query en de mysql_error naar het scherm laten echo'en zodat je kunt nagaan waar de fout zit.
  Met citaat antwoorden
Oud 27 May 2011, 13:10   #16
anoniem31645
Guest
 
Berichten: n/a
Standaard

Ok ik moet dus eerst weer een array maken maar hoe maak ik een array van de nieuwe (gewijzigde) informatie?
  Met citaat antwoorden
Oud 27 May 2011, 13:22   #17
anoniem14945
Guest
 
Berichten: n/a
Standaard

Zie post #10. Vergelijk het eerste stukje bold met het tweede stukje bold.
  Met citaat antwoorden
Oud 28 May 2011, 00:15   #18
anoniem31645
Guest
 
Berichten: n/a
Standaard

Ok de "[" moest dus voor de enkele aanhalings tekens zodat php ze niet (direct) wil gebruiken, daar heb ik zo'n beetje me haren over uit me hoofd getrokken.

Citaat:
In de code die je nu toont zie ik geen fout. Bij een 'unexpected' fout zit het daadwerkelijke probleem vaak een regel eerder dan aangegeven.
Het vreemde is dat er geen andere code is in het bestand waar de for each lus in staat.
Dit is dus de gehele code.

PHP-code:
<?php

for each ($_POST['name'] as $id => $value) {
echo (
$_POST['idnr']) .', <br />'. ($_POST['naam']).', <br />'. ($_POST['prijs']) ;
}

?>
In het andere bestand (dat met het formulier) zie ik ook niks wat deze fout kan geven. Ik blijf dezelfde code houden maar wat ik ook bedenk, google en verander, het enige wat veranderd zijn mijn frustraties omdat dat ik zo iets (naar ik denk simpels) niet krijg opgelost.
PHP-code:
<form action="test9.php" method="post" name="update">
<table width="650"border="1" cellpadding="4" cellspacing="2" bordercolor="#666666" bgcolor="#E4E4E4">
  <tr>
    <td width="104">Foto</td>
    <td width="264">Product</td>
    <td width="191">Neto prijs</td>
  </tr>

<?php 
$cat 
= ($_GET["categorie"]);
 
$sql_prod 

SELECT
 test_tabel. products_price, 
 test_tabel. products_image, 
 test_tabel. master_categories_id,
 test_tabel. products_id,

 test_tabel_1. products_name, 
 test_tabel_1. products_id

 FROM 
 test_tabel, test_tabel_1
 
 WHERE 
 test_tabel. master_categories_id = '10'

 AND
 test_tabel. products_id = test_tabel_1. products_id 
 "
;
$result_prod mysql_query($sql_prod);

$i 0;
while (
$obj_prod = (mysql_fetch_array ($result_prod)))


echo 
'<input type="hidden" name="idnr['.$i.']" id="idnr['.$i.']" value="'.$obj_prod['products_id'].'"/>';
echo 
'<tr>
        <td width="100"> <img src="/map/'
.$obj_prod['products_image'].'" height="24" ></td>
        <td width="300">
        <input type="text" name="naam['
.$i.']" id="naam['.$i.']" value="'.$obj_prod['products_name'].'"></td>
        <td width="100">&euro;&nbsp;
        <input type="text" name="prijs['
.$i.']" id="prijs['.$i.']" value="'.$obj_prod['products_price'].'"></td>
      </tr>
  '
;
++
$i;  
}
?> 
<tr>
    <td colspan="2"> 
    <label for="updaten"></label>
    <input type="submit" name="updaten" id="updaten" value="update" />
    <label for="Reset"></label>
    <input type="reset" name="Reset" id="Reset" value="Herstellen" />
    </td>
    <td>Aantal producten: <?php echo $i ;?></td>
 </tr>
</table>

</form>
  Met citaat antwoorden
Oud 28 May 2011, 09:36   #19
anoniem14945
Guest
 
Berichten: n/a
Standaard

Oh, nu zie ik 'm. foreach moet aan elkaar geschreven worden. Mijn fout.

Het formulier zou nu wel moeten werken met foreach, maar je moet wel nog even kijken naar het verschil tussen $_POST['name'] en $_POST['naam']. Verder kan ik vast verklappen dat de echo in de foreach niet gaat werken, maar daar kom je wel achter. Hint: kijk eens hoe $_POST['naam'] er uit ziet met print_r($_POST['naam']).
  Met citaat antwoorden
Oud 4 June 2011, 22:07   #20
anoniem31645
Guest
 
Berichten: n/a
Standaard

Inmiddels heb ik het helemaal werkend, het koste me bijna een week (tja ik vond dat ik dit nou eens helemaal zelf moest kunnen uitvogelen en mijn koppigheid hielp daar bij :-p ) maar het werkt nu.

Ik blijf met 1 probleem zitten wat ik wel vaker tegen kom namelijk dat ik, in dit geval, mijn categorie waarde pas krijg als ik een categorie heb geselecteerd uit een menu.
Dus de pagina word aanvankelijk zonder categorie waarde geopend wat de onderstaande melding geeft:

Code:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /....../product_price.php on line 67
het gaat dus om de waarde in deze code:
PHP-code:
WHERE 
 winkel_products
master_categories_id = ($_GET["categorie"]) 
Hoe zou ik deze foutmelding netjes kunnen voorkomen (zonder een if statement te maken)?
  Met citaat antwoorden
Antwoord

Discussietools
Weergave

Regels voor berichten
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Forumnavigatie


Alle tijden zijn GMT +1. Het is nu 01:37.


Powered by vBulletin Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.