• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Session

Witschi262

Blogger
Hallo,
ich erstelle in einer Datei eine Session, welche später ausgelesen werden sollte (in einer anderen Datei).

Als erstes starte ich per
PHP:
session_start ();
die Session und weiter unten erstelle ich diese:
PHP:
$_SESSION["code"] = "$code";
In einer anderen Datei mache ich wie gewohnt
PHP:
session_start ();
und lese so die Session aus:
PHP:
if (!isset ($_SESSION["code"]))
{
echo "Du hast bereits einen Code registriert. Dein Code lautet: ".$_SESSION['code']." ";
}
 
Zuletzt bearbeitet:
Gibt es dazu eine Frage?

PHP:
$_SESSION["code"] = "$code";

// Schöner:
$_SESSION['code'] = $code; // $code dürfte jawohl ein String sein?
                           // Im Zweifel: var_dump($code);
    // Einfache Anführungszeichen, falls der String als "Konstante" gedacht ist
    // und ihn ihm keine Variablen aufgelöst werden

// Falls $code kein String ist:
$_SESSION['code'] = (string) $code;
    // Die Sache mit den Anführungszeichen würde zwar auch einen Typecast
    // bewirken, aber -- das mag jetzt subjektiv sein -- man macht das einfach
    // nicht auf die Weise

Sobald der Nutzer den Browser neu startet oder seine Cookies löscht, werden die Session-Variablen gelöscht. Das ist klar, oder?

Edit: Theoretisch müsste $code nicht mal ein String sein, $_SESSION speichert Datentypen mit.
 
Zuletzt bearbeitet:
Ja, das ist klar.
Es ist "ansturm" geplant, in 15 Minuten ist ja alles weg.

Edit:
Habe die 2. Variante genommen, so hatte ich es ja eigentlich vorher.
Ist bei der "ausgabe" der Session kein fehler?
Es funktioniert nämlich nicht.
Damit keine Mißberständnisse entstehen, poste ich mal den Code, mit allem Anderen, vllt. verbirgt sich ja woanders der Fehler?
codespeichern.php (Session wird erstellt)
PHP:
<?php
session_start ();
  include("head.php");
?>
<?php
$connection = mysql_pconnect("localhost","***","***");
mysql_select_db("**");

$code = $_POST['code'];
$ifcode = mysql_query("SELECT * FROM beta");
$vergleichen = mysql_num_rows($ifcode);
if ($vergleichen > 10)
{
echo " Sorry, es sind bereits 10 Codes registriert worden!";
}
else
{
mysql_query("INSERT INTO beta (id, code) VALUES (NULL, '".mysql_real_escape_string($code)."')");
echo ' <center>
       Der Code wurde abgespeichert. Du kannst nun die BETA nutzen.<br>
       </center>';
$_SESSION['code'] = $code; // die betreffende Zeile
}
?>

Code.php (Session wird ausgelesen)
PHP:
<?php
session_start ();
include("head.php");
if (!isset ($_SESSION["code"]))
{
echo "Du hast bereits einen Code registriert. Dein Code lautet: ".$_SESSION['code']." "; //betreffende Zeilen
}
else
{
?>
<?php

function generatePW($length=8)
{

$dummy = array_merge(range('0', '9'), range('a', 'z'));



mt_srand((double)microtime()*1000000);

for ($i = 1; $i <= (count($dummy)*2); $i++)
{
$swap = mt_rand(0,count($dummy)-1);
$tmp = $dummy[$swap];
$dummy[$swap] = $dummy[0];
$dummy[0] = $tmp;
}


return substr(implode('',$dummy),0,$length);

}
echo '
<p>
Wir haben einen Code für dich generiert. Bitte <b>speichere bzw. kopiere</b> diesen Code! Nur mit diesem Code, hast du Zugang zu unserer BETA Version! Du kannst den Code auch verändern. Wir empfehlen aber aus Sicherheitsgründen den Code so stehen zu lassen. Hinterher kann der Code nichtmehr veränder werden.
<form action="codespeichern.php" method="post">
<textarea name="code">'; echo generatePW(10); echo '</textarea>
<input type="submit" value="Weiter">
</form>
</p> ';
}
?>
 
Zuletzt bearbeitet:
Wieso bitte schließt und öffnest du PHP-Tags direkt hintereinander? Du musst PHP nur schließen, um etwas anderes auszugeben, im Normalfall wäre das dann HTML... Und bitte frag einheitlich ab, PHP interpretiert Inhalte je nach Anführungszeichen anders. Benutz einfach überall (also bei $_SESSION['code']) einfache Anführungszeichen (').
 
Was mir gerade auffällt:

Code:
if (!isset ($_SESSION["code"]))
{
echo "Du hast bereits einen Code registriert. Dein Code lautet: ".$_SESSION['code']." "; //betreffende Zeilen

Da müsste es vermutlich if (isset ($_SESSION["code"])) heißen, also ohne das NOT.

In codespeichern.php wäre es sicher eine Idee, vor dem Eintragen abzufragen, ob $_POST['code'] überhaupt Inhalt hat (zum Beispiel per empty).

Ansonsten kann ich nich viel dazu sagen, außer dass es nicht unsere Aufgabe ist, uns zu überlegen, wie das Skript wohl gedacht ist und was "funktioniert nämlich nicht" bedeuten könnte.
 
mermshaus schrieb:
außer dass es nicht unsere Aufgabe ist, uns zu überlegen, wie das Skript wohl gedacht ist und was "funktioniert nämlich nicht" bedeuten könnte.

Welche Aufgabe? Das Antworten hier ist freiwillig. Und, eine bedeutung des Scripts ist wohl nicht nötig, oder? Ich erstelle einfach Sessions.
Wenn du dich allerdings dafür verpflichtet fühlst, kann ich nichts dafür.

So, also, habe die obigen Punkte mal verbessert.
Wenn allerdings jetzt jemand die Seite betritt, ohne diese Seite vorher gesehen und betreten zu haben bekommt er:
Du hast bereits einen Code registriert. Dein Code lautet:
Ausgegeben.
Das "neue" Script:
Code.php :
PHP:
<?php
session_start ();
  include("head.php");

$connection = mysql_pconnect("localhost","***kids.de","*****");
mysql_select_db("5*****Kica");

$code = $_POST['code'];
$ifcode = mysql_query("SELECT * FROM beta");
$vergleichen = mysql_num_rows($ifcode);
if (empty ($_POST['code']))
{
echo "Oups, es ist ein Fehler aufgetreten.";
}
else {
if ($vergleichen > 10)
{
echo " Sorry, es sind bereits 10 Codes registriert worden!";
}
else
{
mysql_query("INSERT INTO beta (id, code) VALUES (NULL, '".mysql_real_escape_string($code)."')");
echo ' <center>
       Der Code wurde abgespeichert. Du kannst nun die BETA nutzen.<br>
       </center>';
$_SESSION['code'] = $code;
}
}
?>
<br><a href="index.php" style="cursor:url(image/cursor_hover.gif), auto;">Startseite</a>
<?php
 include("bottom.php");
 ?>
codespeichern.php :
PHP:
<?php
session_start ();
include("head.php");
if (!isset ($_SESSION['code']))
{
echo "Du hast bereits einen Code registriert. Dein Code lautet: ".$_SESSION['code']." ";
}
else
{

function generatePW($length=8)
{

$dummy = array_merge(range('0', '9'), range('a', 'z'));



mt_srand((double)microtime()*1000000);

for ($i = 1; $i <= (count($dummy)*2); $i++)
{
$swap = mt_rand(0,count($dummy)-1);
$tmp = $dummy[$swap];
$dummy[$swap] = $dummy[0];
$dummy[0] = $tmp;
}


return substr(implode('',$dummy),0,$length);

}
echo '
<center>
<p>
Wir haben einen Code für dich generiert. Bitte <b>speichere bzw. kopiere</b> diesen Code! Nur mit diesem Code, hast du Zugang zu unserer BETA Version! Du kannst den Code auch verändern. Wir empfehlen aber aus Sicherheitsgründen den Code so stehen zu lassen. Hinterher kann der Code nichtmehr veränder werden.
<form action="codespeichern.php" method="post">
<textarea name="code">'; echo generatePW(10); echo '</textarea>
<input type="submit" value="Weiter">
</form>
</p></center> ';
}
include("bottom.php");
?>
 
Zuletzt bearbeitet:
Welche Aufgabe? Das Antworten hier ist freiwillig. Und, eine bedeutung des Scripts ist wohl nicht nötig, oder? Ich erstelle einfach Sessions.
Wenn du dich allerdings dafür verpflichtet fühlst, kann ich nichts dafür.

Was ich sagen wollte: Je einfacher du es den Lesern machst, desto eher bekommst du eine Antwort. (Etwa auch Code einrücken.) Sorry, falls das falsch rüberkam, war hilfreich gemeint.

Wenn allerdings jetzt jemand die Seite betritt, ohne diese Seite vorher gesehen und betreten zu haben bekommt er:
Du hast bereits einen Code registriert. Dein Code lautet:
Ausgegeben.

Code:
if (!isset ($_SESSION["code"]))
{
echo "Du hast bereits einen Code registriert. Dein Code lautet: ".$_SESSION['code']." "; //betreffende Zeilen

Da müsste es vermutlich if (isset ($_SESSION["code"])) heißen, also ohne das NOT.
 
Mh, mit dem !isset hatte ich schon probiert. Das geht nicht, ich versuche es nochmal edit dann denn beitrag

Edit:
So, jetzt wird zwar alles normal angezeigt, allerdings, wenn die session exestiert, immernoch.
Ist bei der Sessionerstellung was falschß
 
Zuletzt bearbeitet:
Es geht darum, du fragst, ob die Session NICHT gesetzt ist, und wenn das der Fall ist, gibt er den Text "Du hast bereits einen Code registriert. Dein Code lautet:" aus.

Mach verdammt noch mal das Ausrufezeichen vor dem isset weg! Nicht böse gemeint ^^
 
Das Ausrufezeichen IST weg !!
Sorry, aber ich sagte schon öfter, dass es auch ohne nicht klappt. Zwar ist dann das Problem weg, allerdings, wenn die Session gesetzt wird, kommt "Du hast bereits einen Code registriert. Dein Code lautet:" auch .
Deshalb dachte ich, das Problem liegt bei der erstellung der Session
 
Das Formular von Code.php wird an codespeichern.php geschickt. Ich sehe nicht, wie dort dann eine Ausgabe von Code.php erfolgen soll.
 
Das Ausrufezeichen IST weg !!
Sorry, aber ich sagte schon öfter, dass es auch ohne nicht klappt.

Ahja, das ist aber hier nicht ganz rübergekommen:

Mh, mit dem !isset hatte ich schon probiert. Das geht nicht, ich versuche es nochmal edit dann denn beitrag

Wieso setzt du nicht eine zweite Sessionvariable, z.B. $_SESSION['count'], setzt diese bei der ersten Codegenerierung auf 1 und zählst mit jeder Codegenerierung hoch? Dann kannst du einfach folgendes prüfen:
PHP:
if (isset ($_SESSION['code']) && $_SESSION['count'] < 10)
 
Das wären 10 Codes pro Session, wenn ich das richtig verstehe. Witschi262 möchte glaube ich, dass insgesamt (also sessionübergreifend) 10 Codes erstellbar sind.
 
Hmm, was ist denn dann genau das Problem? Ich verstehs nicht xD Entweder mit Datenbanken oder mit ner Datei arbeiten.
 
Ein Benutzer kann einen Code registrieren.
Wenn der Benutzer einen Code registriert hat, sollte in einer Session gespeichert werden, DASS ein Code registriert wurde, und WELCHER.
 
Ich habe gerade überlegt, wie das, was ich in #12 geschrieben habe, zu den Dateinamen passt, wie sie in #7 angegeben sind. Gar nicht nämlich. Der Punkt ist aber, dass ich mich auf die Dateinamen bezog, wie sie in #3 angegeben sind. Du hast irgendwo (in #3 oder in #7) die Dateinamen vertauscht.

Falls das beabsichtigt war, ist das echt mal enorm verwirrend.
 
Ich schaue mir gleich die Beiträge an, weil die einzelnen Bitragsanzahlen mit #1 und #5 usw. sind auch enorm verwirrend :D

Okay:
in #7 habe ich sie tatsächlich vertauscht.
Da ich auch sehr sehr verwirrt bin, habe ich keien Ahnung, wo mein Problem liegt. DOOF
 
Ich verstehe noch immer nicht, worin das Problem überhaupt besteht. Ein letzter Versuch:

  1. Du rufst Code.php auf. Dort wird dir ein Code generiert. Dann klickst du auf "Weiter".
  2. Dort wird der Code abgespeichert und in die Session geschrieben, falls noch keine 10 Einträge vorhanden sind.
  3. Beim nächsten Aufruf von Code.php kommt die Nachricht "Du hast bereits einen Code registriert".

Und das soll nicht so funktionieren?
 
Zurück
Oben