Opslaan van gegevens van meerdere personen
Maar als ik de geboortedata invoer moet ik na elk persoon de gegevens opslaan, terwijl ik pas wil opslaan als ik achter een hele rij personen de data gezet heb.
Het lukt me maar niet dit te veranderen. De enige mogelijkheid die ik zie, is dat ik de namen van familieleden in de database bij de velden plaats. Maar dat is erg omslachtig.
Is het mogelijk de code zo te veranderen dat er pas opgeslagen hoeft te worden als er achter meerdere personen een datum staat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?
include ("db_connect.inc.php");
$query = "SELECT * FROM leeftijd"; // de SQL-query die wordt uitgevoerd
$resultaat = ""; // hierin wordt het resultaat van de query opgeslagen
$resultaat = mysql_query($query, $db);
mysql_close($db); // database afsluiten
while(list($leefid, $naam, $gebdatum) = mysql_fetch_row($resultaat)){
echo "<P>$naam <BR> geboortedatum: $gebdatum";
echo "<BR><a href=\"bewerk.php?id=$id\">Invoeren</a><br>";
}
?>
include ("db_connect.inc.php");
$query = "SELECT * FROM leeftijd"; // de SQL-query die wordt uitgevoerd
$resultaat = ""; // hierin wordt het resultaat van de query opgeslagen
$resultaat = mysql_query($query, $db);
mysql_close($db); // database afsluiten
while(list($leefid, $naam, $gebdatum) = mysql_fetch_row($resultaat)){
echo "<P>$naam <BR> geboortedatum: $gebdatum";
echo "<BR><a href=\"bewerk.php?id=$id\">Invoeren</a><br>";
}
?>
BEWERK.PHP
Code (php)
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
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
<?php
include ("db_connect.inc.php");
if (isset($_POST["bevestiging"])){
$query = "UPDATE leeftijd SET
naam= '". $_POST["naam"] ."',
gebdatum = '". $_POST["gebdatum"] . "',
WHERE leefid='" .$_POST["id"] ."'";
mysql_query($query);
echo "De volgende opdracht is uitgevoerd: <b>$query</b><br><hr>\n";
echo "Record nummer " .$_POST["id"] . " is bijgewerkt<br>\n";
echo "<a href=\"overzicht.php\">Terug naar het overzicht</a>";
}
else{
$query="SELECT * FROM leeftijd WHERE leefid='". $_GET["id"] ."'";
$resultaat = mysql_query($query);
while (list($leefid, $naam, $gebdatum) = mysql_fetch_row($resultaat)){
$nm=$naam;
$gb=$gebdatum;
}
?>
<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<?php echo $_GET["id"];?>">
Naam:<input type="text" name="naam"
value="<?php echo $nm;?>" size="20"><br>
geboortedatum: <input type="text" name="gebdatum"
value="<?php echo $gb;?>" size="8"><br>
<hr>
<input type="Submit" value="Gegevens bijwerken">
<input type="Button" value="Terug" onclick="javascript:history.go(-1);">
</form>
<?php
}// else-blok afsluiten
?>
include ("db_connect.inc.php");
if (isset($_POST["bevestiging"])){
$query = "UPDATE leeftijd SET
naam= '". $_POST["naam"] ."',
gebdatum = '". $_POST["gebdatum"] . "',
WHERE leefid='" .$_POST["id"] ."'";
mysql_query($query);
echo "De volgende opdracht is uitgevoerd: <b>$query</b><br><hr>\n";
echo "Record nummer " .$_POST["id"] . " is bijgewerkt<br>\n";
echo "<a href=\"overzicht.php\">Terug naar het overzicht</a>";
}
else{
$query="SELECT * FROM leeftijd WHERE leefid='". $_GET["id"] ."'";
$resultaat = mysql_query($query);
while (list($leefid, $naam, $gebdatum) = mysql_fetch_row($resultaat)){
$nm=$naam;
$gb=$gebdatum;
}
?>
<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<?php echo $_GET["id"];?>">
Naam:<input type="text" name="naam"
value="<?php echo $nm;?>" size="20"><br>
geboortedatum: <input type="text" name="gebdatum"
value="<?php echo $gb;?>" size="8"><br>
<hr>
<input type="Submit" value="Gegevens bijwerken">
<input type="Button" value="Terug" onclick="javascript:history.go(-1);">
</form>
<?php
}// else-blok afsluiten
?>
Gewijzigd op 09/07/2010 14:55:52 door Chris -
Gebruik mysql_real_escape_string:
Code (php)
1
2
3
4
2
3
4
$query = "UPDATE leeftijd SET
naam= '". mysql_real_escape_string($_POST["naam"]) ."',
gebdatum = '". mysql_real_escape_string($_POST["gebdatum"]) . "',
WHERE leefid='" .mysql_real_escape_string($_POST["id"]) ."'";
naam= '". mysql_real_escape_string($_POST["naam"]) ."',
gebdatum = '". mysql_real_escape_string($_POST["gebdatum"]) . "',
WHERE leefid='" .mysql_real_escape_string($_POST["id"]) ."'";
Invoer controle:
$_POST['id'] mag alleen maar cijfers bevatten, dus:
$_POST['gebdatum'] mag alleen maar een bepaald formaat zijn, bijvoorbeeld dd-mm-yyyy.
Code (php)
1
2
2
if(preg_match('/^\d{2}-\d{2}-\d{4}$/', $_POST['gebdatum']) $datum = $_POST['gebdatum'];
else echo 'datum is niet ok';
else echo 'datum is niet ok';
XSS krijg je als id, datum of naam niet goed is gevalideerd.
Je zou met sessies kunnen werken voordat je wijzigingen doorbrengt.
Toch is het wel vreemd, dat de query toch goed werkt. Waarschijnlijk accepteert PHP veel fouten.
Heb je ook een idee hoe ik het kan voorkomen dat ik na ieder persoon de gegevens moet opslaan? Hierover pieker ik me suf.
UPDATE leeftijd SET
naam= '". mysql_real_escape_string($_POST["naam"]) ."',
gebdatum = '". mysql_real_escape_string($_POST["gebdatum"]) . "',
WHERE leefid='" .mysql_real_escape_string($_POST["id"]) ."'";
Houdt deze wijziging verband met een ander gegeven dat ik nog moet vervangen?
Voor de oplossing van het probleem met de meerdere personen waar je in 1 keer alle gegevens achter kunt zetten, denk ik aan het toevoegen van een knop aan een session-variabele.
Dat moet met de volgende code kunnen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
/*
Session starten.
*/
session_start();
/*
Zet de waarde in de variabele.
*/
$log = "Dit is de waarde die ik wil meegeven";
/*
Registreer de session
*/
session_register("log");
?>
/*
Session starten.
*/
session_start();
/*
Zet de waarde in de variabele.
*/
$log = "Dit is de waarde die ik wil meegeven";
/*
Registreer de session
*/
session_register("log");
?>
Zit ik hiermee in de goede richting of kan ik deze weg beter niet inslaan?
Gewijzigd op 08/07/2010 09:45:27 door Bas Bouman
opmerking 1:
De int heb ik voor de controle van de id gebruikt. Dat gaat goed. Dank je wel.
opmerking 2:
Maar op welke manieren ik het ook probeer. Het lukt met niet of
mysql_real_escape_string
te gebruiken.Moet ik nog iets meer veranderen om mysql_real_escape_string
goed te laten werken?
opmerking 3:
De datum leverde bij mij geen fouten op, omdat ik de datum gewoon in een tekstvak getypt hebt. Nu ga ik dit veranderen. Maar waar moet de if-constructie die je me voor gebdatum gegeven hebt, in de code plaatsen. Ik neem aan dat deze onder
mysql_query($query);
komt, maar dan krijg ik een foutmelding.
opmerking 4:
Is het mogelijk om voor
<input type="Submit" value="Gegevens bijwerken">
een regel te plaatsen die niet 1 persoon laat zien, maar alle personen die in de database staan?
Je geeft wel aan dat je foutmeldingen krijgt, maar niet welke foutmeldingen.
Eigenlijk is het geen echte foutmelding. Ik krijg alleen een wit scherm.
Gewijzigd op 09/07/2010 13:07:29 door - SanThe -
UPDATE leeftijd SET
naam= '". mysql_real_escape_string($_POST["naam"]) ."',
gebdatum = '". mysql_real_escape_string($_POST["gebdatum"]) . "',
WHERE leefid='" .mysql_real_escape_string($_POST["id"]) ."'";
Ik heb nog even gedacht dat er geen spatie hoorde voor de punt na leefid='" , maar dat is het niet.
De volgende code werkt wel. Maar dan gebruik ik de mysql_real_escape_string niet.
$query = "UPDATE leeftijd SET
naam= '". $_POST["naam"] ."',
gebdatum = '". $_POST["gebdatum"] . "'
WHERE leefid='" .$_POST["id"] ."'";
Maar ik krijg nog een wit scherm.
Ik weet niet wat je bedoelt met error_reporting(E_ALL). Hoe kan ik dat aanzetten?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
De code staat bovenaan.
Maar waar krijg ik dan de foutmeldingen te zien?
Gewijzigd op 09/07/2010 14:47:11 door - SanThe -
Hoe kan ik bij de logfiles komen?
Hosting: Dan kan je er waarschijnlijk niet bij.
LAMPP: /opt/lampp/logs/error_log
Apache 2.x: /usr/local/apache2/logs/error_log
Tja, ik zit bij hosting.
Gewijzigd op 11/07/2010 15:29:43 door Bas Bouman