arjanvr Posted October 3, 2013 Share Posted October 3, 2013 I have a add, edit and delete script with the date set to Day-Month-Year. When I add an entry it works all fine but when I click edit the date is messed up and it's only a string of numbers. When you just save then it will set the date to 1-1-1970 but when you fill out the correct date in the edit form it does work again. How can I fix it so when I click edit it retrieves the correct date into the edit form? <?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($klantnummer = '', $bedrijfsnaam ='', $adres ='', $postcode ='', $plaats ='', $telefoon='', $londerhoud ='', $aantal ='', $vonderhoud='', $error = '', $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 "Bewerk onderhoud"; } else { echo "Nieuw onderhoud"; } ?> </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <h1><?php if ($id != '') { echo "Bewerk onderhoud"; } else { echo "Nieuw onderhoud"; } ?></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>Klantnummer:</strong> <input type="text" name="klantnummer" value="<?php echo $klantnummer; ?>"/><br/> <strong>Bedrijfsnaam:</strong> <input type="text" name="bedrijfsnaam" value="<?php echo $bedrijfsnaam; ?>"/><br/> <strong>Adres:</strong> <input type="text" name="adres" value="<?php echo $adres; ?>"/><br/> <strong>Postcode:</strong> <input type="text" name="postcode" value="<?php echo $postcode; ?>"/><br/> <strong>Plaats:</strong> <input type="text" name="plaats" value="<?php echo $plaats; ?>"/><br/> <strong>Telefoonnumer:</strong> <input type="text" name="telefoon" value="<?php echo $telefoon; ?>"/><br/> <strong>Laatste onderhoud:<br><small>dag-maand-jaar</small></strong> <input type="text" name="londerhoud" value="<?php echo $londerhoud; ?>"/><br/> <strong>Aantal apparaten:</strong> <input type="text" name="aantal" value="<?php echo $aantal; ?>"/><br/> <strong>Volgende onderhoud:<br><small>dag-maand-jaar</small></strong> <input type="text" name="vonderhoud" value="<?php echo $vonderhoud; ?>"/><p/> <input type="submit" name="submit" value="Submit" /><p> <a href="index.html">Terug naar het overzicht</a> </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']; $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); $telefoon = htmlentities($_POST['telefoon'], ENT_QUOTES); $londerhoud = htmlentities(strtotime($_POST['londerhoud']), ENT_QUOTES); $aantal = htmlentities($_POST['aantal'], ENT_QUOTES); $vonderhoud = htmlentities(strtotime($_POST['vonderhoud']), ENT_QUOTES); { // update de database if ($stmt = $mysqli->prepare("UPDATE klanten SET klantnummer = ?, bedrijfsnaam = ?, adres = ?, postcode = ?, plaats = ?, telefoon = ?, londerhoud = ?, aantal = ?, vonderhoud = ? WHERE id=?")) { $stmt->bind_param("sssssssssi", $klantnummer, $bedrijfsnaam, $adres, $postcode, $plaats, $telefoon, $londerhoud, $aantal, $vonderhoud, $id); $stmt->execute(); $stmt->close(); } // toont foutmelding indien nodig else { echo "ERROR: Could not prepare SQL statement.<p>Error: " . $mysqli->error; } // redirect na submit van formulier header("Location: view.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 klanten WHERE id=?")) { $stmt->bind_param("i", $id); $stmt->execute(); $stmt->bind_result($id, $klantnummer, $bedrijfsnaam, $adres, $postcode, $plaats, $telefoon, $londerhoud, $aantal, $vonderhoud); $stmt->fetch(); // toon het formulier renderForm($klantnummer, $bedrijfsnaam, $adres, $postcode, $plaats, $telefoon, $londerhoud, $aantal, $vonderhoud, 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: view.php"); } } } /* NIEUW RECORD */ // wanneer geen 'id' is ingesteld volgt een nieuwe invoer else { // proces het formlier na submit if (isset($_POST['submit'])) { // verkrijg formulierdata $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); $telefoon = htmlentities($_POST['telefoon'], ENT_QUOTES); $londerhoud = htmlentities(strtotime($_POST['londerhoud']), ENT_QUOTES); $aantal = htmlentities($_POST['aantal'], ENT_QUOTES); $vonderhoud = htmlentities(strtotime($_POST['vonderhoud']), ENT_QUOTES); { // insert the new record into the database if ($stmt = $mysqli->prepare("INSERT klanten (klantnummer, bedrijfsnaam, adres, postcode, plaats, telefoon, londerhoud, aantal, vonderhoud) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")) { $stmt->bind_param("sssssssss", $klantnummer, $bedrijfsnaam, $adres, $postcode, $plaats, $telefoon, $londerhoud, $aantal, $vonderhoud); $stmt->execute(); $stmt->close(); } // Toon een foutmelding indien nodig else { echo "ERROR: Could not prepare SQL statement.<p>Error: " . $mysqli->error; } // stuur gebruiker door header("Location: view.php"); } } // wanneer geen formulier is ingediend word de database weergegeven else { renderForm(); } } // sluit mysqli verbinding $mysqli->close(); ?> I have the same problem with this script. <?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)) ? "Nieuwe factuur" : "Bewerk factuur"; // 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-nw.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" /><p> <a href="index.html">Terug naar het overzicht</a> </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(strtotime($_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(); ?> Someone changed the date for me from Y-M-D to D-M-Y so I dont have a clue what is wrong.. Please help.. Thank you Quote Link to comment Share on other sites More sharing options...
Barand Posted October 3, 2013 Share Posted October 3, 2013 1. Write dates to database in Y-M-D format in DATE type column. Reformat on output. 2. Sanitize inputs to database with mysqli::real_escape_string(), not with htmlentities() Quote Link to comment Share on other sites More sharing options...
arjanvr Posted October 3, 2013 Author Share Posted October 3, 2013 So for example $naam = mysqli::real_escape_string() Quote Link to comment Share on other sites More sharing options...
arjanvr Posted October 3, 2013 Author Share Posted October 3, 2013 But is there a easy way to fix this script the way it is? Or cant this work at all. All that needs fixing is that it needs to show the date when editing the form instead of a string of numbers. The rest works fine Quote Link to comment Share on other sites More sharing options...
Barand Posted October 3, 2013 Share Posted October 3, 2013 So for example $naam = mysqli::real_escape_string() Not quite. $naam = $mysqli->real_escape_string($naam); Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.