Jump to content

edit script error


arjanvr

Recommended Posts

While still working on my add, edit delete script I receive below error while trying to edit a entry. I am not sure, even though I have error reporting, what this error is caused by..

 

The error that is returned

Notice: Undefined index: id in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 70
Error!

 

The line it is refering to is:

if (is_numeric($_POST['id']))

<?php
        /*
                Staat de gebruiker toe om nieuwe records toe te voegen te bewerken
        */

        // connect to the database
        include("connect-db.php");
        
        # errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

        // Maakt nieuw/edit record formulier
        function renderForm($bedrijfsnaam ='', $factuurbedrag ='', $vervaldatum ='', $voldaan ='', $opmerkingen ='', $id ='')
        { ?>
                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
                <html>
                        <head>  
                                <title>
                                        <?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?>
                                </title>
                                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                        </head>
                        <body>
                                <h1><?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?></h1>
                                <?php if ($error != '') {
                                        echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error
                                                . "</div>";
                                } ?>
                                
                                <form action="" method="post">
                                <div>
                                        <?php if ($id != '') { ?>
                                                <input type="hidden" name="id" value="<?php echo $id; ?>" />
                                                <p>ID: <?php echo $id; ?></p>
                                        <?php } ?>
                                        
                                        <strong>Bedrijfs(naam):</strong> <input type="text" name="bedrijfsnaam"
                                                value="<?php echo $bedrijfsnaam; ?>"/><br/>
                                        <strong>Factuurbedrag:</strong> <input type="text" name="factuurbedrag"
                                                value="<?php echo $factuurbedrag; ?>"/><br/>
                                        <strong>Vervaldatum:</strong> <input type="text" name="vervaldatum"
                                                value="<?php echo $vervaldatum; ?>"/><br/>
                                        <strong>Voldaan (ja/nee):</strong> <input type="text" name="voldaan"
                                                value="<?php echo $voldaan; ?>"/><br/>
                                        <strong>Opmerkingen:</strong> <input type="text" name="opmerkingen"
                                                value="<?php echo $opmerkingen; ?>"/><p/>
                                        <input type="submit" name="submit" value="Submit" />
                                </div>
                                </form>
                        </body>
                </html>
                
        <?php }



        /*

           BEWERK RECORD

        */
        // Wanneer de 'id' variabel is ingesteld in de URL, weten we dat we een record moeten aanpassen
        if (isset($_GET['id']))
        {
                // Wanneer de submitknop word ingedrukt word het formulier verwerkt
                if (isset($_POST['submit']))
                {
                        // Zorgt ervoor dat de 'id' geldig is
                        if (is_numeric($_POST['id']))
                        {
                                // verkrijg variabelen van URL/formulier
                                $id = $_POST['id'];
                                $bedrijfsnaam = htmlentities($_POST['bedrijfsnaam'], ENT_QUOTES);
                                $factuurbedrag = htmlentities($_POST['factuurbedrag'], ENT_QUOTES);
                                $vervaldatum = htmlentities($_POST['vervaldatum'], ENT_QUOTES);
                                $voldaan = htmlentities($_POST['voldaan'], ENT_QUOTES);
                                $opmerkingen = htmlentities($_POST['opmerkingen'], ENT_QUOTES);
                                                                
                                {
                                        // update de database
                                        if ($stmt = $mysqli->prepare("UPDATE facturen SET bedrijfsnaam = ?, factuurbedrag = ?, vervaldatum = ?, voldaan = ?, opmerkingen = ?
                                                WHERE id=?"))
                                        {
                                                $stmt->bind_param("sssssi", $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen, $id);
                                                $stmt->execute();
                                                $stmt->close();
                                        }
                                        // toont foutmelding indien nodig
                                        else
                                        {
                                                echo "ERROR: could not prepare SQL statement.";
                                        }
                                        
                                        // redirect na submit van formulier
                                        header("Location: facturen.php");
                                }
                        }
                        // bij ongeldige 'id' komt een foutmelding
                        else
                        {
                                echo "Error!";
                        }
                }
                // Indien het formulier niet verstuurd is word de database en het formulier weergegeven
                else
                {
                        // zorgt dat de 'id' geldig is
                        if (is_numeric($_GET['id']) && $_GET['id'] > 0)
                        {
                                // verkrijg 'id' van URL
                                $id = $_GET['id'];
                                
                                // verkrijg de records uit de database
                                if($stmt = $mysqli->prepare("SELECT * FROM facturen WHERE id=?"))
                                {
                                        $stmt->bind_param("i", $id);
                                        $stmt->execute();
                                        
                                        $stmt->bind_result($id, $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen);
                                        $stmt->fetch();
                                        
                                        // toon het formulier
                                        renderForm($bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen, NULL, $id);
                                        
                                        $stmt->close();
                                }
                                // toon een error wanneer de query een error heeft
                                else
                                {
                                        echo "Error: could not prepare SQL statement";
                                }
                        }
                        // wanneer het 'id' ongeldig is word de gebruiker naar view.php doorgestuurd
                        else
                        {
                                header("Location: facturen.php");
                        }
                }
        }



        /*

           NIEUW RECORD

        */
        // wanneer geen 'id' is ingesteld volgt een nieuwe invoer
        else
        {
                // proces het formlier na submit
                if (isset($_POST['submit']))
                {
                        // verkrijg formulierdata
                       $bedrijfsnaam = htmlentities($_POST['bedrijfsnaam'], ENT_QUOTES);
                       $factuurbedrag = htmlentities($_POST['factuurbedrag'], ENT_QUOTES);
                       $vervaldatum = htmlentities($_POST['vervaldatum'], ENT_QUOTES);
                       $voldaan = htmlentities($_POST['voldaan'], ENT_QUOTES);
                       $opmerkingen = htmlentities($_POST['opmerkingen'], ENT_QUOTES);
                        
                        {
                                // insert the new record into the database
                                if ($stmt = $mysqli->prepare("INSERT facturen (bedrijfsnaam, factuurbedrag, vervaldatum, voldaan, opmerkingen) VALUES (?, ?, ?, ?, ?)"))
                                {
                                        $stmt->bind_param("sssss", $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen);
                                        $stmt->execute();
                                        $stmt->close();
                                }
                                // Toon een foutmelding indien nodig
                                else
                                {
                                        echo "ERROR: Could not prepare SQL statement.";
                                }
                                
                                // stuur gebruiker door
                                header("Location: facturen.php");
                        }
                        
                }
                // wanneer geen formulier is ingediend word de database weergegeven
                else
                {
                        renderForm();
                }
        }
        
        // sluit mysqli verbinding
        $mysqli->close();
?>
Link to comment
Share on other sites

No luck, tried both

 

<input type="hidden" name="id=" value="<?php echo $id="id"; ?>" /> and <input type="hidden" name=id="id" value="<?php echo $id; ?>" />

 

I noticed on the edit page itself it says

Notice: Undefined variable: error in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 26

 

Which is this line

                               <?php if ($error != '') {
                                        echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error
                                                . "</div>";
                                } ?>

Link to comment
Share on other sites

I noticed on the edit page itself it says

Notice: Undefined variable: error in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 26

 

Which is this line

                               <?php if ($error != '') {

                                        echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error

                                                . "</div>";

                                } ?>

 

That line can be easily fixed using

 <?php if (isset($error) && !empty($error) {

As for the undefined id index. it appears your form is not submitting the id field on form submission. the $id variable appears to be passed to the renderForm() function as a parameter

function renderForm($bedrijfsnaam ='', $factuurbedrag ='', $vervaldatum ='', $voldaan ='', $opmerkingen ='', $id ='')

The code for this function will only set the id form field if the $id variable is not emtpy.

                                 <?php if ($id != '') { ?>
                                                <input type="hidden" name="id" value="<?php echo $id; ?>" />
                                                <p>ID: <?php echo $id; ?></p>
                                        <?php } ?>

The format of the HTML is correct for the id form field.

 

Where is the function renderForm() called from and how is $id set?

Edited by Ch0cu3r
Link to comment
Share on other sites

I think you mean this, where the id etc is shown? Otherwise i dont understand the question

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
        <head>  
                <title>Overzicht facturen</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>
        <body>
                
                <h1>View Records</h1>
                
                <p><b>Bekijk alles</b> | <a href="facturen-pagina.php">Bekijk per 10</a></p>
                
                <?php
                        // connect to the database
                        include('connect-db.php');
                        

                        
                        // get the records from the database
                        if ($result = $mysqli->query("SELECT * FROM facturen ORDER BY bedrijfsnaam"))
                        {
                                // display records if there are records to display
                                if ($result->num_rows > 0)
                                {
                                        // display records in a table
                                        echo "<table border='1' cellpadding='10'>";
                                        
                                        // set table headers
                                        echo "<tr><th>id</th><th>Bedrijfs(naam)</th><th>factuurbedrag</th><th>Vervaldatum</th><th>Voldaan<br><small>ja/nee</small></th><th>Opmerkingen</th><th></th><th></th></tr>";
                                        
                                        while ($row = $result->fetch_object())
                                        {
                                                // set up a row for each record
                                                echo "<tr>";
                                                echo "<td>" . $row->id . "</td>";
                                                echo "<td>" . $row->bedrijfsnaam . "</td>";
                                                echo "<td>" . $row->factuurbedrag . "</td>";
                                                echo "<td>" . $row->vervaldatum . "</td>";
                                                echo "<td>" . $row->voldaan . "</td>";
                                                echo "<td>" . $row->opmerkingen . "</td>";
                                                echo "<td><a href='facturen-nw.php?id=" . $row->id . "'>Edit</a></td>";
                                                echo "<td><a href='del.php?id=" . $row->id . "'>Delete</a></td>";
                                                echo "</tr>";
                                        }
                                        
                                        echo "</table>";
                                }
                                // if there are no records in the database, display an alert message
                                else
                                {
                                        echo "No results to display!";
                                }
                        }
                        // show an error if there is an issue with the database query
                        else
                        {
                                echo "Error: " . $mysqli->error;
                        }
                        
                        // close database connection
                        $mysqli->close();
                
                ?>
                
                <a href="facturen-nw.php">Voeg nieuwe factuur toe</a>
        </body>
</html>
Link to comment
Share on other sites

I'm no expert in PHP, so forgive if this is a stupid question, but why is all your html in a function? 

I mean, you could try taking all the html out of the function. Perhaps the code below will help me explain better:

// Maakt nieuw/edit record formulier
        function renderForm($bedrijfsnaam ='', $factuurbedrag ='', $vervaldatum ='', $voldaan ='', $opmerkingen ='', $id ='')
        { ?>

All of your HTML is here

<? }


//your input is processed down here but it seems you dont need the function renderForm
Link to comment
Share on other sites

You didn't so don't worry about it.

 

If i remove the function i get

 

Notice: Undefined variable: id in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 24
New Record


Notice: Undefined variable: error in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 25



Notice: Undefined variable: id in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 32
Bedrijfs(naam): <br /><b>Notice</b>:  Undefined variable: bedrijfsnaam in <b>/home/schoolme/public_html/ret/mysqli/facturen-nw.php</b> on line <b>38</b><br />
Factuurbedrag: <br /><b>Notice</b>:  Undefined variable: factuurbedrag in <b>/home/schoolme/public_html/ret/mysqli/facturen-nw.php</b> on line <b>40</b><br />
Vervaldatum: <br /><b>Notice</b>:  Undefined variable: vervaldatum in <b>/home/schoolme/public_html/ret/mysqli/facturen-nw.php</b> on line <b>42</b><br />
Voldaan (ja/nee): <br /><b>Notice</b>:  Undefined variable: voldaan in <b>/home/schoolme/public_html/ret/mysqli/facturen-nw.php</b> on line <b>44</b><br />
Opmerkingen:
<br /><b>Notice</b>:  Undefined variable: opmerkingen in <b>/home/schoolme/public_html/ret/mysqli/facturen-nw.php</b> on line <b>46</b><br />

 

Fatal error: Call to undefined function renderForm() in /home/schoolme/public_html/ret/mysqli/facturen-nw.php on line 123

 

 

Strange thing is that the form is working for me in a dir where i tested it with different input.

Edited by arjanvr
Link to comment
Share on other sites

Your original code:

        // Wanneer de 'id' variabel is ingesteld in de URL, weten we dat we een record moeten aanpassen
        if (isset($_GET['id']))
        {
                // Wanneer de submitknop word ingedrukt word het formulier verwerkt
                if (isset($_POST['submit']))
                {
                        // Zorgt ervoor dat de 'id' geldig is
                        if (is_numeric($_POST['id']))
                        {
is checking to see if $_GET['id'] is set, then retrieving the value from $_POST['id']. These are two different resources. If the FORM method is POST and the "id" is a field in the form (which is what I see), you should be checking $_POST. If you are expecting the "id" to be part of the URL, then you need to retrieve it from $_GET. If you want to allow it to come from either, you can use $_REQUEST, however, since you have it in the form, you have to watch out for the possibility that it comes in both places AND IS DIFFERENT
Link to comment
Share on other sites

What I dont understand, I have the same script with different variables running in the same directory but the other script does work while the part you mention is the same..

  // Wanneer de 'id' variabel is ingesteld in de URL, weten we dat we een record moeten aanpassen
        if (isset($_GET['id']))
        {
                // Wanneer de submitknop word ingedrukt word het formulier verwerkt
                if (isset($_POST['submit']))
                {
                        // Zorgt ervoor dat de 'id' geldig is
                        if (is_numeric($_POST['id']))
                        {
                                // verkrijg variabelen van URL/formulier
                                $id = $_POST['id'];
                                $klantnummer = htmlentities($_POST['klantnummer'], ENT_QUOTES);
                                $bedrijfsnaam = htmlentities($_POST['bedrijfsnaam'], ENT_QUOTES);
                                $adres = htmlentities($_POST['adres'], ENT_QUOTES);
                                $postcode = htmlentities($_POST['postcode'], ENT_QUOTES);
                                $plaats = htmlentities($_POST['plaats'], ENT_QUOTES);
                                $londerhoud = htmlentities($_POST['londerhoud'], ENT_QUOTES);
                                $aantal = htmlentities($_POST['aantal'], ENT_QUOTES);
                                $vonderhoud = htmlentities($_POST['vonderhoud'], ENT_QUOTES);
                                
                                {
                                        // update de database
                                        if ($stmt = $mysqli->prepare("UPDATE klanten SET klantnummer = ?, bedrijfsnaam = ?, adres = ?, postcode = ?, plaats = ?, londerhoud = ?, aantal = ?, vonderhoud = ?
                                                WHERE id=?"))
                                        {
                                                $stmt->bind_param("ssssssssi", $klantnummer, $bedrijfsnaam, $adres, $postcode, $plaats, $londerhoud, $aantal, $vonderhoud, $id);
                                                $stmt->execute();
                                                $stmt->close();
                                        }
                                        // toont foutmelding indien nodig
                                        else
                                        {
                                                echo "ERROR: could not prepare SQL statement.";
                                        }
                                        
                                        // redirect na submit van formulier
                                        header("Location: view.php");
                                }
                        }
                        // bij ongeldige 'id' komt een foutmelding
                        else
                        {
                                echo "Error!";
                        }
                }

So what is the difference why one does work and the other does not?

Link to comment
Share on other sites

Use this code for facturen-new.php

<?php
		/*
                Staat de gebruiker toe om nieuwe records toe te voegen te bewerken
        */

        // connect to the database
        include("connect-db.php");
        
        # errors weergeven
		ini_set('display_errors',1); // 1 == aan , 0 == uit
		error_reporting(E_ALL | E_STRICT);

        // Maakt nieuw/edit record formulier
        function renderForm($bedrijfsnaam ='', $factuurbedrag ='', $vervaldatum ='', $voldaan ='', $opmerkingen ='', $id ='', $error = '')
        {

            $title = (empty($id)) ? "New Record" : "Edit Record";

            // all HTML is now held within the $HTML variable.
        	$HTML = <<<HTML
        	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
                <html>
                        <head>  
                                <title>$title</title>
                                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                        </head>
                        <body>
                                <h1>$title</h1>
                                $error
                                
                                <form action="facturen-new.php" method="post">
                                <div>
HTML;
// DO NOT MOVE?CHANGE THE ABOVE LNE

            if (!empty($error))
                $HTML .= "\n<div style='padding:4px; border:1px solid red; color:red'>" . $error . "</div>\n\n";

            if(!empty($id))
                $HTML .= '<input type="hidden" name="id" value="' . $id . '" /><p>ID:' . $id .'</p>';
            $HTML .= <<<HTML
   										                                     
                                        <strong>Bedrijfs(naam):</strong>
                                        <input type="text" name="bedrijfsnaam" value="$bedrijfsnaam"/><br/>
                                        <strong>Factuurbedrag:</strong>
                                        <input type="text" name="factuurbedrag" value="$factuurbedrag"/><br/>
                                        <strong>Vervaldatum:</strong>
                                        <input type="text" name="vervaldatum" value="$vervaldatum"/><br/>
                                        <strong>Voldaan (ja/nee):</strong>
                                        <input type="text" name="voldaan" value="$voldaan"/><br/>
                                        <strong>Opmerkingen:</strong>
                                        <input type="text" name="opmerkingen" value="$opmerkingen"/><p/>
                                        <input type="submit" name="submit" value="Submit" />
                                </div>
                                </form>
                        </body>
                </html>
HTML;
// DO NOT MOVE/CHANGE THE ABOVE LINE
				
			// function returns the generated HTML
			return $HTML;
        }

        // set action to create a new record
        $action = 'new';

        // override action to either edit or update
        if(isset($_REQUEST['id']) && is_numeric($_REQUEST['id']))
        {
            // get the record id from _GET or _POST
            $id = (int) $_REQUEST['id'];

            // what action we're doing
            // if id is in url eg: facturen.php?id=1 then we're editing the record
            // If its not in the url then we're updating the record
            $action = isset($_GET['id']) ? 'edit' : 'update';
        }

        // if the form has been submitted
        if(isset($_POST['submit']))
        {

            $bedrijfsnaam = htmlentities($_POST['bedrijfsnaam'], ENT_QUOTES);
            $factuurbedrag = htmlentities($_POST['factuurbedrag'], ENT_QUOTES);
            $vervaldatum = htmlentities($_POST['vervaldatum'], ENT_QUOTES);
            $voldaan = htmlentities($_POST['voldaan'], ENT_QUOTES);
            $opmerkingen = htmlentities($_POST['opmerkingen'], ENT_QUOTES);


            // run query depending on actions
            if($action == 'new') // inserts new record
            {
                $stmt = $mysqli->prepare("INSERT INTO facturen SET bedrijfsnaam = ?, factuurbedrag = ?, vervaldatum = ?, voldaan = ?, opmerkingen = ?");
                $stmt->bind_param("sssss", $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen);
            }
            elseif($action == 'update') // updates record
            {
                $stmt = $mysqli->prepare("UPDATE facturen SET bedrijfsnaam = ?, factuurbedrag = ?, vervaldatum = ?, voldaan = ?, opmerkingen = ? WHERE id=?");
                $stmt->bind_param("sssssi", $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen, $id);
            }

            // executes query and redirects on sucess
            if($stmt->execute())
            {
                header('Location: facturen.php');
                exit;
            }
            else
            {
                $error = 'Cannot continue! Error with database';
            }

            // otherwise display form with error
            echo enderForm($bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen, $id, $error);


        } 
        elseif($action == 'edit')
        {
            $stmt = $mysqli->prepare("SELECT * FROM facturen WHERE id=?");
            $stmt->bind_param("i", $id);
            $stmt->execute();
            $stmt->bind_result($id, $bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen);
            $stmt->fetch();

            echo renderForm($bedrijfsnaam, $factuurbedrag, $vervaldatum, $voldaan, $opmerkingen, $id);
        }
        else
            echo renderForm();
        
        // sluit mysqli verbinding
        $mysqli->close();
?>

I have gone through it and cleaned it up. You had a lot of repetitive code which was redundant. The script should work fine I have tested that it edit/update/create new records in the database.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.