Kann man Session einem Wert von der DB zuweisen ?

Code46

Erfahrenes Mitglied
Hi ,

ich bins mal wieder. Ist es möglich einer Session einem Wert aus einer DB zuzuweisen ? Weil ich habe eine Tabelle mit Werten, wo ich noch ein Button habe "Edit". Ich muss wissen welche Zeile ich selektiert habe, um dies ändern zu können. Beim drücken des Button Edit wird man auf eine andere php seite weitergeleitet, wo man dort seinen Text verändern und dann wieder speichert.

Wenn ihr mir helfen könntet würde ich mich sehr freuen.

Vielen Dank
 
Du kannst einer Session prinzipiell alles zuweisen was du willst:
PHP:
// Direktes zuweisen
$_SESSION['meineSession'] = 5;
// Zuweisen über eine Variable
$meineVariable = 5;
$_SESSION['meineSession'] = $meineVariable;
Was dann in $meineVariable steht ist egal. Du musst nur bei Objekten aufpassen, da kann es ggf zu Problemen kommen.
 
Mein problem ist, dass ich genau wissen will welche Zeile ich in der Tabelle selektiert habe, wenn ich auf den Button Edit drücke.
 
Ich suche schon den ganzen Tag, wie ich das machen kann

Hier ist mein Code:

PHP:
<?php
if (!$link) {
   die('<p>Error connecting to database</p>');
} else if (!$db) {
   die('<p>Error selecting database</p>');
} else {
	

    $query = "SELECT item_id,user_id,subject,description,created_at FROM item WHERE user_id ='{$_SESSION['user_id']}'";
    if ( !($result = mysql_query($query)) ) {
        die('<p>Error reading database</p>');
    }else {
		echo "<table class='table table-striped'>";
        echo "<thead>";
		echo "<tr>";
		echo "<th>Type</th>";
        echo "<th>Description</th>";
        echo "<th>Uploaded Date</th>";
        echo "</tr>";
		echo "</thead>";


			while($row = mysql_fetch_assoc($result))
			{
			$i = 0;
            if ($i%3 == 0) {
                echo "  <tr>";
            }
			echo "    <td width='18'>".$row['subject']."</td>";
            echo "    <td width='18'>".$row['description']."</td>";
            echo "    <td width='18'>".$row['created_at']."</td>";
			echo "    <td width='18'><button class='btn btn-small btn-primary' type='button'>Delete</a></td>";
			echo "    <td width='18'><a href='editItem.php' button class='btn btn-small btn-primary' type='button'>Edit</a></td>";
            if ($i%3 == 0) {
                echo "  </tr>";
            }
            $i++;
        }
        echo "</table>";

    }
} 
?>
 
Erstmal benutzt du invalides HTML.
ein <a>-Tag hat weter ein type="button" Attribute noch ein button Attribut an sich. Das solltest du entfernen.

Zu deinem Problem: Arbeite mit $_GET:
PHP:
// ich nehme an es gibt ein ID-Feld in deiner Tabelle
 echo "    <td width='18'><a href='editItem.php?id={$row['id']}' class='btn btn-small btn-primary'>Edit</a></td>";

Auf der editItem.php kannst du dann wie folgt darauf zugreifen:
PHP:
if( isset($_GET['id']) ){ // sichergehen dass das Feld angeklickt wurde
  echo 'Datensatz mit ID: ' . $_GET['id'] . ' angeklickt.';
}

Beachte dass du $_GET['id'] weiter validieren musst, da das anfällig für Nutzerangriffe ist.
Stichwort: mysql_real_escape_string, is_numeric
 
In der editItem.php tuhe ich dies:

Ist das richtig so ? Sorry bin ziehmlich neu in PHP deswegen.


PHP:
if( isset($_GET['item_id']) )
											{

											$sql="SELECT subject FROM item WHERE item_id =$_GET['item_id']";
											$result= mysql_query($sql);
											while ($row = mysql_fetch_assoc($result)) 
											{

											echo $row['subject'];
											}	
												
											}?>"
 
Ja, im Prinzip ist das richtig, aber so könnte ich jetzt deine Datenbank manipulieren.
Deswegen, bei fremdeingaben (ja, $_GET ist eine Fremdeingabe) immer mysql_real_escape_string benutzen, bei numerischen eingaben noch besser die Funktion intval().
PHP:
if( isset($_GET['item_id']) ){
  $sql="SELECT subject FROM item WHERE item_id = ".intval($_GET['item_id']); 
}
// wenn item_id nicht numerisch ist, bzw allgemein für nicht numerische Parameter
if( isset($_GET['item_id']) ){
  $sql="SELECT subject FROM item WHERE item_id = '".mysql_real_escape_string($_GET['item_id'])."'"; 
}
 
Ich habe nochmal eine UPDATE funktion. Kannst du bitte nochmal dies checken, wenn es dir nichts ausmacht ?

Ich habe das auf dem SQL Server versuch und es klappte dort, jedoch im meinem code Funktioniert es nicht.
PHP:
$sql_insert = "UPDATE item SET subject='$subject',description = '$description' WHERE item_id = '".intval($_GET['item_id'])."'";
 
Zuletzt bearbeitet:
Zurück