Chris: Session problem, speichert variable nicht.

Hallo, ich versuche gerade ein Formular zu erstellen, mitdem man sich in einer homepage anmelden kann.

So mein Problem ist, dass ich in einen Textfeld einen Nickname eingeben kann. Sprich ich gebe in einen Textfeld in html einen Namen ein, mit dem Button "suchen" soll herausgefunden werden ob es diesen Namen schon gibt, wenn ja soll der User erscheinen. Dannach gibt es den Button, "registrieren" mit dem kann man sich dann halt anmelden.

Mein Problem ist das ich mit Session net so gut umgehen kann. Wenn ich jetzt z.B. die variable vom Textfeld zweimal verwenden will funktioniert es nicht da sie beim zweiten durchlauf leer ist.

Die Button werden jeweils mit einem isset($_POST['']; aktiviert.

natürlich wird als erstes die Session gestartet.

$nickname = $_POST['nickname'];

if(!isset($nickname))
   {
   $nickname = "name";
   }

$_SESSION['nickname'] = $nickname;

Was vielleicht noch wichtig ist, php und html mach ich mit einem script.

Jetzt zur frage, wenn ich die variable $nickname für den ersten Button verwende funktionierts, aber wenn ich dann auf den Button registrieren klicke ist sie leer, was hab ich falsch gemacht.

Wenn jemand noch infos braucht nur bescheidsagen...

  1. Hallo Chris,

    Jetzt zur frage, wenn ich die variable $nickname für den ersten Button verwende funktionierts, aber wenn ich dann auf den Button registrieren klicke ist sie leer, was hab ich falsch gemacht.

    dann nimm doch für den 2.Knopf eine andere Variable... wenn Du den gleichen Namen mehrfach verwendest wird ein Array aufgebaut.

    Grüße, Armin

    1. Hallo Chris,

      Jetzt zur frage, wenn ich die variable $nickname für den ersten Button verwende funktionierts, aber wenn ich dann auf den Button registrieren klicke ist sie leer, was hab ich falsch gemacht.

      dann nimm doch für den 2.Knopf eine andere Variable... wenn Du den gleichen Namen mehrfach verwendest wird ein Array aufgebaut.

      Grüße, Armin

      Es geht ja im Prinzip darum das ich den namen aus dem textfeld für zwei buttons verwenden soll.

      Soll ich jetzt einfach

      $a=$_POST['index'];
      $a2=$a

      und dann button 1

      if(isset(blabla))
      {
      $a
      }

      und dann button 2

      if (isset(blaba2))
      {
      $a2
      }

      so oder wie!! ich check net

      aber danke für die hilfe

      1. Kann mir jemand vielleicht was gurndlegendes darüber sagen.

        Wie ich einfach eine info aus dem Textfeld(html) in eine variable (php) speichere und sie für zwei isset´s verwenden kann, des würde mir schon helfen.

        1. Mahlzeit Chris,

          Wie ich einfach eine info aus dem Textfeld(html) in eine variable (php) speichere

          Wieso willst Du das überhaupt? Angenommen, das Textfeld befände sich in einem Formular und dieses Formular würde abgeschickt: dann steht der Inhalt <http://de.selfhtml.org/html/formulare/definieren.htm#bereich@title=je nach gewählter Methode> in PHP in einem der superglobalen Arrays $_GET oder $_POST zur Verfügung. Die Werte von dort in irgendwelche Variablen zu kopieren, denen man dann die Herkunft ihrer Inhalte nicht mehr ansieht, ist nicht sinnvoll.

          und sie für zwei isset´s verwenden kann, des würde mir schon helfen.

          Was verstehst Du unter "sie für zwei issets verwenden"? Du kannst in PHP jederzeit jede beliebige daraufhin prüfen, ob sie gesetzt ist. Was genau ist Dein Problem?

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
          1. Mahlzeit Chris,

            Wie ich einfach eine info aus dem Textfeld(html) in eine variable (php) speichere

            Wieso willst Du das überhaupt? Angenommen, das Textfeld befände sich in einem Formular und dieses Formular würde abgeschickt: dann steht der Inhalt <http://de.selfhtml.org/html/formulare/definieren.htm#bereich@title=je nach gewählter Methode> in PHP in einem der superglobalen Arrays $_GET oder $_POST zur Verfügung. Die Werte von dort in irgendwelche Variablen zu kopieren, denen man dann die Herkunft ihrer Inhalte nicht mehr ansieht, ist nicht sinnvoll.

            und sie für zwei isset´s verwenden kann, des würde mir schon helfen.

            Was verstehst Du unter "sie für zwei issets verwenden"? Du kannst in PHP jederzeit jede beliebige daraufhin prüfen, ob sie gesetzt ist. Was genau ist Dein Problem?

            MfG,
            EKKi

            Wie schon gesagt,

            ich will das die information aus dem Textfeld, dass ein Name beinhaltet, in der ersten isset anweiseung (wird ausgelöst wenn man auf suchen button klickt)der Name gesucht wird ob er schon vorhanden ist.

            dannach kommt der nächste button registrieren, dabei möchte ich dass der name den man für die suche verwendet hat, wieder verwendet wird um den namen abzuspeichern.

            doch bei mir funktioniert das nicht weil das textfeld nach dem ersten button klick leer ist, auch wenn ich es in einer variablen speichere oder per $_post['df'] mache, es wird beimzweiten mal kein Wert übermittelt.

            Aufbau des Quelltextes

            Textfeld (eingabe)

            php verarbeitung

            isset($_POST['button1'])){

            bla bli blu , ihr name ist vorhanden, oder nicht

            }

            isset(['registrieren']))
            {

            bla bli blu, sie wurden eingetrjagen

            }

            danke, dass ich mir versucht zu helfen :)

            1. Hi Chris,
              EKKI meint richtigerweise, dass es an dieser Stelle keinen Sinn macht, mit der Session zu arbeiten (deine User sollen jawohl bitte nicht ohne Bestätigung sofort registriert und angemeldet sein). Vielmehr ist es sinnvoll, hier durchgängig mit $_POST Variablen zu arbeiten (nie das Validieren vergessen).

              Dein Formular kann hier gut ein Affenformular sein, d.h. du schickst es per action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" an sich selbst.

              Welcher Button gedrückt wurde, checkst du besser mit entsprechenden name-Attributen als per JS (z.B. mit <input type="submit" name="checknickname" /> und if (isset($_POST['checknickname']).

              Dein wesentlicher Denkfehler ist, glaube ich, dass du den Nickname nach dem ersten Durchgang nicht wieder zurückgibst. Also

                
              <input type="text" name="nickname" value="<?php echo $_POST['nickname']; ?>" />  
              
              ~~~ (evtl. halt'n Fehler ausgeben oder ein input hidden mit einer Fehlervariable belegen).  
                
              Ganz am Ende setzt du dann `$username = $_POST['nickname']`{:.language-php} oder sonst `$username = $_POST['name']`{:.language-php}.  
                
                
              cheers  
              Antipitch
              
              1. Hi Chris,
                EKKI meint richtigerweise, dass es an dieser Stelle keinen Sinn macht, mit der Session zu arbeiten (deine User sollen jawohl bitte nicht ohne Bestätigung sofort registriert und angemeldet sein). Vielmehr ist es sinnvoll, hier durchgängig mit $_POST Variablen zu arbeiten (nie das Validieren vergessen).

                Dein Formular kann hier gut ein Affenformular sein, d.h. du schickst es per action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" an sich selbst.

                Welcher Button gedrückt wurde, checkst du besser mit entsprechenden name-Attributen als per JS (z.B. mit <input type="submit" name="checknickname" /> und if (isset($_POST['checknickname']).

                Dein wesentlicher Denkfehler ist, glaube ich, dass du den Nickname nach dem ersten Durchgang nicht wieder zurückgibst. Also

                <input type="text" name="nickname" value="<?php echo $_POST['nickname']; ?>" />

                
                >   
                > Ganz am Ende setzt du dann `$username = $_POST['nickname']`{:.language-php} oder sonst `$username = $_POST['name']`{:.language-php}.  
                >   
                >   
                > cheers  
                > Antipitch  
                  
                  
                  
                Wie geil es hat funktioniert. Vielen Dank an alle.  
                  
                  
                aber eine frage hätte ich noch.  
                  
                  
                Ich verusche jetzt auch noch die Suchfunktion zu erweitern, also die Abfrage soll auch Namen ausgeben, also wenn ich auf suchen klicke, die auch ungefähr so geschrieben sind  
                  
                z.B.  
                  
                ich schreibe ins textfeld hinein "chris"  
                  
                dann soll er auch datensätze suchen wie "chris2" odeer cHrIs" oder so in der art, wenn ihr mir da noch helfen könntet wäre ich euch wirklich zu dank verpflichtet.
                
                1. Mahlzeit Chris,

                  bitte zitiere vernünftig, d.h. nur den Teil des Beitrags, auf den Du Dich beziehst. TOFU und Ähnliches schmecken nicht jedem hier.

                  Ich verusche jetzt auch noch die Suchfunktion zu erweitern, also die Abfrage soll auch Namen ausgeben, also wenn ich auf suchen klicke, die auch ungefähr so geschrieben sind

                  Dann sollte Deine "Suchfunktion" eben nicht nach absoluter Gleichheit, sondern auch nach Ähnlichkeit suchen.

                  dann soll er auch datensätze suchen wie "chris2" odeer cHrIs" oder so in der art, wenn ihr mir da noch helfen könntet wäre ich euch wirklich zu dank verpflichtet.

                  Wie soll irgendjemand helfen, wenn Du verschweigst, was für eine Art "Suchfunktion" Du nutzt, wie diese aufgebaut ist, auf welche Weise sie die Daten miteinander vergleicht, wo diese Daten überhaupt herkommen usw. ... Du erwartest doch hoffentlich nicht, dass Deine Leser jetzt zum nächsten Glaser rennen und sich mit Glaskugeln eindecken?

                  An dieser Stelle sei zum zweiten Mal ein Hinweis auf die "Tipps für Fragende" gestattet, deren Beachtung Du bisher hartnäckig verweigerst.

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                  1. Mahlzeit Chris,

                    bitte zitiere vernünftig, d.h. nur den Teil des Beitrags, auf den Du Dich beziehst. TOFU und Ähnliches schmecken nicht jedem hier.

                    Ich verusche jetzt auch noch die Suchfunktion zu erweitern, also die Abfrage soll auch Namen ausgeben, also wenn ich auf suchen klicke, die auch ungefähr so geschrieben sind

                    Dann sollte Deine "Suchfunktion" eben nicht nach absoluter Gleichheit, sondern auch nach Ähnlichkeit suchen.

                    dann soll er auch datensätze suchen wie "chris2" odeer cHrIs" oder so in der art, wenn ihr mir da noch helfen könntet wäre ich euch wirklich zu dank verpflichtet.

                    Wie soll irgendjemand helfen, wenn Du verschweigst, was für eine Art "Suchfunktion" Du nutzt, wie diese aufgebaut ist, auf welche Weise sie die Daten miteinander vergleicht, wo diese Daten überhaupt herkommen usw. ... Du erwartest doch hoffentlich nicht, dass Deine Leser jetzt zum nächsten Glaser rennen und sich mit Glaskugeln eindecken?

                    An dieser Stelle sei zum zweiten Mal ein Hinweis auf die "Tipps für Fragende" gestattet, deren Beachtung Du bisher hartnäckig verweigerst.

                    MfG,
                    EKKi

                    Meine suchfunktion hat mehrere Auswahlkriterien spirch mehrere Attribute können abgefragt werden, für die, die net wissen wie was Attribute sind, die Tabellenüberbegriffe in dem Fall. Zu jeden dieser Attribute kann mein ein Suchbegriff verwenden.

                    Die Suche bezieht sich auf zwei Tabellen in SQL.

                    Ich wollte es mit einer Abfrage machen

                    Am anfang kann man auswählen wie viele Attribute man abfragen will.
                    angenommen man sag zwei

                    dann kommt ein Listenfeld mit allen Attributsnamen und nebendaran ein Textfeld indem man sein Suchkriterium reinschreiben kann. hier ist auch der Hacken was muss ich machen damit die SQL abfrage nach einen annähernden Wert sucht

                    dann wird das Listenfeld ausgelesen und das Textfeld bzw. die Listenfelder und Textfelder#

                    $Listenfeld1=$_POST['listenfeld1'];

                    $Listenfeld2=$_POST['listenfeld2'];

                    $txfeld1=$_POST['txfeld1'];

                    und dann halt noch tx2

                    $abfrage= 'SELECT '.$Listenfeld1.',
                              FROM bla INNER JOIN bla ON bla.id=bla.id
                             WHERE '.$Listenfeld1.' = '.$txfeld1.';

                    $abfrage= 'SELECT und jetzt halt mit mit Listenfeld2 und txfeld2

                    die zwo abfragen werden dann halt nur zusammen ausgegeben.

                    Gibt es ein Befehl das man auch Werte bekommt die nicht identisch sind oder wie geht des.

                    1. Mahlzeit Chris,

                      bitte zitiere vernünftig, d.h. nur den Teil des Beitrags, auf den Du Dich beziehst. TOFU und Ähnliches schmecken nicht jedem hier.

                      Da Du wieder einfach alles zitierst, wird dies meine letzte Antwort in diesem Thread, wenn Du Dein Verhalten nicht änderst.

                      dann kommt ein Listenfeld mit allen Attributsnamen und nebendaran ein Textfeld indem man sein Suchkriterium reinschreiben kann.

                      D.h. man kann dann aus dem Listenfeld *EIN* Attributsnamen auswählen? Und man kann in *DAS* Textfeld *EIN* Suchkriterium eingeben?

                      Wie willst Du so die Suche nach mehreren Kriterien ermöglichen?

                      hier ist auch der Hacken was muss ich machen damit die SQL abfrage nach einen annähernden Wert sucht

                      1. hat das mit Gartengeräten oder Körperteilen wenig zu tun und

                      2. liegt das Problem sicherlich nicht "hier" (d.h. im HTML-Code bzw. in der Darstellung an der Oberfläche).

                      dann wird das Listenfeld ausgelesen und das Textfeld bzw. die Listenfelder und Textfelder#

                      Also doch mehrere? Vielleicht hast Du jetzt *endlich* eingesehen, dass es manchmal sinnvoll ist, relevanten Quellcode (ob nun HTML, PHP oder SQL) zu zeigen (wenn man schon damit überfordert ist, sein Problem anschaulich zu beschreiben), damit die Leser wissen, wie sie sich Dein Formular vorstellen sollen ...

                      $Listenfeld1=$_POST['listenfeld1'];

                      $Listenfeld2=$_POST['listenfeld2'];

                      $txfeld1=$_POST['txfeld1'];

                      Wie ich bereits schrieb, ist dieses Umkopieren unsinnig und gefährlich ...

                      $abfrage= 'SELECT '.$Listenfeld1.',
                                FROM bla INNER JOIN bla ON bla.id=bla.id
                               WHERE '.$Listenfeld1.' = '.$txfeld1.';

                      ... insbesondere, wenn Du vom Benutzer (oder von wem auch immer) übergebene Inhalte einfach so ungeprüft in Datenbankabfragen benutzt. Merke: ALL INPUT IS EVIL!

                      Du weißt nicht, *wer* Dir da *was* schickt - baust daraus aber einfach fröhlich eine Datenbankabfrage zusammen. Wenn es jemand geschickt anstellt, sind alle Deine Daten und Tabellen im Nullkommanix weg.

                      Informiere Dich zum Thema "SQL Injection". Jetzt. Dringend! Blablabla wie "Ja, das mache ich später - Hauptsache die Sache läuft erstmal" sind kein Argument ... denn in nahezu 99% aller Fälle wird eine anschließende ordentliche Absicherung nämlich vergessen oder verdrängt und die "fertige" Anwendung hat Sicherheitslücken groß wie Scheunentore.

                      Gibt es ein Befehl das man auch Werte bekommt die nicht identisch sind oder wie geht des.

                      Ja. Befrage dazu die Dokumentation des von Dir verwendeten Datenbanksystems. Du Du es bisher nicht genannt hast, kannst Du hierbei keine ernsthafte Hilfe erwarten.

                      MfG,
                      EKKi

                      --
                      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                      1. Okey ich werde es mal versuchen das nächste mal explizierter zu formulieren, das Problem hat sich erledigt, aber ich habe ein neues

                        und zwar:

                        Nach der SQL Abfrage gebe ich die Daten wieder aus, also in einer Tabelle.
                        Nach der Ausgabe möchte ich aber noch ein paar Daten aus der ermittelten Abfrage in ein Textfeld speichern, also value="sqlabfragenwert"

                        ich wollte es mit
                        echo "$row->name"; machen aber er gibt mir kein Wert zurück, was kann man da für ein Befehl verwenden, was noch wichtig zu sagen ist in der Abfrage kann nur ein Datensatz drinne stehen.

                        also er die Abfrage

                        SELECT Name, Vorname, Strasse, Ort, PLZ, index
                        FROM User
                        WHERE index='.$_POST['index'].';

                        Mit der Abfrage möchte ich gerne den User mit dem entsprechenden Primärschlüssel raussuchen.

                        jetzt kommt die ausgabe

                        $datenarray=mysql_fetch_row($ergebnis);

                        while($datenarray){
                        foreach($datenarray as $datensatz){
                        print($datensatz." | ");
                        }

                        und jetzt möchte ich noch zum Beispiel den Name in ein Textfeld eintragen

                        <input type="text" name="name" value=" <?php echo "$datenarray->name" ?>  ">

                        also funktionieren tut es nicht aber wie würde es noch gehn.

                        1. Hi!

                          SELECT Name, Vorname, Strasse, Ort, PLZ, index
                          FROM User
                          WHERE index='.$_POST['index'].';

                          Sagt dir das Thema Kontextwechsel (Artikel-Vorabversion) vor allem in Bezug auf die Sicherheit und Robustheit deines Scripts etwas?

                          $datenarray=mysql_fetch_row($ergebnis);

                          while($datenarray){

                          Das ist vermutlich nicht so, denn das ergäbe eine Endlosschleife, wenn es mindestens einen Datensatz gibt. Und das dürftest du daran sehen, dass der Browser ewig wartet und vielleicht sogar eine Timeout-Meldung bringt. Es sei denn, dein Code sieht in Wirklichkeit anders aus.

                          Wenn mysql_fetch_row() einen Datensatz holen konnte, ist das Rückgabeergebnis ein nicht leeres Array, das zu true evaluiert, wenn man es in einen boolschen Kontext (hier: while-Bedingung) bringt. Da du nie wieder eine Fetch-Funktion ausführst oder $datenarray anderweitig änderst, wird while immer weiter laufen.

                          Angenommen, dein Code sieht in Wirklichkeit so aus:

                          while ($datenarray = mysql_fetch_row($ergebnis)) {
                              ...
                            }

                          wodurch wird veranlasst, dass das while beendet wird oder beendet werden kann? Ein

                          var_dump($datenarray);

                          sollte dir die Erleuchtung bringen. Das ist übrigens eine Kontrollausgabe. Diese sind sehr hilfreich, um Wunsch und Wirklichkeit miteinander zu vergleichen, um die tatächlichen Variableninhalte mit der eigenen Vorstellung abzugleichen.

                          Obendrein, solltest du beim Entwickeln das error_reporting auf E_ALL stellen, um weitere hilfreiche Hinweise auf Fehlerquellen zu bekommen.

                          <input type="text" name="name" value=" <?php echo "$datenarray->name" ?>  ">

                          Die PHP-Unsitte, Variablen in Anführungszeichen zu setzen, stirbt wohl auch nicht aus.

                          Lo!

                      2. Sind die angaben jetzt gut so, oder noch verbesserungsfähig

        2. Hallo Chris,

          Kann mir jemand vielleicht was gurndlegendes darüber sagen.

          Wie ich einfach eine info aus dem Textfeld(html) in eine variable (php) speichere und sie für zwei isset´s verwenden kann, des würde mir schon helfen.

          d.h. Du hast 2 submit in einem Formular und willst herausfinden, welcher Knopf gedrückt wurde...

          z.B. beim Knopf ein onclick() einfügen der eine weitere Variable ändert
          <input type="hidden" name="knopfnr" value="0">
          <input type="submit" onclick="document.form.knopfnr='1';" value="Anmelden">
          <input type="submit" onclick="document.form.knopfnr='2';" value="Registrieren">

          Grüße, Armin

          1. Hallo Chris,

            Kann mir jemand vielleicht was gurndlegendes darüber sagen.

            Wie ich einfach eine info aus dem Textfeld(html) in eine variable (php) speichere und sie für zwei isset´s verwenden kann, des würde mir schon helfen.

            d.h. Du hast 2 submit in einem Formular und willst herausfinden, welcher Knopf gedrückt wurde...

            z.B. beim Knopf ein onclick() einfügen der eine weitere Variable ändert
            <input type="hidden" name="knopfnr" value="0">
            <input type="submit" onclick="document.form.knopfnr='1';" value="Anmelden">
            <input type="submit" onclick="document.form.knopfnr='2';" value="Registrieren">

            Grüße, Armin

            was bewirkt des genau, dann weiß ich welcher knopf gedrückt ist, aber die variable ist dann doch immer noch leer oder