[MySQL/PHP] Meerdere rijen laden en updaten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Goed, ik probeer alle data uit een tabel te laden die vervolgens allemaal te bewerken moeten zijn. Ik ben er al 3 avonden mee bezig, maar kom er niet uit. Ik heb op verschillende fora gekeken en het internet afgespeurd, maar helaas. Het komt met name omdat ik nog een beginner ben. Normaal zou ik hier niet durven aankloppen, maar omdat ik er hopeloos van wordt probeer ik het toch maar even :)

Het idee is dat er een tabel gemaakt wordt die per rij 3 waardes kent: Positie, Naam en Prijs. Ik heb in MySQL ook een kolom ID aangemaakt uiteraard. Alle rows moeten geladen worden en op Positie gesorteerd zijn. Per rij zijn er dus 3 waardes die allemaal in een textveld worden geladen en bewerkbaar moeten zijn. Onderaan de pagina moet een Update knop komen die, als je die aanklikt, ervoor zorgt dat alle wijzigingen worden opgeslagen en dan de pagina opnieuw geladen wordt.

Natuurlijk heb ik al heel wat geprobeerd en was het me in ieder geval al gelukt om de data te laden in allemaal textvelden, het updaten werkte alleen nooit. Toch even een afbeelding, zodat je een beeld kan krijgen:

Afbeeldingslocatie: http://www.macnoob.nl/temp_files/maggiez/2.png

Wat ik tot nu toe doe en deed is code deels kopiëren en dan bewerken naar wat voor mij juist was. Dat schiet dus eigenlijk niet op, want deels begrijp ik niet wat ik doe. Ik weet hoe ik data moet laden en er een tabel van maak en vervolgens hoe ik een row update. Maar enkele meest simpele dingen begrijp ik niet.

Ik was al een tijd bezig, maar heb nu alles gewist en begin opnieuw. Wat ik hier wilde vragen is om enkele hulp betreffende dit script. Ik zou het enorm waarderen als er enkele hulp is :X

Er zijn allereerst enkele simpele dingen die ik niet begrijp waarom die vaak worden toegepast. Even dit:

code:
1
$naam = $_POST['naam'];


Hier wordt een variabele gedefinieerd? Of noem je dit anders? Ik begrijp niet waarom dit gedaan wordt. Ik begrijp dat dit een beginnersvraag lijkt, maar ga er alsjeblieft niet vanuit dat ik straks alles ga vragen. Het zijn enkele dingen. Ik hoop ze een voor een te kunnen begrijpen.

code:
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
<?php
require("./include/config.inc.php");
require("./include/login.check.inc.php");
include("./include/head.php");

$_POST = RealEscape($_POST);

?>
    <div id="bodypic1"></div>
    
    <div id="bodytextpic">
    <div id="bodytext">
    <h1>Bewerk de prijzenlijst</h1>
    <p>Bla</p>
    
<?php

$id = $_POST['id'];
$positie = $_POST['positie'];
$naam  = $_POST['naam'];
$prijs  = $_POST['prijs'];
$count = $_POST['aantalrijen'];

$query="SELECT * FROM $tab_prijzen";
$fetch = mysql_query($query);

$count = mysql_num_rows($fetch);

   if ($_POST['submit'] == "Update")
      {
        for ($i=0; $i<$count; $i++)
            {
                echo "waarde: ".$i."<br />";
                echo "waarde: ".sumbmit."<br />";
                $query = "UPDATE $tab_prijzen SET positie='$positie[$i]', naam='$naam[$i]', prijs='$prijs[$i]'
                WHERE id='$id[$i]'";
                $result1 = mysql_query($query) or die("Fout!: ".mysql_error());
            }
      }
   
   if ($result1)
      {
        echo "<script language=\"javascript\">location.href='editprijzen1.php';</script>";
      }

echo "<form id=\"editprijzenform\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
      <table id=\"editprijzen\">";
      while ($rows = mysql_fetch_array($fetch))
        {
          echo "<tr>
            <td><input type=\"text\" name=\"positie[]\" size=\"5\" value=\"".$rows['positie']."\"></td>
            <td><input type=\"text\" name=\"naam[]\" size=\"20\" value=\"".$rows['naam']."\"></td>
            <td><input type=\"text\" name=\"prijs[]\" size=\"10\" value=\"".$rows['prijs']."\"></td>
          </tr>";
        }
          echo "<tr>
            <td>
              <input type=\"submit\" name=\"submit\" 
               value=\"Update\">
              <input type=\"hidden\" name=\"aantalrijen\" id=\"aantalrijen\" value=\"'.$count.'\"/>
            </td>
          </tr>
      </table>
      </form>";

?>

<pre> 
<?php 
print_r($_POST); 
?> 
</pre>

    <form method="link" action="./editmenu.php"><input type="submit" value="Terug" /></form>
    
    </div>
    </div>
<?php
include("./include/foot.php");
?>

[ Voor 36% gewijzigd door FerdiV op 27-07-2011 22:00 ]


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 15:24
Koop een goed PHP boek ;)

Serieus.

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
um..
Als je var dump doet van $_POST['naam'] wat krijg je dan?

Want je hebt vermoed ik zoiets als dit:
code:
1
2
<input type="text" id="naam" name="naam" value="hierstaat waarde 1" />
<input type="text" id="naam" name="naam" value="hierstaat waarde 2" />


Je hebt dus een array van elementen ..

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Wat ik had:

code:
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
$id = $_POST['id'];
$positie = $_POST['positie'];
$naam  = $_POST['naam'];
$prijs  = $_POST['prijs'];

   if ($_POST['submit'] == "Update")
      {
        for ($i=0; $i<$count; $i++)
            {
                $query = "UPDATE $tab_prijzen SET positie='$positie[$i]', naam='$naam[$i]', prijs='$prijs[$i]'
                WHERE id='$id[$i]'";
                $result1 = mysql_query($query);
            }
      }
   
   if ($result1)
      {
        echo "<script language=\"javascript\">location.href='editprijzen.php';</script>";
      }

$query="SELECT * FROM $tab_prijzen";
$fetch = mysql_query($query);

$count = mysql_num_rows($fetch);

echo "<form id=\"editprijzenform\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
      <table id=\"editprijzen\">";
      while ($rows = mysql_fetch_array($fetch))
        {
          echo "<tr>
            <td><input type=\"text\" name=\"positie[]\" size=\"5\" value=\"".$rows['positie']."\"></td>
            <td><input type=\"text\" name=\"naam[]\" size=\"20\" value=\"".$rows['naam']."\"></td>
            <td><input type=\"text\" name=\"prijs[]\" size=\"10\" value=\"".$rows['prijs']."\"></td>
          </tr>";
        }
          echo "<tr>
            <td>
              <input type=\"submit\" name=\"submit\" 
               value=\"Update\">
            </td>
          </tr>
      </table>
      </form>";


Wat ik bijvoorbeeld ook niet begrijp is hoe de update query nou weet welke rij welke id heeft?

Zie afbeelding in OP voor resultaat.

[ Voor 4% gewijzigd door FerdiV op 27-07-2011 21:14 ]


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
code:
1
  $result1 = mysql_query($query);

maar daar eens van
code:
1
  $result1 = mysql_query($query) or die("Fout!: ".mysql_error());


en ben je zeker dat je in de update loop zit?

edit:
@hier onder.. idd nergens geen mysql real escape etc.. maarja.. iedereen moet ergens beginnen..

[ Voor 33% gewijzigd door Icekiller2k6 op 27-07-2011 21:16 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 15:24
Serieus, de code die ik hier voorbij zie komen is aan alle kanten zó fout dat ik mijn vorige opmerking toch nog maar een keer quote:
Avalaxy schreef op woensdag 27 juli 2011 @ 21:11:
Koop een goed PHP boek ;)

Serieus.
Geen idee of dit puur voor hobby is of niet, maar je moet je ECHT eerst goed inlezen waar je mee bezig bent in plaats van verder gaan en dit soort code produceren...

Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Icekiller2k6 schreef op woensdag 27 juli 2011 @ 21:13:
code:
1
  $result1 = mysql_query($query);

maar daar eens van
code:
1
  $result1 = mysql_query($query) or die("Fout!: ".mysql_error());


en ben je zeker dat je in de update loop zit?
Done, nog steeds gebeurd er niks. Hij geeft geen error.

De update loop? Dat is dit volledig nieuw voor mij, ik kwam er achter dat je count moest gebruiken en leerde dat van deze webpagina. Ik gebruikte eerst dat hele $i gedoe niet.

[ Voor 4% gewijzigd door FerdiV op 27-07-2011 21:24 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Avalaxy schreef op woensdag 27 juli 2011 @ 21:15:
Serieus, de code die ik hier voorbij zie komen is aan alle kanten zó fout dat ik mijn vorige opmerking toch nog maar een keer quote:


[...]


Geen idee of dit puur voor hobby is of niet, maar je moet je ECHT eerst goed inlezen waar je mee bezig bent in plaats van verder gaan en dit soort code produceren...
Het is inderdaad voor de hobby, maar wil het wel goed leren. En ga, door jouw tip, zeker een boek kopen :) Toch probeer ik nu even dit te snappen omdat ik al zo ver met de website ben. Wordt zeker bestellen!

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
dan komt hij waarschijnlijk niet eens in de if state.


code:
1
2
      for ($i=0; $i<$count; $i++)
              {


zet hier na eens een
code:
1
echo "waarde: ".$i."<br />";


als dat ook niets weer geeft zit hij niet in de If statement (die van post update dus)

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 15:24
Icekiller2k6 schreef op woensdag 27 juli 2011 @ 21:13:

edit:
@hier onder.. idd nergens geen mysql real escape etc.. maarja.. iedereen moet ergens beginnen..
Not to mention het gebruik van "$_SERVER['PHP_SELF']" in een formulier en het outputten van ongefilterde data.

Overigens is "or die(mysql_error())" ook niet bepaald netjes, maar dat valt nog wel goed te praten omdat de standaard mysql extensies geen exceptions hebben zover ik weet.

Edit: voor debugging doeleinden uiteraard.

[ Voor 3% gewijzigd door Avalaxy op 27-07-2011 21:26 ]


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
Avalaxy schreef op woensdag 27 juli 2011 @ 21:25:
[...]


Overigens is "or die(mysql_error())" ook niet bepaald netjes, maar dat valt nog wel goed te praten omdat de standaard mysql extensies geen exceptions hebben zover ik weet.
Idd .. en zover ik weet heeft elke cursus dit zo weer.. (tenzij er weer van alles verandert is bij de laatste php editie ..)
Uiteraard mag hij daar eigenlijk nooit op "die'n"..

[ Voor 5% gewijzigd door Icekiller2k6 op 27-07-2011 21:27 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Icekiller2k6 schreef op woensdag 27 juli 2011 @ 21:24:
dan komt hij waarschijnlijk niet eens in de if state.


code:
1
2
      for ($i=0; $i<$count; $i++)
              {


zet hier na eens een
code:
1
echo "waarde: ".$i."<br />";


als dat ook niets weer geeft zit hij niet in de If statement (die van post update dus)
Hij geeft inderdaad niks weer, dus daar gaat het al mis.

----------------

En nu even over escapen en die. Ik weet inderdaad dat 'die' niet mag, goed he :P

Maar er is zeker wel een escape. Dit is niet de volledige code. Er staat:

code:
1
$_POST = RealEscape($_POST);


En die functie staat op een andere php file die wordt geinclude. Ik moet dit nog even voor $_SERVER doen.

code:
1
2
3
require("./include/config.inc.php");
require("./include/login.check.inc.php");
include("./include/head.php");


En in config wordt function.inc.php opgeroepen waarin de realescape script staat. Maar ik vind het overdreven om alle codes te posten, aangezien die niet relevant voor deze query zijn.

[ Voor 4% gewijzigd door FerdiV op 27-07-2011 21:32 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Icekiller2k6 schreef op woensdag 27 juli 2011 @ 21:26:
[...]

Idd .. en zover ik weet heeft elke cursus dit zo weer.. (tenzij er weer van alles verandert is bij de laatste php editie ..)
Uiteraard mag hij daar eigenlijk nooit op "die'n"..
Voor een cursus is een mysql_error leuk, voor een real-site niet ( of je moet graag je query's / tablenames etc de wereld in willen gooien).

Het "die'n" op zich is niet zo netjes, maar ook niet een probleem. De boodschap die je nog net verstuurt voor je "die't" dat is een probleem...
Zo heb ik al menig site zien "die'n" op een inlog. Dan zie je een query terug komen als : select ... where md5pass=... en je weet of het pw in plaintext of md5 of een andere methode geschreven is. Is toch ietwat meer info dan je over het algemeen naar buiten wilt brengen.

Security through obscurity is niet alles, maar je tablenames etc de wereld ingooien is aan de andere kant weer vragen om een sql injection attack.

Acties:
  • 0 Henk 'm!

Verwijderd

Ok, een schop in de goede richting... hoe kom je aan de variabele $count?

[ Voor 10% gewijzigd door Verwijderd op 27-07-2011 21:35 ]


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
code:
1
  if ($_POST['submit'] == "Update")


echo de waarde eens van submit.

Als je kijkt naar de tutorial die je volgt zie je dat $count aantal mysql num rows moet zijn... maar zie ik inderdaad ook nergens.

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
code:
1
$count = mysql_num_rows($fetch);


Dat niet voldoende? Is als de tutorial. Hier neemt hij als count toch het aantal rijen?

Ik zal submit eens echo'en. Uhm, ik neem aan weer in if net als ik $i heb geplaatst? Ik weet alleen niet hoe ik sumbit dan oproep, die heeft geen $sumbit of is dat dan nu gewoon simpel 'sumbit'?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   if ($_POST['submit'] == "Update")
      {
        for ($i=0; $i<$count; $i++)
            {
                echo "waarde: ".$i."<br />";
                echo "waarde: ".submit."<br />";
                $query = "UPDATE $tab_prijzen SET positie='$positie[$i]', naam='$naam[$i]', prijs='$prijs[$i]'
                WHERE id='$id[$i]'";
                $result1 = mysql_query($query) or die("Fout!: ".mysql_error());
            }
      }
   
   if ($result1)
      {
        echo "<script language=\"javascript\">location.href='editprijzen.php';</script>";
      }

[ Voor 70% gewijzigd door FerdiV op 27-07-2011 21:45 ]


Acties:
  • 0 Henk 'm!

  • Repsaj_Nav
  • Registratie: Juni 2006
  • Laatst online: 15-09 14:54

Repsaj_Nav

Hallo, ik ben Jasper

Wat is de waarde van $count op het moment dat je de if doet?
Je definieert hem daaronder pas.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou toch voor het boek gaan, no offence...
Maar er zijn ook meer dan genoeg goede tutorials te vinden

[ Voor 40% gewijzigd door Verwijderd op 27-07-2011 21:48 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Repsaj_Nav schreef op woensdag 27 juli 2011 @ 21:46:
Wat is de waarde van $count op het moment dat je de if doet?
Je definieert hem daaronder pas.
Ik heb de query waar de data worden opgehaald nu boven de if geplaatst. Dat was inderdaad even handig. Ik dacht hij leest if pas als je op update klikt en dan heeft hij count al gehad.

Maar nog niks. Ik zal even mijn huidige codes plaatsen in de OP.

[ Voor 7% gewijzigd door FerdiV op 27-07-2011 21:49 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
FerdiV schreef op woensdag 27 juli 2011 @ 21:41:
code:
1
$count = mysql_num_rows($fetch);


Dat niet voldoende? Is als de tutorial. Hier neemt hij als count toch het aantal rijen?
Dat is perfect voldoende, voor alles na regel 24.

Enkel als je die wilt gaan hergebruiken in je update stuk dan zul je die ook moeten opnemen in je form (bijv als hidden field) zodat je die voor regel 8 uit je post variabelen kan trekken.

Of je kan ipv die count te hergebruiken ook gewoon voor regel 8 een andere count gebruiken die je vult aan de hand van het aantal postvariabelen die meegestuurd worden met het form :)
FerdiV schreef op woensdag 27 juli 2011 @ 21:48:
[...]
Ik heb de query waar de data worden opgehaald nu boven de if geplaatst. Dat was inderdaad even handig. Ik dacht hij leest if pas als je op update klikt en dan heeft hij count al gehad.
Foutieve gedachte, hiermee ga je issues krijgen. Het aantal records in dbase hoeft niet gelijk te zijn op het moment dat ik de 1e x de pagina bekijk en 30 sec later als ik het formulier ingevuld heb en verstuur.
Of je moet bij het ontvangen de antwoorden tellen (uit je post-variabele dus) of je moet bij het 1e x versturen van de pagina de mogelijke antwoorden tellen en die meegeven als hidden variabele.

Ik kan wel een half uur doen over het invullen van die pagina.

[ Voor 36% gewijzigd door Gomez12 op 27-07-2011 21:53 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Gomez12 schreef op woensdag 27 juli 2011 @ 21:49:
[...]

Dat is perfect voldoende, voor alles na regel 24.

Enkel als je die wilt gaan hergebruiken in je update stuk dan zul je die ook moeten opnemen in je form (bijv als hidden field) zodat je die voor regel 8 uit je post variabelen kan trekken.

Of je kan ipv die count te hergebruiken ook gewoon voor regel 8 een andere count gebruiken die je vult aan de hand van het aantal postvariabelen die meegestuurd worden met het form :)
Dat lijkt mij nu voldoende aangezien hij voor de if staat? Zie OP. Dan heeft hij de count gekregen voordat alles begint.

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
makkelijkste manier is dus een hidden input toe te voegen bv dit:

code:
1
echo '<input type="hidden" name="aantalrijen" id="aantalrijen" value="'.$count.'"/>';


en dan bij het bovenste deel waar je
code:
1
$id = $_POST['id'];

doet dit toevoegen:
code:
1
$count = $_POST['aantalrijen'];

[ Voor 30% gewijzigd door Icekiller2k6 op 27-07-2011 21:52 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
FerdiV schreef op woensdag 27 juli 2011 @ 21:48:
[...]

Ik heb de query waar de data worden opgehaald nu boven de if geplaatst. Dat was inderdaad even handig. Ik dacht hij leest if pas als je op update klikt en dan heeft hij count al gehad.
Hmm.. als je op update klikt wordt de pagina opnieuw geladen/ingelezen.. En dan begint alles altijd weer van bovenaf aan, klinkt logisch nietwaar? Maargoed, naast de $count heb je ook een probleem met $id[$i]. Volgens mij is $_POST['id'] compleet leeg! Doe maar eens

PHP:
1
2
3
4
5
<pre>
<?php
print_r($_POST);
?>
</pre>


Daarnaast raad ik je aan om naar http://php.net/header te kijken in plaats van javascript te gebruiken voor een redirect.

[ Voor 8% gewijzigd door C0rnelis op 27-07-2011 21:56 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Icekiller2k6 schreef op woensdag 27 juli 2011 @ 21:51:
makkelijkste manier is dus een hidden input toe te voegen bv dit:

code:
1
echo '<input type="hidden" name="aantalrijen" id="aantalrijen" value="'.$count.'"/>';


en dan bij het bovenste deel waar je
code:
1
$id = $_POST['id'];

doet dit toevoegen:
code:
1
$count = $_POST['aantalrijen'];
Er stond in een andere template die ik las inderdaad een hidden. Die stond in de form:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
echo "<form id=\"editprijzenform\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
      <table id=\"editprijzen\">";
      while ($array = mysql_fetch_array($fetch))
        {
        $query1="SELECT * FROM $tab_prijzen ORDER BY id";
        $fetch1 = mysql_query($query1);
        $editprijs  = mysql_fetch_array($fetch1);

          echo "<tr>
            <td><input type=\"text\" name=\"positie\" size=\"5\" value=\"".$editprijs['positie']."\"></td>
            <td><input type=\"text\" name=\"naam\" size=\"20\" value=\"".$editprijs['naam']."\"></td>
            <td><input type=\"text\" name=\"prijs\" size=\"10\" value=\"".$editprijs['prijs']."\"></td>
          </tr>";
        }
          echo "<tr>
            <td>
              <input type=\"submit\" name=\"submit\" 
               value=\"Update\">
              <input type=\"hidden\" name=\"editid\" value=\"".$editprijs['id']."\">
            </td>
          </tr>
      </table>
      </form>";

Kan ik die input dus weer terugzetten? Maar dan met value $count?

Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
FerdiV schreef op woensdag 27 juli 2011 @ 21:56:
[...]
..

Kan ik die input dus weer terugzetten? Maar dan met value $count?
Hoeveel moeite kost het je om het even te proberen? ;)

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
FerdiV schreef op woensdag 27 juli 2011 @ 21:51:
[...]

Dat lijkt mij nu voldoende aangezien hij voor de if staat? Zie OP. Dan heeft hij de count gekregen voordat alles begint.
Tip : Splits het update-gedeelte eens af naar een losse pagina oid. Waar je niets output behalve een location header ( of een js-redirect ).

Misschien (als je niets copy-paste) dat je dan duidelijker wordt waarom je het anders moet doen. Momenteel ben je enkel spaghetti code aan het schrijven. Gooi er wat checks bij of je id bijv wel echt een id is (en veelal dus numeriek) en in je huidige opzet heb je straks 1 gigantisch php-script wat giga-afhankelijk is van zichzelf en waar 1 tik foutje het hele kaartenhuis doet omvallen.
C0rnelis schreef op woensdag 27 juli 2011 @ 21:55:
[...]
Daarnaast raad ik je aan om naar http://php.net/header te kijken in plaats van javascript te gebruiken voor een redirect.
Totaal afhankelijk van de situatie, je wilt het niet altijd silent doorsturen, soms wil je ook wel eens een ad tonen met een counter oid.

[ Voor 19% gewijzigd door Gomez12 op 27-07-2011 22:02 ]


Acties:
  • 0 Henk 'm!

  • Navi
  • Registratie: Maart 2007
  • Niet online
Overigens is met deze je code je site binnen en paar dagen gehackt, hou er rekening mee :)

Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Done, in de OP nu mijn huidige, volledige code. Dus inderdaad, bij die input wordt de count opgenomen als ik dat goed begrijp.
Navi schreef op woensdag 27 juli 2011 @ 22:01:
Overigens is met deze je code je site binnen en paar dagen gehackt, hou er rekening mee :)
Waarom? Het wordt toch geescaped?

Ik begrijp trouwens zelf niet waarom er
code:
1
name=\"positie[]\"
in de form staat, waarom die []? Ik heb dat nooit eerder gezien en haalde dat uit de tutorial.

UPDATE:
Erg vreemd trouwens, als ik op update klik zie ik heel even 'waarde:' verschijnen. Een aantal maal. Door dit stuk:

code:
1
2
                echo "waarde: ".$i."<br />";
                echo "waarde: ".submit."<br />";


Maar binnen een fractie gaat de tabel eroverheen, dus kan het niet lezen. Goed ik heb even de echo weggehaald waarbij hij de pagina herlaad. Voor de tabel komt dan dit:

waarde: 0
waarde: submit
waarde: 1
waarde: submit
waarde: 2
waarde: submit
waarde: 3
waarde: submit

En erna:

Array
(
[positie] => Array
[naam] => Array
[prijs] => Array
[submit] => Update
[aantalrijen] => \'.4.\'
)

[ Voor 106% gewijzigd door FerdiV op 27-07-2011 22:10 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Navi schreef op woensdag 27 juli 2011 @ 22:01:
Overigens is met deze je code je site binnen en paar dagen gehackt, hou er rekening mee :)
Valt toch wel mee? Hij heeft een of andere magische Realescape die over zijn _POST gaat.
$_SERVER["PHP_SELF"] is mits apache goed geconfigureerd is afaik ook niet echt te hacken ( ik vind het niet handig maar dat is een ander verhaal )

Volgens mij mits die Realescape goed genoeg is ( en de $_POST array in php niet read-only is ) zijn er weinig problemen...
Maarja, als iemand een functie Realescape noemt ipv een normale naam, dan heb ik wel zware bedenkingen bij of dat ding goed is. Maar die functie valt momenteel niet te beoordelen dus ga ik er maar vanuit dat die veilig is.
FerdiV schreef op woensdag 27 juli 2011 @ 22:01:
Waarom? Het wordt toch geescaped?
Voor wat wordt het geescaped? Voor html, voor xml, voor json, voor mysql, voor wat precies?
Ik begrijp trouwens zelf niet waarom er
code:
1
name=\"positie[]\"
in de form staat, waarom die []? Ik heb dat nooit eerder gezien en haalde dat uit de tutorial.
Ok, mijn helpdesk gaat maar weer eens dicht. Ik sluit me aan bij de 2e post van dit topic...

[ Voor 24% gewijzigd door Gomez12 op 27-07-2011 22:08 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Zal ik de RealEscape dan hier posten?

Afbeeldingslocatie: http://www.macnoob.nl/temp_files/maggiez/3.png

Submit wordt dus wel Update.

[ Voor 62% gewijzigd door FerdiV op 27-07-2011 22:18 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
FerdiV schreef op woensdag 27 juli 2011 @ 22:13:
Zal ik de RealEscape dan hier posten?
Waarom, je hebt hem toch enkel gecopy-paste. Koop dan een boek en leer zelf wat het probleem is.

Wat ik dan wel weer interessant vind is waar jij vind dat die RealEscape bijhoort?
Is dat bij de config? Of bij de logincheck? Of bij de header?
Want meer include je volgens mij niet, en ik zou zeggen dat het bij geen van de 3 genoemde mogelijkheden hoort, dus ergens ga je al de fout in qua duidelijke namen (RealEscape nog even daargelaten)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
FerdiV schreef op woensdag 27 juli 2011 @ 22:13:
Zal ik de RealEscape dan hier posten?
Bespaar je de moeite, want het gaat NOOIT een goede escape zijn.

Escapen doe je voor een beelde context. Je kan het dus niet blind aan het begin van je script doen. Ooit dacht men van wel en is magic_quotes_gpc uitgevonden. Deze feature staat inmiddels al lang standaard uit en verdwijnt binnenkort, en letterlijk honderden blogs/docs/boeken kunnen je uit leggen waarom.

Oftewel: alle personen/blogs/docs/boeken die je deze manier van escapen aanraden kan je maar beter negeren, want het is feitelijk onzinnig en gevaarlijk advies.

Escapen in dit geval voorkauwen: Je hebt mysql_real_escape_string nodig om strings voor mysql echt te escapen. En dan moet je alsnog verdomd goed opletten als je zelf query strings bouwt dat je er quotes om heen zet.

[ Voor 9% gewijzigd door Voutloos op 27-07-2011 22:22 ]

{signature}


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Gomez12 schreef op woensdag 27 juli 2011 @ 22:18:
[...]

Waarom, je hebt hem toch enkel gecopy-paste. Koop dan een boek en leer zelf wat het probleem is.

Wat ik dan wel weer interessant vind is waar jij vind dat die RealEscape bijhoort?
Is dat bij de config? Of bij de logincheck? Of bij de header?
Want meer include je volgens mij niet, en ik zou zeggen dat het bij geen van de 3 genoemde mogelijkheden hoort, dus ergens ga je al de fout in qua duidelijke namen (RealEscape nog even daargelaten)
In config, daar staat:

code:
1
require("functions.inc.php");


En nee, de realescape heb ik niet gecopy-paste. Ik heb ooit een 'echte' websitebuilder gevraagd om een eenvoudige beveiliging te maken in een andere site van mij.

Zowel magic als mysql_real_escape_string komen voor in dat script.

[ Voor 4% gewijzigd door FerdiV op 27-07-2011 22:23 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
FerdiV schreef op woensdag 27 juli 2011 @ 22:21:
En nee, de realescape heb ik niet gecopy-paste. Ik heb ooit een 'echte' websitebuilder gevraagd om een eenvoudige beveiliging te maken in een andere site van mij.

Zowel magic als mysql_real_escape_string komen voor in dat script.
Dan zal het script wellicht wel veel problemen voorkomen, maar heb aub niet de illusie dat nu alles goed escaped is, want dat is het niet. Verdiep je er aub dus in. Als die persoon er geen disclaimer bij gemeld heeft, mag je tevens hem aanraden om zich er in te verdiepen.

{signature}


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Voutloos schreef op woensdag 27 juli 2011 @ 22:25:
[...]
Dan zal het script wellicht wel veel problemen voorkomen, maar heb aub niet de illusie dat nu alles goed escaped is, want dat is het niet. Verdiep je er aub dus in. Als die persoon er geen disclaimer bij gemeld heeft, mag je tevens hem aanraden om zich er in te verdiepen.
Goed, zal ik ook doen. Boek 2 :)

Anyway, ik hoop hier nog uit te komen. Zal goed alles door blijven nemen en kijken. Ook wat echo's plaatsen heeft inderdaad wel een handig effect.

Maar waarschijnlijk kom ik er niet uit en zal ik er een 'matige' website van moeten maken. En dan eerst verdiepen in de materie inderdaad. Helaas pindakaas, maar dit blijft ook alleen maar gokken. /wijsheid

[ Voor 15% gewijzigd door FerdiV op 27-07-2011 22:33 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
FerdiV schreef op woensdag 27 juli 2011 @ 22:21:
[...]
In config, daar staat:

code:
1
require("functions.inc.php");
Eerlijke vraag : Wat vind je nu zelf van die logica?
Om bij je functies te komen moet je je config includen?

Als je je dus ooit gaat afvragen waar staat die RealEscape functie ook al weer dan vind jij het logisch dat je via je config verder gaat kijken?

Dan zou ik nog eerder een los bestandje aanmaken startFramework.php die dan enkel
PHP:
1
2
require functions.inc.php;
include config.inc.php;

bevat, dan zie ik tenminste waar wat logischerwijs vandaan moet komen ( de functie RealEscape is onderdeel van mijn framework, dus kijk ik in startFramework.php, daar zie ik dat ik verder kan kijken in functions.inc.php voor de functies en in config.inc.php voor de configuratie )
En nee, de realescape heb ik niet gecopy-paste. Ik heb ooit een 'echte' websitebuilder gevraagd om een eenvoudige beveiliging te maken in een andere site van mij.

Zowel magic als mysql_real_escape_string komen voor in dat script.
Oftewel dat ding escaped geen xml / rss / json etc. Het is dus helemaal geen "Realescape" enkel maar een mysql escape? Noem dat ding dan ook zo...

Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Gomez12 schreef op woensdag 27 juli 2011 @ 22:37:
[...]

Eerlijke vraag : Wat vind je nu zelf van die logica?
Om bij je functies te komen moet je je config includen?

Als je je dus ooit gaat afvragen waar staat die RealEscape functie ook al weer dan vind jij het logisch dat je via je config verder gaat kijken?

Dan zou ik nog eerder een los bestandje aanmaken startFramework.php die dan enkel
PHP:
1
2
require functions.inc.php;
include config.inc.php;

bevat, dan zie ik tenminste waar wat logischerwijs vandaan moet komen ( de functie RealEscape is onderdeel van mijn framework, dus kijk ik in startFramework.php, daar zie ik dat ik verder kan kijken in functions.inc.php voor de functies en in config.inc.php voor de configuratie )


[...]

Oftewel dat ding escaped geen xml / rss / json etc. Het is dus helemaal geen "Realescape" enkel maar een mysql escape? Noem dat ding dan ook zo...
Ik denk het wel ja, puur voor mysql. Maar dan nog, waarom zou iemand hem hacken eigenlijk? Of zijn dat 'hobbyisten'?

Anyway, zie hierboven. I give up.

config wordt trouwens opgeroepen omdat de login gecontroleerd wordt. Iemand moet altijd ingelogd zijn om op een pagina met functions te komen. En voor de logincheck is altijd config nodig. config heeft altijd functions nodig. Waarom zou ik hem dan oproepen. Die is op deze manier altijd aanwezig op een vereiste pagina met login.

[ Voor 3% gewijzigd door FerdiV op 27-07-2011 22:46 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
FerdiV schreef op woensdag 27 juli 2011 @ 22:45:
[...]
Ik denk het wel ja, puur voor mysql. Maar dan nog, waarom zou iemand hem hacken eigenlijk? Of zijn dat 'hobbyisten'?
Het hoeft niet persoon op jou of de site gericht te zijn. Niets mooier voor een spammer dan het vinden van een server met hobbycode waar een exploit in gevonden kan worden om zelf code uit te voeren. :)

En daarom ben ik zelfs enigszins van mening dat je het door een ervaren persoon moet na laat kijken en het anders maar misschien beter niet kan doen als je echt niet weet wat je doet.

{signature}


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
FerdiV schreef op woensdag 27 juli 2011 @ 22:45:
[...]
Ik denk het wel ja, puur voor mysql. Maar dan nog, waarom zou iemand hem hacken eigenlijk? Of zijn dat 'hobbyisten'?
Waarom zouden ze hem niet hacken. Het klinkt altijd stoerder om tegenover je vriendjes te kunnen zeggen dat je 1000 sites gehacked / gedefaced hebt dan om te zeggen dat je 0 sites gehacked / gedefaced hebt.
Anyway, zie hierboven. I give up.
Stond er nog iets echt open dan? Volgens mij moet de pagina nu werken en is het niet direct een giga-open beveiligings gat. Misschien dat het ding 1x per 5 jaar gehacked wordt door een voorbijkomende scriptkiddie, maar backup terugzetten volstaat daarvoor (als je dat ding al 5 jaar in de lucht wilt houden).
Die hack binnen 2 dagen zie ik nou niet echt direct gebeuren, hoogstens als je of duizenden bezoekers per dag krijgt of als je iemand uitlokt om je te hacken.

Voor de rest is de discussie imho enkel maar verbeteringen / leerpuntjes over hoe je het anders kan aanpakken. Als je dat ding nu online gooit is het imho niet slechter als zo goed als alle my-first-php script pages...
config wordt trouwens opgeroepen omdat de login gecontroleerd wordt. Iemand moet altijd ingelogd zijn om op een pagina met functions te komen. En voor de logincheck is altijd config nodig. config heeft altijd functions nodig. Waarom zou ik hem dan oproepen. Die is op deze manier altijd aanwezig op een vereiste pagina met login.
Als je dat zo stellig zegt zou ik eerder vragen : Waarom gooi je die config.inc.php dan niet in logincheck? Waarom include je die wel los.
Als je het zo stellig zegt kan je net zo goed zeggen :
logincheck is verplicht -> die heeft een config nodig -> die heeft functies nodig.

Dan kan je enkel "nooit" meer een pagina zonder login doen (zie php manual over require en require_once etc) en het is zo onduidelijk als de pest.
Maar als je ooit een functie nodig hebt zonder dat je een config hebt kom je nu alsnog in de knoei plus dat ik het persoonlijk onduidelijk vind dat ik bij mijn functies zou komen via mijn config. ( plus een naamgeving als functions vind ik waardeloos, dat is enkel leuk als je max 10 functies hebt. Anders opsplitsen per soort functie en naamgeving veranderen zodat het functions.soortfunctie.inc.php wordt. Je wilt geen megalomane bestanden hebben waarin je met ctrl-f moet zoeken, duidelijkheid is imho heel erg belangrijk )
Voutloos schreef op woensdag 27 juli 2011 @ 23:01:
[...]
En daarom ben ik zelfs enigszins van mening dat je het door een ervaren persoon moet na laat kijken en het anders maar misschien beter niet kan doen als je echt niet weet wat je doet.
Zoals hij zelf zegt is het enkel voor de hobby. Veel leerwerk gebeurt enkel door vallen en opstaan.
Ervaren persoon moet je ook maar net vinden / weten (die het kosteloos doet want voor de hobby).

Laat ik het anders vragen : Bied jij hierbij aan om het helemaal na te kijken en commentaar te geven? En dan ook de revisie erna en die daarna etc.
Mijn 1e hello world script was ook niet wat ik nu ook maar enigszins acceptabel zou vinden. Maar ik heb ook weinig zin om mensen dan maar echt aan het handje mee te nemen of ze anders maar af te raden om ergens te beginnen.

[ Voor 14% gewijzigd door Gomez12 op 27-07-2011 23:08 ]


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Mmm tja, okee ik kan deze dan nog laten werken. Met veel spaghetti geklooi dus. Bij mijn volgende site wacht ik tot ik echt de kennis bezit. Ik ga nu dus ook niet de functions en config etc aanpassen omdat het alleen maar onhandig staat.

Maar hij werkt volgens mij nog steeds niet. Ik zal even checken. En nope, hij werkt nog steeds niet. Punt is dat ik dolgraag het zelf wil fixen en jullie dus niet zomaar mijn werk wil laten doen, maar ik weet gewoon niet meer waar ik naar moet kijken op dit moment. Misschien heb ik morgen weer inspiratie, maar het gevoel ligt niet lekker.

EDIT: Ik ga nu een dutje doen. Morgen ben ik er weer. Wil dit in principe toch nog even afmaken. Alvast bedankt voor jullie vele hulp.

[ Voor 41% gewijzigd door FerdiV op 27-07-2011 23:41 ]


Acties:
  • 0 Henk 'm!

  • ameesters
  • Registratie: Juni 2008
  • Laatst online: 05-01-2022
*snip* Regel dit even in een DM (Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/dm.gif) of kijk even in V&A ;)

maar, en dat zet ik even mij capslock aan om het duidelijker te maken:

ZET DIT NIET ZO ONLINE

*snip* "mail me" is ongewenst ;)

[ Voor 66% gewijzigd door RobIII op 28-07-2011 01:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

@TS..

Het is niet handig dat je nu steeds je OP loopt aan te passen.. iemand die nu dit topic doorleest snapt denk ik niks meer van dit topic omdat je de niet werkende code hebt vervang voor 'werkende'..

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 16:11
Probleem zat hem hier in

bovenaan stond dit:
code:
1
$_POST = RealEscape($_POST);


Waardoor de $_POST['id'] ipv een array een string werd met inhoudt "Array"
waardoor je natuurlijk niets kunt updaten..
En hij gaf nergens id mee .. dus wist de code niet welke row hij moest updaten.

(en nog tig andere kleine foutjes..)

[ Voor 6% gewijzigd door Icekiller2k6 op 30-07-2011 23:59 ]

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • FerdiV
  • Registratie: Juli 2006
  • Laatst online: 28-06 09:20
Jup, met vele dank aan Icekiller2k6 is het probleem verholpen _/-\o_

En ik krijg een boek van ameesters, waarvoor ook veel dank :)

[ Voor 4% gewijzigd door FerdiV op 01-08-2011 23:56 ]

Pagina: 1