我正在尝试创建一个人们可以做出反应的空缺页面。
我正在从动态操作页面加载空缺数据。我想存储我在会话中选择的职位空缺的ID,以便我可以在页面上使用它进行反应。我想这样做是因为我需要通过合适的空缺来做出正确的反应。
但我的问题是我创建的会话总是从我的数据库中获取空缺id 18,而不是我选择的空位中的id。
用于加载空缺动态的PHP代码:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<?php
//include '../loginHandlerconnect.php';
//include('php/loginHandlerconnect.php');
//$db = loginHandlerconnect();
$sql = 'SELECT * FROM vacature ORDER BY datum DESC';
$results = $db->query($sql);
foreach($results as $row)
{
$id = $row['vacatureID'];
$werkgeverid = $row['werkgeverID'];
$functie = $row['functie'];
$vacatureDatum = $row['datum'];
$vacatureDatum = date("d-m-Y", strtotime($vacatureDatum)); // $vacatureDatum omdraaien van Y-m-d naar d-m-Y
$omschrijvingkort = $row['omschrijvingKort'];
$omschrijving = $row['omschrijving'];
$_SESSION[$id]['vvacatureid'] = $id;
$_SESSION[$id]['vwerkgeverid'] = $werkgeverid;
$_SESSION[$id]['vfunctie'] = $functie;
$_SESSION[$id]['vdatum'] = $vacatureDatum;
$_SESSION[$id]['vomschrijvingkort'] = $omschrijvingkort;
$sql = 'SELECT * FROM werkgever WHERE werkgeverID = '. $werkgeverid .' LIMIT 1';
$results = $db->query($sql);
foreach($results as $row)
{
$bedrijfimage = $row['image'];
$bedrijfnaam = $row['naamBedrijf'];
$plaats = $row['plaats'];
$provincie = $row['provincie'];
$_SESSION['vomschrijving'] = $omschrijving;
$_SESSION['vimage'] = $bedrijfimage;
$_SESSION['vnaambedrijf'] = $bedrijfnaam;
$_SESSION['vplaats'] = $plaats;
$_SESSION['vprovincie'] = $provincie;
}
//$string = strip_tags($string);
if (strlen($functie) > 20) {
// truncate string
$stringCut = substr($functie, 0, 20);
// make sure it ends in a word so assassinate doesn't become ass...
$functie = substr($stringCut, 0, strrpos($stringCut, ' ')).'...';
}
if (strlen($bedrijfnaam) > 25) {
// truncate string
$stringCut2 = substr($bedrijfnaam, 0, 14);
// make sure it ends in a word so assassinate doesn't become ass...
$bedrijfnaam = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...';
}
if (strlen($omschrijvingkort) > 63) {
// truncate string
$stringCut2 = substr($omschrijvingkort, 0, 63);
// make sure it ends in a word so assassinate doesn't become ass...
$omschrijvingkort = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...';
}
echo
"
<div class='vacatureinfo2'>
<img class='userimg2' src='../../uploads/userimage/". $bedrijfimage ."' id='imge'/>
<p class='func-br-pl pull-left'>". $functie ." - ". $bedrijfnaam ." - ". $plaats ."</p><p class='dtm pull-right'>". $vacatureDatum ."</p>
<div class='omschrijvingkort2'>
". $omschrijvingkort ."
</div>
<p class='pull-right'><a href='reactie?id=" . $id . "'>Reageer</a> | <a href='informatie-vacature'>Meer informatie</a></p>
</div>
<hr>
";
}
//echo "<div id='weergavebericht'></div>";
?>
反应的PHP代码:
<?php
session_start();
/*
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
*/
include("loginHandlerconnect.php");
// variables voor datum/tijd en werkgeverID aanmaken zodat deze in de sql query meegenomen kunnen worden.
date_default_timezone_set("Europe/Amsterdam"); //tijdzone voor goede tijdsweergave
$datum = date("d-m-Y");
$tijd = date("h:i:s");
$id = $_SESSION['werknemerid'];
$vid = $_SESSION[$_GET['id']]['vvacatureid'];
$functie = $_SESSION[$_GET['id']]['vfunctie'];
$omschrijving = $_SESSION[$_GET['id']]['vomschrijving'];
// functie om te kijken of de variabelen niet leeg zijn.
function checkEmpty($datum, $id, $vid, $functie, $omschrijving, $tijd)
{
$datumcheck = $datum;
$tijdcheck = $tijd;
$werknemercheck = $id;
$vacaturecheck = $vid;
$functiecheck = $functie;
$omschrijvingcheck = $omschrijving;
$motivatiecheck = $_POST['motivatie'];
if (empty($datumcheck) || empty($tijdcheck) || empty($werknemercheck) || empty($vacaturecheck) || empty($functiecheck) || empty($omschrijvingcheck) || empty($motivatiecheck))
{
echo "empty box";
return 2;
}
}
checkEmpty($datum, $id, $vid, $functie, $omschrijving, $tijd);
// functie om data naar database te schrijven.
function loginHandlerEstab ($datum, $id, $vid, $tijd)
{
$db = loginHandlerconnect();
$werknemerid = $db->quote($id);
$vacatureid = $db->quote($vid);
$date = $db->quote(date('Y-m-d', strtotime($datum)));
$time = $db->quote(date('h:i:s', strtotime($tijd)));
$motivatie = $db->quote($_POST['motivatie']);
$sql2 = 'INSERT INTO reactie(werknemerID, vacatureID, datum, tijd, motivatie) VALUES(' . $werknemerid . ', ' . $vacatureid . ', '. $date .', '. $time .', ' . $motivatie . ')';
//$sql2 = 'INSERT INTO vacature(werkgeverID, datum, functie, omschrijvingKort, omschrijving, isActief) VALUES(1, 'DATE()', 'beveiliger', 'beveiliger gezocht', 'beveiliger gezocht voor in de avonden', 1)';
$db->exec($sql2);
$_SESSION['motivatie'] = $_POST['motivatie'];
//header('Location: ../geplaatst');
echo $sql2;
var_dump($_SESSION[$_GET['id']]['vvacatureid']);
var_dump($_SESSION[$_GET['id']]['vfunctie']);
var_dump($_SESSION[$_GET['id']]['vomschrijving']);
}
loginHandlerEstab($datum, $id, $vid, $tijd);
// als er een veld lee is gelaten wordt de error message emptybox opgeroepen.
if (checkEmpty($datum, $id, $vid, $functie, $omschrijving, $tijd) == 2)
{
//header('Location: ../reactie?error=emptybox');
}
?>
有人知道如何解决我的问题吗?
更新:
反应形式:
<?php include("includes/header.php");
session_start();
if ($_SESSION['werknemerid'] == true){
if (isset($_GET['error'])){
if ($_GET['error'] == "emptybox"){
echo "<script>alert('U heeft iets niet ingevuld, kunt u dit even nakijken?');</script>";
}
}
include("php/loginHandlerconnect.php");
date_default_timezone_set("Europe/Amsterdam");
?>
<div class="page-header">
<div>
<h1>Reactie plaatsen</h1>
</div>
</div>
<div class="container">
<div class="wrap6">
<form class="form-horizontal" role="form" method="POST" action="php/reactiewerknemer.php">
<div class="col-sm-8">
<?php
var_dump($_SESSION[$_GET['id']]['vvacatureid']);
var_dump($_SESSION[$_GET['id']]['vfunctie']);
var_dump($_SESSION[$_GET['id']]['vomschrijving']);
?>
<div class="form-group">
<label for="datum">Datum van plaatsing</label>
<p><?php echo date("d-m-Y h:i:s"); echo " " . $_SESSION[$_GET['id']]['v']; ?></p>
</div>
<div class="form-group">
<label for="datum">Functie</label>
<p><?php echo $_SESSION[$_GET['id']]['vfunctie']; ?></p>
</div>
<div class="form-group">
<label for="datum">Omschrijving</label>
<p><?php echo $_SESSION[$_GET['id']]['vomschrijving']; ?></p>
</div>
<div class="form-group">
<label for="motivatie">Motivatie</label>
<textarea class="form-control ckeditor" type="text" name="motivatie" id="motivatie" rows="5" value="<?php echo (isset($_POST['motivatie']) ? $_POST['motivatie'] : ""); ?>"required><?php echo (isset($_POST['motivatie']) ? $_POST['motivatie'] : ""); ?></textarea>
</div>
<br><br>
<div class="form-group">
<button class="btn btn-default pull-right" type="submit" name="plaats" id="plaats">Plaats reactie</button>
</div>
</div>
</form>
</div>
</div>
<?php include("includes/footer.php");
}
else{
header('Location: ../loginerror');
}?>
<script>
window.onload = function() {
CKEDITOR.instances.motivatie.on( 'key', function() {
var str = CKEDITOR.instances.motivatie.getData();
if (str.length > 493) {
CKEDITOR.instances.motivatie.setData(str.substring(0, 993));
}
} );
};
</script>
答案 0 :(得分:1)
您的代码存在很多问题,我不知道这是学校项目还是真正的业务,但我建议您重写代码。最好看看面向对象的编码或者至少将你所有的工作分成不同的功能。
话虽如此,有些提示:
看起来你首先从数据库获取所有的vacature,然后在每条记录中添加正确的werkgever。 这可以在一个查询中轻松完成,从而节省了大量的预算:
SELECT vacatures.*, werkgever.image,werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacatures LEFT JOIN werkgever ON (werkgever.werkgeverID = vacatures.werkgeverID)
现在你有所有的公司详细信息。
$_SESSION[$id]['vvacatureid'] = $id;
在你创建的foreach循环之外,因此它将始终包含该foreach循环的最后结果。
我稍后会为您添加一些重写。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<?php
include('php/loginHandlerconnect.php');
$db = loginHandlerconnect();
$sql = 'SELECT vacatures.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacatures LEFT JOIN werkgever ON (vacatures.werkgeverID = werkgever.werkgeverID)';
$results = $db->query($sql);
/*
* Nu hebben we een resultset met de volgende data per row
* vacatureID
* werkgeverID
* functie
* datum
* omschrijvingKort
* omschrijving
* image (werkgever)
* plaats (werkgever)
* provincie (werkgever)
* naamBedrijf (werkgever)
*/
foreach($results as $row)
{
//Clean record
cleanRecord($row);
echo generateDiv($row);
}
//echo "<div id='weergavebericht'></div>";
/**
* Not a fan of this function, but I´m not going to rewrite these, for now it will work for you
**/
function cleanRecord($row)
{
if (strlen($row['functie']) > 20) {
// truncate string
$stringCut = substr($row['functie'], 0, 20);
// make sure it ends in a word so assassinate doesn't become ass...
$row['functie'] = substr($stringCut, 0, strrpos($stringCut, ' ')).'...';
}
if (strlen($row['naamBedrijf']) > 25) {
// truncate string
$stringCut2 = substr($row['naamBedrijf'], 0, 14);
// make sure it ends in a word so assassinate doesn't become ass...
$row['naamBedrijf'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...';
}
if (strlen($row['omschrijvingKort']) > 63) {
// truncate string
$stringCut2 = substr($row['omschrijvingKort'], 0, 63);
// make sure it ends in a word so assassinate doesn't become ass...
$row['omschrijvingKort'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...';
}
return $row;
}
function generateDiv($row)
{
$date = date("d-m-Y", strtotime($row['datum']));
return "
<div class='vacatureinfo2'>
<img class='userimg2' src='../../uploads/userimage/". $row['image'] ."' id='imge'/>
<p class='func-br-pl pull-left'>". $row['functie'] ." - ". $row['naamBedrijf'] ." - ". $row['plaats'] ."</p><p class='dtm pull-right'>". $data ."</p>
<div class='omschrijvingkort2'>
". $row['omschrijvingKort'] ."
</div>
<p class='pull-right'><a href='reactie?id=" . $row['vacatureID'] . "'>Reageer</a> | <a href='informatie-vacature'>Meer informatie</a></p>
</div>
<hr>
";
}
?>
您不需要将所有变量都设置到SESSION中,您可以在下一页上获取id,并且可以再次运行查询以加载正确的vacature数据。