正确的ID不存储在会话php

时间:2015-10-08 10:28:11

标签: php session

我正在尝试创建一个人们可以做出反应的空缺页面。

我正在从动态操作页面加载空缺数据。我想存储我在会话中选择的职位空缺的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>

1 个答案:

答案 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数据。