Zelf Post Genereren
Iets specifieker: ik heb op een pagina een formulier met naam en omschrijving. Kan ik in plaats van een gewone submit knop ook zelf eerst een object gaan opvullen en dat object doorgeven? Anders moet ik op de volgende pagina eerst alle attributen van dat object via $_POST gaan ophalen.
Wat wil je er zelf van maken dan?
Ik denk dat jij iets als $_SESSION zoekt ?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$bericht=$_POST['input1'] . $_POST['input2'] . $_POST['input3'];
echo $bericht;
?>
$bericht=$_POST['input1'] . $_POST['input2'] . $_POST['input3'];
echo $bericht;
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<form name="myForm">
naam: <input type="text" name="naam" id="naam"/><br />
omschrijving: <input type="text" name="omschrijving" id="omschrijving" /><br />
<input type="submit" value"verstuur />
</form>
<?
$object->naam = $_POST["naam"];
$object->omschrijving = $_POST["omschrijving"];
submit($object,"paginaVerwerk.php");
?>
naam: <input type="text" name="naam" id="naam"/><br />
omschrijving: <input type="text" name="omschrijving" id="omschrijving" /><br />
<input type="submit" value"verstuur />
</form>
<?
$object->naam = $_POST["naam"];
$object->omschrijving = $_POST["omschrijving"];
submit($object,"paginaVerwerk.php");
?>
Is er een manier om dat te doen? van het laatste stuk code ben ik zeker dat het zo niet werkt, maar is er een manier om dit te doen?
De functie "submit" die ik hier gebruik in mijn php code bestaat niet, maar is er een functie die een object naar een opgegeven pagina kan doorsturen?
Je zou de waardes uit je object kunnen echoen als hidden input velden.
Ik wil een verwerk pagina maken. Ik weet dat ik via de functie "get_object_vars" en "get_class" verschillende verwerk pagina's kan samenvoegen in een verwerk pagina. Maar dan moet ik een object doorsturen in plaats van $_POST[] oplossingen.
er moet iig wel een method bij, method="POST", en wat wil je met die gegevens doen, in een database zetten, versturen in een mail, printen op het scherm,? zou handig zijn als je wat meer uitleg gaf.
Ik wil de verwerk pagina's vervangen door 1 verwerk.php. Omdat de 3 verwerk pagina's hard op elkaar gelijken, denk ik dat ik de verwerkpagina's kan samenvoegen en er een grote verwerkpagina van de maken. Om dit te doen, moet ik met objecten werken. Dit doe ik al, maar object Jobbeurs bij de pagina's met jobeurs erin. Als ik mijn gegevens kan doorsturen in een object, ipv met een formulier en de submit ervan, dan kan ik dat object ineens gebruiken op de verwerk pagina.
Hoe kan ik een object van de ene naar de andere pagina sturen?
www.php.net/header (daar ff rondkjiken?).
Ik snap je probleem, alleen ik weet de oplossing niet voor je, sorry.
dat moet als ik het geod heb via headers, maar ik weet niet of je post-headers kan zetten in php... Ik snap je probleem, alleen ik weet de oplossing niet voor je, sorry.
Code (php)
Bedankt voor het meedenken. :)
EDIT: weet iemand of je dynamisch twee objecten met elkaar kunt vergelijken? De objecten zijn twee instanties van een classe. Iets als
Code (php)
1
2
3
4
2
3
4
$class_vars = get_vars($object);
foreach($class_vars as $waarde){
$object->$waarde = $object2->$waarde;
}
foreach($class_vars as $waarde){
$object->$waarde = $object2->$waarde;
}
Gewijzigd op 01/01/1970 01:00:00 door Armaron
Code (php)
Edit:
Zie ook het PHP manual, voor het verschil tussen == en ===
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if($object->$waarde == $object2->$waarde) {
$object2->$waarde = $object->$waarde;
}
?>
if($object->$waarde == $object2->$waarde) {
$object2->$waarde = $object->$waarde;
}
?>
is niet alleen fout, maar ook onzinnig. Wat je zegt is eigenlijk: als een waarde van object gelijk is aan diezelfde waarde uit object2, kopieer de waarde van object dan naar object2. Een overbodige handeling.
Verder is het niet $object->$waarde, maar $object->waarde.
Edit:
Misschien kun je even een voorbeeld uit de praktijk geven? Dus twee objecten met ingevulde waarden, en wat het dan moet opleveren.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<? function sanitizeObject($object){
$class_vars = get_object_vars($object);
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
return $object;
} ?>
$class_vars = get_object_vars($object);
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
return $object;
} ?>
Edit - Sorry van dat eerste voorbeeldje, de vergelijking moet != zijn.
Gewijzigd op 01/01/1970 01:00:00 door Armaron
Bovendien lijkt me dit geen voorbeeld van het vergelijken van twee objecten volgens bepaalde condities. Je schreef net:
Quote:
Als er een attribuut van $object niet is ingesteld, dan moet dit niet overgenomen worden door $object2.
Misschien kun je dat nog verduidelijken?
Wat ik zoek: een methode om dynamisch de attributen van een object te kunnen overlopen, zonder dat ik weet welk object het is. Daar komt
Code (php)
1
2
3
4
5
2
3
4
5
<?
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
?>
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
?>
van pas. Zo kan ik dynamisch een object overlopen.
Code van Sanitizer::sanitize($value). Dit is de code van de hele classe Sanitizer, met dank aan mijn maat, dit is zijn code (of deze heeft hij ergens gevonden).
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
class Sanitizer{
function sanitize($string){
$string = mysql_real_escape_string($string);
return $string;
}
function sanitizeAlphaNumeric($string){
$string = preg_replace("/[^A-Za-z0-9]/", '', $string);
return $string;
}
function sanitizeObject($object){
$class_vars = get_object_vars($object);
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
return $object;
}
}
?>
class Sanitizer{
function sanitize($string){
$string = mysql_real_escape_string($string);
return $string;
}
function sanitizeAlphaNumeric($string){
$string = preg_replace("/[^A-Za-z0-9]/", '', $string);
return $string;
}
function sanitizeObject($object){
$class_vars = get_object_vars($object);
foreach ($class_vars as $name => $value) {
$object->$name = Sanitizer::sanitize($value);
}
return $object;
}
}
?>
Ik hoop dat ik mijn oplossing heb gevonden, ik hoop dat ik jullie hiermee ook heb verdergeholpen als iemand dit zoekt. :)
Gewijzigd op 01/01/1970 01:00:00 door Armaron
Vereisten: alle attributen van het op te vullen object moeten worden meegegeven, dus ook de ID van velden die misschien niet getoond moeten worden. VERGEET DIT NIET, anders werken de update en delete statements niet goed in de volgende pagina.
Er moet een veld meegegeven worden met de naam "identificatie" en hierin staat de naam van je object.
Er is ook een methode hoe je het verschil tussen een create, update en delete statement maakt. Als je een create of update wil meegeven, dan moet de waarde van de submit knop gelijk zijn aan "Sla gegevens op", je moet in een $_GET[] ook de ID van de te updaten record meegeven. Als je dit niet doet, doe je een create. Een delete doe je door de submit knop de waarde "Verwijder record" mee te geven.
Pagina 1: objectPage.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
38
39
40
41
42
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
<?
session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/DataObjects.php");
// hiermee ga je na welk soort object je nodig hebt
switch($_POST["identificatie"]){
case "Vacature":
$object = new Vacature;
break;
case "Functie":
$object = new Functie;
break;
case "Jobbeurs":
$object = new Jobbeurs;
break;
case "Bedrijf":
$object = new Bedrijf;
break;
case "Alumnus":
$object = new Alumnus;
break;
}
// hier haal je alle attributen van het object op
$class_var = get_object_vars($object);
// als je alle attributen hebt, ga je die opvullen
// LET OP! alle attributen moeten ingevuld worden, lege attributen kunnen fouten veroorzaken
foreach($class_var as $key => $value){
$object->$key = $_POST[$key];
}
// zo kan je een object naar een volgende pagina meegeven
$_SESSION["object"] = serialize($object);
// niet vergeten om de knop waarde mee te geven
// dit bepaald mee of je een create / update of een delte doet
$_SESSION["submit"] = $_POST["submit"];
// de verwijzing naar de eigenlijke verwerk pagina
// de $_GET["id"] bepaalt of het een create of update record wordt
// gewoon leeglaten is een create, anders is het een update
// tenzij de knop een delete inhoud
header("Location: verwerk.php?id=" . $_GET["id"]);
?>
session_start();
require_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/DataObjects.php");
// hiermee ga je na welk soort object je nodig hebt
switch($_POST["identificatie"]){
case "Vacature":
$object = new Vacature;
break;
case "Functie":
$object = new Functie;
break;
case "Jobbeurs":
$object = new Jobbeurs;
break;
case "Bedrijf":
$object = new Bedrijf;
break;
case "Alumnus":
$object = new Alumnus;
break;
}
// hier haal je alle attributen van het object op
$class_var = get_object_vars($object);
// als je alle attributen hebt, ga je die opvullen
// LET OP! alle attributen moeten ingevuld worden, lege attributen kunnen fouten veroorzaken
foreach($class_var as $key => $value){
$object->$key = $_POST[$key];
}
// zo kan je een object naar een volgende pagina meegeven
$_SESSION["object"] = serialize($object);
// niet vergeten om de knop waarde mee te geven
// dit bepaald mee of je een create / update of een delte doet
$_SESSION["submit"] = $_POST["submit"];
// de verwijzing naar de eigenlijke verwerk pagina
// de $_GET["id"] bepaalt of het een create of update record wordt
// gewoon leeglaten is een create, anders is het een update
// tenzij de knop een delete inhoud
header("Location: verwerk.php?id=" . $_GET["id"]);
?>
Pagina 2: verwerk.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
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
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
<?php
session_start();
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/DAclasses.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/Utility.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/config.php");
// hier wordt het object terug in elkaar gepuzzeld
$object = unserialize($_SESSION["object"]);
// deze staat in de post hierboven vermeld
Sanitizer::sanitizeObject($object);
$class = get_class($object);
// de locatie waarna je wil gaan doorlinken als je commando gelukt is
$locatie = "Location: Bedrijf/" . strtolower($class) . "Bekijken.php";
// hierin leg ik de verbinding met de database
// afhankelijk van de klasse is er een andere type verbinding nodig
switch($class){
case "Vacature":
$cnnObject = new DAVacature($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Functie":
$cnnObject = new DAFunctie($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Jobbeurs":
$cnnObject = new DAJobbeurs($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Bedrijf":
$cnnObject = new DABedrijf($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$locatie = "Location: Bedrijf/bedrijfProfiel.php";
break;
case "Alumnus":
$cnnObject = new DAAlumnus($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$locatie = "Location: Alumnus/alumnusProfiel.php";
break;
}
// hierin komt de create of update statement
if($_SESSION["submit"] == "Sla gegevens op"){
if(!empty($_GET["id"])){
if($class == "Bedrijf"){
$bestaand = $cnnObject->retrieveByEmail($_GET["id"]);
}else{
$bestaand = $cnnObject->retrieve($_GET["id"]);
}
$klasse_var = get_object_vars($object);
foreach($klasse_var as $key => $waarde){
if($bestaand->$key != $object->$key){
$bestaand->$key = $waarde;
}
}
$object = $bestaand;
}else{
$cnnBedrijf = new DABedrijf($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$bedrijf = $cnnBedrijf->retrieveByEmail($_SESSION["ID"]);
$object->bedrijfID = $bedrijf->bedrijfID;
}
if(!empty($_GET["id"])){
if($cnnObject->update($object)){
echo "update true ";
header($locatie);
}else{
echo "false";
}
}else{
if($cnnObject->create($object)){
echo "create true ";
header($locatie);
}else{
echo "false";
}
}
// hier komt de opdracht als je een record wilt verwijderen
}elseif($_SESSION["submit"] == "Verwijder record"){
if($cnnObject->delete($object)){
echo "delete true ";
header($locatie);
}else{
echo "false";
}
}
?>
session_start();
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/DAclasses.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/Utility.php");
include_once($_SERVER['DOCUMENT_ROOT'] . "Alumni/include/config.php");
// hier wordt het object terug in elkaar gepuzzeld
$object = unserialize($_SESSION["object"]);
// deze staat in de post hierboven vermeld
Sanitizer::sanitizeObject($object);
$class = get_class($object);
// de locatie waarna je wil gaan doorlinken als je commando gelukt is
$locatie = "Location: Bedrijf/" . strtolower($class) . "Bekijken.php";
// hierin leg ik de verbinding met de database
// afhankelijk van de klasse is er een andere type verbinding nodig
switch($class){
case "Vacature":
$cnnObject = new DAVacature($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Functie":
$cnnObject = new DAFunctie($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Jobbeurs":
$cnnObject = new DAJobbeurs($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
break;
case "Bedrijf":
$cnnObject = new DABedrijf($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$locatie = "Location: Bedrijf/bedrijfProfiel.php";
break;
case "Alumnus":
$cnnObject = new DAAlumnus($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$locatie = "Location: Alumnus/alumnusProfiel.php";
break;
}
// hierin komt de create of update statement
if($_SESSION["submit"] == "Sla gegevens op"){
if(!empty($_GET["id"])){
if($class == "Bedrijf"){
$bestaand = $cnnObject->retrieveByEmail($_GET["id"]);
}else{
$bestaand = $cnnObject->retrieve($_GET["id"]);
}
$klasse_var = get_object_vars($object);
foreach($klasse_var as $key => $waarde){
if($bestaand->$key != $object->$key){
$bestaand->$key = $waarde;
}
}
$object = $bestaand;
}else{
$cnnBedrijf = new DABedrijf($GLOBALS["url"], $GLOBALS["login"], $GLOBALS["password"], $GLOBALS["database"]);
$bedrijf = $cnnBedrijf->retrieveByEmail($_SESSION["ID"]);
$object->bedrijfID = $bedrijf->bedrijfID;
}
if(!empty($_GET["id"])){
if($cnnObject->update($object)){
echo "update true ";
header($locatie);
}else{
echo "false";
}
}else{
if($cnnObject->create($object)){
echo "create true ";
header($locatie);
}else{
echo "false";
}
}
// hier komt de opdracht als je een record wilt verwijderen
}elseif($_SESSION["submit"] == "Verwijder record"){
if($cnnObject->delete($object)){
echo "delete true ";
header($locatie);
}else{
echo "false";
}
}
?>
Omdat de create, update en delee statements ook gegenereerd zijn, ga ik die hier niet uitleggen. Mijn maat heeft die geschreven en ik wil eerst zijn toestemming of ik zijn code openbaar mag maken. Ze zijn op dezelfde manier opgebouwd als mijn verwerk pagina. Als iemand mee uitleg wil, laat hier dan een bericht achter en ik zal zien of ik die code mag delen.
Het zijn maar gewone update statements, dus als je voor elk object een create, update en delete statement schrijft, kom je er met deze code ook. Gewoon zien dat je alle namen goed aanpast.