2 formulieren in 1 script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis meijer

dennis meijer

10/06/2010 22:39:52
Quote Anchor link
mensen

ik heb een script en daar zitten 2 formulieren in.

alleen als ik de eerst eheb gehad opent de volgende maar als ik daar op veranderen klik gaat die terug naar het begin.

hoe kan ik ervoor zorgen dat hij dan verder gaat met het script?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
include 'config.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (isset($_POST['kiezen']))
{


        $query = mysql_query("SELECT * FROM project WHERE naam='".$_POST['project']."'");
        $gegevens = mysql_fetch_object($query);

    
    if (isset($_POST['veranderen']))
    {

        if (mysql_query("UPDATE project SET name='".$_POST['naam']."' beschrijving='".$_POST['beschrijving']."' WHERE id='".$gegevens->id."'"))
        {

            echo 'Gegevens zijn succesvol geupdated.';
        }

        else
        {
            echo 'Kon gegevens niet veranderen.';
        }
    }

    else
    {
        


        echo "<table>";
        echo "<form method=\"POST\" action='".$_SERVER['REQUEST_URI']."'>";

        echo "<tr>";
        echo "<td>Naam: </td>";
        echo "<td><input type=\"text\" name=\"naam\" value='".$gegevens->naam."' /></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td>Beschrijving: </td>";
        echo "<td><textarea name=\"beschrijving\" cols=\"40\" rows=\"7\">".$gegevens->beschrijving."</textarea></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td></td>";
        echo "<td><input type=\"submit\" name=\"veranderen\" value=\"veranderen\" /></td>";
        echo "</tr>";

        echo "</form>";
        echo "</table>";
    
    }
    
    
}

    else
    {

        echo "<table>";
        echo "<form method=\"POST\" action='".$_SERVER['REQUEST_URI']."'>";
        
        echo "<tr>";
        echo "<td>Projectnaam: </td>";

        echo "<td><select name=\"project\">";

        $q_projecten = "SELECT naam FROM project";
        $projecten = mysql_query($q_projecten);


        while ($project = mysql_fetch_object($projecten))
            {

    
                echo "<option name=\"project1\">" . $project->naam . "</option>";
                
            }

        echo "</select></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td></td>";
        echo "<td><input type=\"submit\" name=\"kiezen\" value=\"kiezen\" /></td>";
        echo "</tr>";

        echo "</form>";
        echo "</table>";
    }

?>



opmerking en tips/hints zijn natuurlijk welkom;)
 
PHP hulp

PHP hulp

19/04/2024 21:29:10
 
- SanThe -

- SanThe -

10/06/2010 23:02:18
Quote Anchor link
Als je het tweede formulier verzendt dan is $_POST['kiezen'] niet geset en zal ie dus naar het eerste formulier gaan. Niet echt netjes, maar je kunt een hidden input meegeven met het tweede formulier (name="kiezen").

Script is lek => SQL-Injection.
Zie mysql_real_escape_string().
 
Dennis meijer

dennis meijer

10/06/2010 23:05:21
Quote Anchor link
hoe kun je dat verbeter want je zegt dat het neit netjes is maar hoe kan ik dat beter maken dan?:)

beveiliging komt nog;)
 
- SanThe -

- SanThe -

10/06/2010 23:16:33
Quote Anchor link
Ik zou het hele script anders gemaakt hebben. Maar als ik bovenstaand script zou moeten wijzigen dan zou ik gewoon zo'n hidden input gebruiken. Dat werkt wel namelijk.

Beveiliging behoort tot de eerste prioriteit en niet tot de laatste.
 
Dennis meijer

dennis meijer

11/06/2010 21:35:29
Quote Anchor link
ok ik heb die hidden input ingevoegd maar nu komt de data van het eerste formulier niet opgeslagen als 2de formulier is gedaan.


hoe kan ik dit oplossen?
 
Arnold C

Arnold C

11/06/2010 21:36:32
Quote Anchor link
Misschien is het handig om even het stukje script te posten, zodat de leden hier kunnen meekijken wat je precies uithaalt met die 'hidden input'. (die zul je moeten controleren).

Over SQL-injection is veel te vinden:
http://www.phphulp.nl/php/tutorial/overig/sql-injection-guide/444/

Hopelijk kom je weer verder....
 
Dennis meijer

dennis meijer

11/06/2010 21:38:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
include 'config.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (isset($_POST['kiezen']))
{

        $project = $_POST['project'];
        $query = mysql_query("SELECT * FROM project WHERE naam='".$project."'");
        $gegevens = mysql_fetch_object($query);

    
    if (isset($_POST['veranderen']))
    {

        if (mysql_query("UPDATE project SET name='".mysql_real_escape_string($_POST['naam'])."' beschrijving='".mysql_real_escape_string($_POST['beschrijving'])."' WHERE id='".$gegevens->id."'"))
        {

            echo 'Gegevens zijn succesvol geupdated.';
        }

        else
        {
            echo 'Kon gegevens niet veranderen.';
        }
    }

    else
    {
        


        echo "<table>";
        echo "<form method=\"POST\" action='".$_SERVER['REQUEST_URI']."'>";

        echo "<tr>";
        echo "<td>Naam: </td>";
        echo "<td><input type=\"text\" name=\"naam\" value='".$gegevens->naam."' /></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td>Beschrijving: </td>";
        echo "<td><textarea name=\"beschrijving\" cols=\"40\" rows=\"7\">".$gegevens->beschrijving."</textarea></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td></td>";
        echo "<input type=\"hidden\" name=\"kiezen\" />";
        echo "<td><input type=\"submit\" name=\"veranderen\" name=\"kiezen\"value=\"veranderen\" /></td>";
        echo "</tr>";

        echo "</form>";
        echo "</table>";
    
    }
    
    
}

    else
    {

        echo "<table>";
        echo "<form method=\"POST\" action='".$_SERVER['REQUEST_URI']."'>";
        
        echo "<tr>";
        echo "<td>Projectnaam: </td>";

        echo "<td><select name=\"project\">";

        $q_projecten = "SELECT naam FROM project";
        $projecten = mysql_query($q_projecten);


        while ($project = mysql_fetch_object($projecten))
            {

    
                echo "<option name=\"project1\">" . $project->naam . "</option>";
                
            }

        echo "</select></td>";
        echo "</tr>";

        echo "<tr>";
        echo "<td></td>";
        echo "<td><input type=\"submit\" name=\"kiezen\" value=\"kiezen\" /></td>";
        echo "</tr>";

        echo "</form>";
        echo "</table>";
    }

?>


en ik krijg deze foutmeldingen:

Notice: Undefined index: project in /customers/dnnsdesign.nl/dnnsdesign.nl/httpd.www/dijkstraglas/projectbewerken.php on line 8

Notice: Trying to get property of non-object in /customers/dnnsdesign.nl/dnnsdesign.nl/httpd.www/dijkstraglas/projectbewerken.php on line 15
Kon gegevens niet veranderen.


hoe kan ik dit veranderen. hij bewaard de gegevens maar 1x en meot 2x worden zodat die in het 2de formulier ook werkt.
Gewijzigd op 11/06/2010 21:43:24 door dennis meijer
 
Noppes Homeland

Noppes Homeland

11/06/2010 21:49:25
Quote Anchor link
je script logica klopt niet
je handeld de post verkeerd af!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

   if (isset($_POST['kiezen']) && trim($_POST['kiezen'] == 'kiezen') {

   }

   elseif ( isset($_POST['veranderen']) && trim($_POST['veranderen'] == 'veranderen') {

   }
}


/*
en hier onder zorgen dat het juiste form getoond wordt
*/

?>
 
Dennis meijer

dennis meijer

11/06/2010 21:51:39
Quote Anchor link
ok dat is ook een manier maar er komen 2 formulieren en hier is er maar plek voor 1?
 
Arnold C

Arnold C

11/06/2010 21:55:18
Quote Anchor link
Het is mij onduidelijk wat op welk moment nu precies in je $_POST zit. Ik gebruik dit stukje:

print "<pre>\n";
print_r ($_POST);
print "</pre>\n";

...dan wordt alle 'inhoud' van je $_POST op het scherm getoond. De foutmelding wijst erop dat $_POST['project'] op dat moment niet bestaat.

Volgens mij wijst Noppes hier ook op.

PS. moest die hidden input niet in het tweede formulier? (advies SanThe??)
Gewijzigd op 11/06/2010 21:59:37 door Arnold C
 
Dennis meijer

dennis meijer

11/06/2010 22:00:19
Quote Anchor link
het is zo dat als ik het eerste formulier heb verzonden dan staan de gegevens er wel in maar zodra ik de 2de formulier heb verzonden verdwijnen de gegevens van het eerste formulier daarom doet die het niet maar ik wil graag dat die gegevens dan blijven.

hoe krijg ik dat voor elkaar.?
 
Noppes Homeland

Noppes Homeland

11/06/2010 22:03:49
Quote Anchor link
@Dennis meijer

Je hebt plek voor 2 formulieren!
Output naar de browser komt altijd als laatste en bij de postafhandeling echo je in feite niets naar de browser.

script logica:
- sessie starten indien van toepassing
- scripts inlcuden
- database connectie indien van toepassing
- post / get / seesie / cookie afhandeling
- info vergaren naar aanleiding van de request / afhandelig
- output naar de browser
 
Arnold C

Arnold C

11/06/2010 22:05:08
Quote Anchor link
@Dennis: Kort-door-de-bocht geredeneerd zou ik zeggen dat je al die gegevens dan ook opnieuw moet meegeven bij verzenden.....daarom is het handig even te kijken wat er precies in je $_POST zit...
Gewijzigd op 11/06/2010 22:05:44 door Arnold C
 
- SanThe -

- SanThe -

11/06/2010 22:27:20
Quote Anchor link
Niet getest, maar je moet hier wel een leuk begin mee hebben.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
//include 'config.php';
session_start();

function
kiezen_formulier()
{

    // Kiezen Formulier
    echo '<table>';
    echo '<form method="POST" action="' . $_SERVER['REQUEST_URI'] . '">';
    echo '<tr>';
    echo '<td>Projectnaam: </td>';
    echo '<td><select name="project">';
    $sql_projecten = "SELECT naam FROM project";
    $result_projecten = mysql_query($sql_projecten);
    if($result_projecten)
    {

        while ($row_project = mysql_fetch_assoc($result_projecten))
        {

            echo '<option value="' . $row_project['naam'] . '">' . $row_project['naam'] . '</option>';
        }
    }

    else
    {
        // ERROR
    }
    echo '</select></td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td></td>';
    echo '<td><input type="submit" name="kiezen" value="kiezen" /></td>';
    echo '</tr>';
    echo '</form>';
    echo '</table>';
}

function
veranderen_formulier($naam, $beschrijving)
{

    // Veranderen Formulier
    echo '<table>';
    echo '<form method="POST" action="' . $_SERVER['REQUEST_URI'] . '">';
    echo '<tr>';
    echo '<td>Naam: </td>';
    echo '<td><input type="text" name="naam" value="' . $naam . '" /></td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td>Beschrijving: </td>';
    echo '<td><textarea name="beschrijving" cols="40" rows="7">' . $beschrijving . '</textarea></td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td></td>';
    echo '<td><input type="submit" name="veranderen" value="veranderen" /></td>';
    echo '</tr>';
    echo '</form>';
    echo '</table>';
}




if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if (isset($_POST['project']))
    {

        $sql = "SELECT id, naam, beschrijving
                FROM project
                WHERE naam='"
. mysql_real_escape_string($_POST['project']) . "'";
        $result = mysql_query($sql);
        if($result)
        {

            $row = mysql_fetch_assoc($result);
            $_SESSION['project_id'] = $row['id'];
            veranderen_formulier($row['naam'], $row['beschrijving']);
        }

        else
        {
            // ERROR
        }
    }

    else
    {
        if (isset($_POST['naam'], $_POST['beschrijving']))
        {

            if(isset($_SESSION['project_id']) and ($_SESSION['project_id'] > 0))
            {

                $sql = "UPDATE project
                        SET name='"
. mysql_real_escape_string($_POST['naam']) . "',
                            beschrijving='"
. mysql_real_escape_string($_POST['beschrijving']) . "'
                        WHERE id='"
. $_SESSION['project_id'] . "'";
                $result = mysql_query($sql);
                if($result and mysql_affected_rows() > 0)
                {

                    echo 'Gegevens zijn succesvol geupdated.';
                }

                else
                {
                    echo 'Kon gegevens niet veranderen.';
                }
            }
        }
    }
}

else
{
    $_SESSION['project_id'] = false;
    kiezen_formulier();
}

?>
 
Dennis meijer

dennis meijer

11/06/2010 22:35:21
Quote Anchor link
ok ik heb paar kleine foutjes eruit gehaald en het werkt nu perfect:D

was even helemaal de kluts kwijt:( maarja toch goed gekomen.

ga het nog wel eventjes meer aanpassen maar hartelijk dank;)
 
- SanThe -

- SanThe -

11/06/2010 22:38:38
Quote Anchor link
Mooi dat je er weer verder mee kan.
Het is ook slechts een opzet en geen eindproduct.

Succes verder.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.