Gå til innhold

session detaljer overskrevet når jeg skriver til database


Anbefalte innlegg

Hei, igjen! :)

Jeg og en kompis lager ett system i PHP og MYSQL og har ett merkelig problem.

 

Når man logger seg på er session arrayet slik:

Array ( [user_id] => 7 [username] => oleerik [crew] => 0 [rank] => 0 ) 

 

Men, etter å ha opprettet nytt medlem, opprettet ny oppgave, eller meldt seg inn i en oppgave(altså, skriver til databasen) ser session arrayet slik ut:

Array ( [user_id] => 7 [username] => Array ( [0] => oleerik [username] => oleerik ) [crew] => 0 [rank] => 0 ) 

 

Har noen peiling på hvorfor dette skjer? Hva er løsningen?

 

Si i fra om dere trenger mer informasjon eller filer. Her er en fil som skriver til databasen når man klikker på utvalgte linker:

 

<?php require_once("includes/connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/session.php"); ?>
<?php require_once("includes/constants.php"); ?>
<?php 
   confirm_logged_in();
?>
<?php
   if(isset($_GET['id']) && isset($_GET['place']) && !isset($_GET['del'])){

       $id2 = mysql_prep($_GET['id']);
       $place = mysql_prep($_GET['place']);

       $query = "UPDATE  `datafor_crew`.`assignments`  SET  ";
       switch ($place){
           case 0:
               $query .= "`leader`  =  ";
               break;
           case 1:
               $query .= "`user1`  =  ";
               break;
           case 2:
               $query .= "`user2`  =  ";
               break;
       }
       $query .= "'{$_SESSION['user_id']}'";
       $query .= " WHERE  `assignments`.`id`  ={$id2}";
       $result = mysql_query($query);
       confirm_query($result);
   } elseif (isset($_GET['id']) && isset($_GET['place']) && isset($_GET['del'])) {

       $id2 = mysql_prep($_GET['id']);
       $place = mysql_prep($_GET['place']);

       $query = "UPDATE  `datafor_crew`.`assignments`  SET  ";
       switch ($place){
           case 0:
               $query .= "`leader`  =  ";
               break;
           case 1:
               $query .= "`user1`  =  ";
               break;
           case 2:
               $query .= "`user2`  =  ";
               break;
       }
       $query .= "'0'";
       $query .= " WHERE  `assignments`.`id`  ={$id2}";
       $result = mysql_query($query);
       confirm_query($result);
   }
?>
<?php
   $query = "SELECT * FROM assignments WHERE 'crew' = {$_SESSION['crew']}";
   $result_set = mysql_query($query);
   confirm_query($result_set);
   $result_array = mysql_fetch_assoc($result_set);
?>
<?php include_once ("includes/header.php"); ?>
<?php
   meny();
?>
<div class="content">
<h1>Oppgaver</h1>
<table class="assignments" border="1">
<?php

   echo "<tr>";
   echo "<td>" . "Oppgavenavn" . "</td>";
   echo "<td>" . "Tidspunkt" . "</td>";
   echo "<td>" . "Dato" . "</td>";
   echo "<td>" . "Beskrivelse" . "</td>";
   echo "<td>" . "Ansvarlig" . "</td>";
   echo "<td>" . "Deltaker 1" . "</td>";
   echo "<td>" . "Deltaker 2" . "</td>";
   echo "</tr>";

   for ($i = 0; $i < mysql_num_rows($result_set); $i++){
       if (isset($_GET['showall'])){
           $show = 1;
       }else{
           $show = $result_array['status'];
       }
       if ($show == 1){
           echo "<tr>";
           echo "<td>" . $result_array['name'] . "</td>";
           echo "<td>" . $result_array['hour'] . ":" . $result_array['min'] . "</td>";
           echo "<td>" . $result_array['time'] . "</td>";
           echo "<td>" . $result_array['text'] . "</td>";
           echo "<td>";
           if ($result_array['leader'] == 0) {
               echo "<a class='assignmentrow' href='assignments.php?id={$result_array['id']}&place=0'>Ta</a>";
           } else {
               $query = "SELECT username FROM users WHERE id = '{$result_array['leader']}'";
               $result = mysql_query($query);
               confirm_query($result);
               $username = mysql_fetch_array($result);
               echo $username['username'];
               if ($_SESSION['crew'] <= VARA){
                   echo "(<a href='assignments.php?del=1&id={$result_array['id']}&place=0'>x</a>)";
               }
           }
           echo "</td>";
           echo "<td>"; 
           if ($result_array['user1'] == 0) {
               echo "<a class='assignmentrow' href='assignments.php?id={$result_array['id']}&place=1'>Ta</a>";
           } else {
               $query = "SELECT username FROM users WHERE id = '{$result_array['user1']}'";
               $result = mysql_query($query);
               confirm_query($result);
               $username = mysql_fetch_array($result);
               echo $username['username'];
               if ($_SESSION['crew'] <= VARA){
                   echo "(<a href='assignments.php?del=1&id={$result_array['id']}&place=1'>x</a>)";
               }
           }
           echo "</td>";
           echo "<td>";
           if ($result_array['user2'] == 0) {
               echo "<a class='assignmentrow' href='assignments.php?id={$result_array['id']}&place=2'>Ta</a>";
           } else {
               $query = "SELECT username FROM users WHERE id = '{$result_array['user2']}'";
               $result = mysql_query($query);
               confirm_query($result);
               $username = mysql_fetch_array($result);
               echo $username['username'];
               if ($_SESSION['crew'] <= VARA){
                   echo "(<a href='assignments.php?del=1&id={$result_array['id']}&place=2'>x</a>)";
               }
           }
           echo "</td>";
           echo "</tr>";

       }

       $result_array = mysql_fetch_assoc($result_set);
   }
   echo $result_array['name'];

?>
</table>
<?php 
   if ($_GET['showall'] == 1) {
       echo "<a class='noprint' href='assignments.php'>Vis aktive</a>";
   }
   else {
       echo "<a class='noprint' href='assignments.php?showall=1'>Vis alle</a>";
   }

?>    
</div>
<?php require_once ("includes/footer.php"); ?> 

Lenke til kommentar
Videoannonse
Annonse

register_globals er på, og det vil si at $username faktisk representerer $_SESSION['username']. En måte å fikse det på, er å bruke en annen variabel for $username = mysql_fetch....., eller skru av register_globals om du har tilgang til serveren PHP konfigurasjon.

 

Og slik kom jeg fram til det:

<?php
session_start();

$_SESSION['id'] = 7;
$_SESSION['username'] = "test";
$_SESSION['crew'] = 0;
$_SESSION['rank'] = 0;

echo "<pre>";
print_r( $_SESSION );

$username = array( 'username' => 'oleerik' ); // Arrayet her er det samme som mysql_fetch_array() returnerer

print_r( $_SESSION );

Kommenterer man ut et par linjer, ser man at $_SESSION ble endret permanent.

<?php
session_start();

echo "<pre>";
/*
$_SESSION['id'] = 7;
$_SESSION['username'] = "test";
$_SESSION['crew'] = 0;
$_SESSION['rank'] = 0;

print_r( $_SESSION );

$username = array( 'username' => 'oleerik' );*/

print_r( $_SESSION );

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...