Door
Jurgen de Brouwer
op 15-11-2014 18:25
gewijzigd op 15-11-2014 18:26
2.024 views
Hallo,
Ik heb een vreemd probleem.
Ik heb een script waar ik mijn database mee kan update.
Dit werkt perfect.
Alleen in mijn formulier worden de database waardes niet goed weergeven
Als er 2 woorden in de tabel staan word alleen het eerste woord weergeven.
Weet iemand hoe ik dat kan oplossen?
Want als ik nu bijvoorbeeld maar 1 regel wil aanpassen en een andere regel bevat bv Jan klaassen.
Veranderd dit in 'Jan'
Dit is mijn scipt:
<?php
$sql = "SELECT * FROM `tabel' WHERE ID='1'";
Je begint een tabel binnen een form om diezelfde tabel buiten de form te beeindigen,
je gebruikt inline CSS wat behoorlijk achterhaald is, er is nagenoeg geen enkele quote gebruikt bij de id- en naam-waarden, er wordt nergens ingesprongen waardoor het overzicht totaal kwijt is.
Hoe zou ik dat anders kunnen doen als een while-loop?
Als ik print_r() doe krijg ik netjes alle informatie te zien.
Is de html zo beter?
Nou ik zag nog het één en ander
<?php
// indien dit bestand in de POST methode wordt aangeroepen is het formulier verstuurd.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// GEBRUIK GEEN mysql_ meer maar gebruik mysqli_ of PDO !!!
// update de record in de tabel
$result = mysqli_query($db, "UPDATE tabel SET regel1='".mysqli_real_escape_string($_POST['regel1'])
."', regel2='".mysqli_real_escape_string($_POST['regel2'])
."', prijs='".mysqli_real_escape_string($_POST['prijs'])
."' WHERE id=".intval($_POST['id']));
if($result === FALSE)
throw new Exception('Update naar tabel mislukt.' . mysqli_error($db));
// optioneel voor een update is een redirect.
else
header('Location: index.php');
}
$id = $_GET['id'];
// query is het handigste tussen double quotes
$sql = "SELECT * FROM tabel WHERE ID=" . $id;
$result = mysqli_query($db, $sql);
// gebruik mysql_fetch_assoc()! mysql_fetch_array() gebruikt dubbel zoveel geheugen.
$row = mysqli_fetch_assoc($result);
/*
* als je zeker weet dat je niet meer dan één record
* krijgt vervang je de while gewoon voor een if.
* Bovendien heeft een record update geen zin als die
* niet bestaat dus dan maar een foutmelding geven.
*/
if($row === FALSE)
{
throw new Exception('Geen record gevonden met id '.$id. ' in de tabel.');
exit;
}
/*
* Na alle PHP logica komt de output. Dat kunnen we buiten de PHP tags doen
* De <form> attributen stonden niet tussen double qoutes en dat hoort wel.
* De action hou ik gewoon op de pagina zelf. Waarom weggaan zolang niet alles goed is?
* Singleton elementen zoals input en img sluit je af met /> en niet alleen met een >
*/
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.labels {
float:left;
line-height: 25px;
width: 70px;
background-color: #CCC;
}
.form {
float:left;
line-height: 25px;
width: 70px;
margin-left:3px;
}
.clear {
clear:both;
}
</style>
</head>
<body>
<form action="" method="post"> <!-- waarom naar update.php? -->
<div class="labels">
<label for="id" >ID:</label><br>
<label for="regel1" >Regel 1:</label><br>
<label for="regel2" >Regel 2:</label><br>
<label for="prijs" >Prijs:</label>
</div>
<div class="form">
<input type="text" id="id" name="id" value="<?php echo $row['id']; ?>" /> <!-- singleton, dus /> -->
<input type="text" id="regel1" name="regel1" value="<?php echo $row['regel1']; ?>" />
<input type="text" id="regel2" name="regel2" value="<?php echo $row['regel2']; ?>" />
<input type="text" id="prijs" name="prijs" value="<?php echo $row['prijs']; ?>" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="submit" value="update" />
</div>
<div class="clear"></div>
</form>
</body>
</html>
* Singleton elementen zoals input en img sluit je af met /> en niet alleen met een > */
Is niet nodig. Het mag wel, zodat het gelijk is aan X(HT)ML, maar het is in HTML(5) niet nodig. Ook in andere versies (4 bijvoorbeeld) niet nodig.
Voor de rest: veel beter. Al is $id = $_GET['id'] niet echt handig. Wat als die niet bestaat? En het is nu nutteloos kopieren. Gooi er dan tenminste nog een intval() overheen.
Sorry voor de late reactie.
Heb alleen tegen het weekend tijd om te hobbye.
Ik heb zelf een oplossing gevonden.
Dit is het script:
<?php
error_reporting(E_ALL);
session_start();
require_once("info.php");
$db = mysqli_connect ($host, $user, $password) or die ("Kan geen verbinding maken met de database ");
mysqli_select_db($db, $dbnaam) or die ($fout);
// indien dit bestand in de POST methode wordt aangeroepen is het formulier verstuurd.
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// GEBRUIK GEEN mysql_ meer maar gebruik mysqli_ of PDO !!!
// update de record in de tabel
$regel1 = $_POST['regel1'];
$regel2 = $_POST['regel2'];
$prijs = $_POST['prijs'];
$id = $_POST['ID'];
$result = mysqli_query($db, "UPDATE tabel
SET
regel1 = '$regel1',
regel2 = '$regel2',
prijs = '$prijs'
WHERE
ID = '$id'");
if($result === FALSE)
throw new Exception('Update naar tabel mislukt.' . mysqli_error($db));
// optioneel voor een update is een redirect.
else
echo('Reclame Bijgewerkt!');
}
// query is het handigste tussen double quotes
$sql = "SELECT * FROM middelbeers WHERE ID=1";
$result = mysqli_query($db, $sql);
// gebruik mysql_fetch_assoc()! mysql_fetch_array() gebruikt dubbel zoveel geheugen.
$row = mysqli_fetch_assoc($result);
/*
* als je zeker weet dat je niet meer dan één record
* krijgt vervang je de while gewoon voor een if.
* Bovendien heeft een record update geen zin als die
* niet bestaat dus dan maar een foutmelding geven.
*/
if($row === FALSE)
{
throw new Exception('Geen record gevonden in de tabel.');
exit;
}
/*
* Na alle PHP logica komt de output. Dat kunnen we buiten de PHP tags doen
* De <form> attributen stonden niet tussen double qoutes en dat hoort wel.
* De action hou ik gewoon op de pagina zelf. Waarom weggaan zolang niet alles goed is?
* Singleton elementen zoals input en img sluit je af met /> en niet alleen met een >
*/
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.labels {
float:left;
line-height: 25px;
width: 70px;
background-color: #CCC;
}
.form {
float:left;
line-height: 25px;
width: 70px;
margin-left:3px;
}
.clear {
clear:both;
}
</style>
</head>
<body>
<form action="" method="post"> <!-- waarom naar update.php? -->
<div class="labels">
<label for="id" >ID:</label><br>
<label for="regel1" >Regel 1:</label><br>
<label for="regel2" >Regel 2:</label><br>
<label for="prijs" >Prijs:</label>
</div>
<div class="form">
<input type="text" id="ID" name="ID" value="<?php echo $row['ID']; ?>" /> <!-- singleton, dus /> -->
<input type="text" id="regel1" name="regel1" value="<?php echo $row['regel1']; ?>" />
<input type="text" id="regel2" name="regel2" value="<?php echo $row['regel2']; ?>" />
<input type="text" id="prijs" name="prijs" value="<?php echo $row['prijs']; ?>" />
<input type="hidden" name="ID" value="<?php echo $row['ID']; ?>" />
<input type="submit" value="update" />
</div>
<div class="clear"></div>
</form>
</body>
</html>
Wat is het voordeel van een mysqli_real_escape_string zoals in jullie voorbeeld gebruikt word?