kostenloser Webspace werbefrei: lima-city


PHP 5: Cookies werden nicht gesetzt

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    HINT Ich habe schon auf Google gesucht, aber keine Antwort gefunden

    Hi,

    ich hoffe jemand kann / möchte mir weiterhelfen. Ich versuche mithilfe von PHP diverse Cookies zu speichern, diese ausgelesen werden, um die Seite zu modifizieren (ich brauche die Cookies für die Einstellungen-Features, auf meiner Website soll man Zeugs einstellen können).

    So, ich habe es so versucht:

    setcookie('Cursor',$Ma[0],time()+2145900917);


    Geht aber schon mal nicht (am Array kann es auch nicht liegen, hab es auch schon ohne probiert).

    Jetzt habe ich eben angefangen auf Google Hilfe zu finden. Auf der PHP.Net-Seite gibt's einiges Zeug über Cookies, ich hab ein paar Einstellungen einfach ma auf on gestellt, hat mein Problem nicht gelöst.

    Habe nun weitergesucht, musste leider auf alten Threads nachschauen, habe folgendes (auch auf PHP.Net) gefunden:

    var_dump(setcookie('Cursor',$Ma[0],time()+2145900917));


    Weil es ja so ist, dass die Cookies irgendwie erst nach erneuten abschicken oder laden whatever gesetzt werden,
    deshalb hab ich die Seite (ok GET-Variable) neu geladen mti JavaScript, nachdem das Formular "Einstellungen" gespeichert wurde:

    echo "<script>window.location = 'Index.php?seite=Einstellungen';</script>";


    Führte aber zu keinem Resultat.

    Geht auch nicht. Ich benutze Sessions, muss ich da ne Setting anstellen oder so? Würde ja weitersuchen, aber finde keine Lösung. Möglicherweise liegt es ja an meinem Script, könnte jetzt euch das Script posten, aber es ist etwa 400 Linien lang, und im Grunde der ganze Inhalt meiner Seite. Deshalb zeig ich euch mal Ausschnitte, die von Bedeutung sein könnten.

    Hab mal die Error-Settings angemacht, die mir gerade eingefallen waren:


    error_reporting(E_ALL);
     ini_set('display_errors','On');


    ...
    Hat mir dann angezeigt Undefined Index.
    Da ich seit einiger Zeit Java-Plugins (also für
    Minecraft Server) programmiere, ist mir klar, dass
    man zuerst überprüfen muss, ob das Argument gesetzt ist (also existiert).
    Also da kann man das sicher vergleichen, schätze ich ma'.

    Aber auch die
    Isset-Prüfung
    brachte nichts, wenn es darum ging,
    die Cookies abzufragen.

    if (isset($_COOKIE['Design'])) {
    	 if ($_COOKIE['Design'] == "test") {
    		print "<link rel=\"Stylesheet\" type=\"Text/CSS\" href=\"CSS/Main.css\">";	 
    	 }
    	 elseif($_COOKIE['Design'] == "Blau") {
    		print "<link rel=\"Stylesheet\" type=\"Text/CSS\" href=\"CSS/Blau.css\">"; 
    	 }
    	 elseif($_COOKIE['Design'] == "3") {
    		print "<link rel=\"Stylesheet\" type=\"Text/CSS\" href=\"CSS/Main.css\">";
    	 }else {
    		 print "<link rel=\"Stylesheet\" type=\"Text/CSS\" href=\"CSS/Main.css\">";
    		 
    	 }
    		}



    Es werden mir noch andere Fehler angezeigt (wenn ich Error-Reporting an habe),
    die wahrscheinlich nichts mit dem Cookie-setzen zu tun hat. Das hier steht im Quelltext:

    <b>Notice</b>:  Undefined variable: Filter in <b>/home/webpages/lima-city/bastians-seite/a - LeBasti Website 1.0/Version2/Index.php</b> on line <b>41</b><br />
    <br />
    <b>Notice</b>:  Undefined offset: 18 in <b>/home/webpages/lima-city/bastians-seite/a - LeBasti Website 1.0/Version2/Index.php</b> on line <b>46</b><br />
    <br />
    <b>Notice</b>:  Undefined offset: 18 in <b>/home/webpages/lima-city/bastians-seite/a - LeBasti Website 1.0/Version2/Index.php</b> on line <b>51</b><br />


    (Undefined variable ist wegen einer Filter-Funktion (ok war zu faul wirklich ne Funktion zu erstellen)).


    Für die Leute, die sich doch trauen, den ganze Code anzusehen (bitte nichts wegen Stellung der if-Abfragen oder switch, was auch immer..., bin eben nicht ein Python-Programmierer ;)) (habe meinen reCaptcha-key natürlich hier weggemacht:

    http://hastebin.com/lewivinife.xml

    (Einstellungen bei Linie 308, Cooke-Check bei Linie 70)


    Wäre echt toll wenn sich jemand die (etwas große) Mühe geben würde.

    Beitrag zuletzt geändert: 2.4.2016 16:33:09 von bastians-seite
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo

    <b>Notice</b>: Undefined variable: Filter in <b>/home/webpages/lima-city/bastians-seite/a - LeBasti Website 1.0/Version2/Index.php</b> on line <b>41</b><br />


    .... für den Fall, dass $_GET['Filter'] nicht vorhanden ist,
    dann die Variable mit Leerstring anlegen

    if (isset($_GET['Filter'])) {
       $Filter = $_GET['Filter'];
       // --- usw ... 
    } 
    else {
       $Filter = ""; 
    }



    weitere Fehler ganz ähnlich ... z.B.
    if ( isset($_GET['18']) && $_GET['18'] == "ja") ) { 
    $_SESSION['18'] = "checked";
    }
    else { 
    $_SESSION['18'] = "no";
    }


    und

    if (isset($_GET['18'] ) && $_GET['18'] == "ja") {
      $Nj = "visibility: hidden;";
    }
     else { 
      $Nj = ''; 
    }


    für Aray-Variablen mit eigenen Indxes würde ich auch nicht '18' nehmen,
    also keine reine Zahl, sondern irgendwas als String, z.B. "age" oder "alter"

    aber SORRY ... insgesamt würde ich deinen Code ganz neu starten
    so gemischt, PHP, HTML ... also so <?php auf / wieder zu / wieder auf / zu / usw
    und mal nimmst Du switch dann wieder if ... elseif .... else .. Chaos Pur !


    und warum Cookies setzten, du hast doch auch SESSION offen, das ist genug
    also SESSION setzt selber sein Cookie, da muss man nicht noch eins neu machen

    und sowas wie echo "<script>window.location ...</script> ist leider ein totales No-GO
    jeder Crwawler der sas sieht, wird sie als Spam / Maleware / Gefährlich einstufen

    insgesamt würde ich bei diesem Mix aus PHP und HTML Code
    mal den Begriff: "gefährliches Halbwissen" in die Runde werfen

    damit kannst Du gaaaaanz böse überraschungen erleben,
    und helfen kann Dir so auch kaum jemand, weil viel zu chaotisch

    ich will Dich nicht runter machen, finde ja gut, dass Du dich mit Programmierung beschäftigst, aber versuche doch mal etwas weniger Chaos dabei zu produzieren wenn schon so ein "kleiner" Code bei Dir so aussieht, wirst Du bei größeren Aufgaben keinen Spaß mehr haben

  4. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Danke für deine Antwort, aber das Filter-Script habe ich wie schon gesagt vor längerer Zeit gemacht (wegen Namensnennung etc.) und deshalb ist eben auch dieses if-else Verzweigungs-Chaos entstanden.

    Du hast anscheinend mein Problem nicht verstanden, keine Ahnung, vielleicht auch nicht gelesen.

    Ich möchte die Cookies benutzen, um Einstellungen auf meiner Website, die der User wählen kann,
    gespeichert werden. Sessions != func. Cookies!

    Danke für deine Antwort, leider hilft sie mir nicht weiter, denn wie gesagt, ich brauche nur für den Cookie-Teil Hilfe :/
  5. awsbn schrieb:
    und sowas wie echo "<script>window.location ...</script> ist leider ein totales No-GO
    jeder Crwawler der sas sieht, wird sie als Spam / Maleware / Gefährlich einstufen

    Kleine Zwischenfrage:
    Wie will ein Crawler denn dies sehen?
    Die Verwendung von JS an verschiedenen Stellen der Seite ist ja nicht ungewöhnlich und den PHP-Code kann ein Crawler nicht sehen.
  6. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Danke für deine Hilfe, glaube aber auch nicht daran, dass das Problem wegen dem gelöst ist... :/
  7. <b>Notice</b>: Undefined offset: 18 in <b>/home/webpages/lima-city/bastians-seite/a - LeBasti Website 1.0/Version2/Index.php</b> on line <b>46</b><br />
    <br />

    Ich gehe mal davon aus, dass auch GET-Variablen mit einem Buchstaben oder _ beginnen müssen.
  8. Ich weiß, Doku lesen ist uncool, aber:
    setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
    Quelle: http://php.net/manual/en/function.setcookie.php

    Cookies müssen also vor jedweder Ausgabe gesetzt werden. Genauso wie header(…) und session_start() vor jeder Ausgabe aufgerufen werden muss, eben weil Cookies in den HTTP Headern gesendet werden und somit vor der eigentlichen Website bereits beim Klienten sein müssen. Wenn Du cookies ohne das Neuladen der Seite setzen willst, musst Du dazu javascript benutzen.

    P.S.: Korrektes Einrücken hat nichts damit zu tun, ob Du jetzt Python oder PHP programmierst (Python erzwingt es lediglich), sondern ist dazu da, das ganze lesbar zu machen. Du schreibst ja den Code auch nicht für die Maschine, sondern damit Du ihn nachher noch verstehen kannst, sonst könntest Du auch einfach alle Leerzeichen, Tabs etc. weglassen, funktioniert ja, Du schreibst ja kein Python…
  9. Header-Ausgaben müssen vor den eigentlichen Ausgaben erfolgen.
    Dazu zählen auch die Header zum Setzen von Cookies.

    Dazu wären natürlich die Header allgemein interessant.

    Edit: UTF-8 BOM zählt als Ausgabe auch dazu.

    Beitrag zuletzt geändert: 3.4.2016 0:28:26 von muellerlukas
  10. Hallo

    wie davidlw und muellerlukas schon sagten, das Problem ist, dass Du
    setcookie()
    mitten in drin, also nicht vor jedweder Ausgabe im Browser setzen willst, und das geht nicht.


    also ALLE setcookie() Aufrufe müssen ganz oben,
    noch vor Asgabe von
    <!DOCTYPE HTML><HTML><Head>
    sein

    und die dabei gesetzten Variablen-Werte $Des[0] und $Dese
    müssen dazu auch vorher aus GET/POST ausgelesen sein


    ich rate Dir alle POST / GET Prüfungen,in diesem Bereich (vor <html>)
    zu schreiben, und nicht mitten in der Ausgabe einzeln zu Prüfen

    Dazu kann man sich entsprechende Variablen setzen,
    die dann auch späer für die Ausgabe verfügbar sind ...
    so ähnlich wie Du es schon für die Variable $Filter gemacht hast

    nur solltest Du für jedes GET / POST auch wenn nicht vorhanden
    trotzdem die Variable setzen, meinetwegen mit Leerstring oder Standard-Wert.

    Beispiele: (ganz oben vor HTML Ausgabe)

    if (isset($_GET['Filter']) && !empty($_GET['Filter'])) { 
      $Filter = $_GET['Filter'];  }  else { $Filter = 'Standard'; } 
    
    if (isset($_GET['Design']) && !empty($_GET['Design'])) {  
       $Design = $_GET['Design'];  }  else { $Design= 'blau'; } 
    
    if (isset($_GET['Maus']) && !empty($_GET['Maus'])) {  
       $MausWert = $_GET['Maus'];  }  else { $MausWert = '1'; }

    usw...

    dann kannst Du die Cookies setzen

    $timespamp = time(); 
    $cxplus_time = 2145900917; 
    $cookie_time = ($timespamp + $xplus_time); 
    
    setcookie('Maus', $MausWert , $cookie_time);


    und später in der Ausgabe kannst Du als DEBUG alle Cookies die gesetzt wurden
    dann wieder ausgeben / darauf zugreifen

    print '<pre style="margin4px; padding:6px; background:#DEDEDE; text-align:left;">'."\n"; 
    print_r($_COOKIE); 
    print '</pre>'."\n";



    also .... wichtig ist,
    dass setcookie() nicht nach der Ausgabe im Browser verwendet werden kann

  11. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Ok ihr habt meine Frage zwar vertauscht, wie gesagt, der Filter hat mit den Cookies nichts zu tun, aber vielen Dank für die Infos! Werde es später probieren ;)


    danke!!
  12. bastians-seite schrieb:
    Ok ihr habt meine Frage zwar vertauscht, wie gesagt, der Filter hat mit den Cookies nichts zu tun, ...
    Häh? Die letzten 3 Posts ham doch nichts mehr mit dem Filter zu tun, der letzte zieht ihn lediglich als Beispiel heran.
  13. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Jo ist ja jetzt egal ;)
  14. top-nebenverdienst-im-internet

    top-nebenverdienst-im-internet hat kostenlosen Webspace.

    Guten Tag,

    ziemliches WirrWarr da in deinem "Script". Fängst an PHP zu schreiben, mittendrin schreibst du HTML-Ausgaben und fängst in mitten dieser wieder an PHP zu schreiben.

    Das Problem, welches du hast ist ganz logisch und einfach - du versuchst mitten in der Ausgabe deiner Seite, das Cookie zu setzen, was natürlich nicht geht. Ist der Grund warum man PHP und HTML eigentlich voneinander trennt - jedenfalls mache ich das so, aus eben diesem Grund.

    Deine Abfragen - dem Design entsprechend, wo du das Cookie setzen willst gehören über den Kopf deiner Seite - sprich über deine ersten HTML Codes. Also quasi die Abfrage:

    if ($_POST['Design'] == "1") { var_dump(setcookie('Design',$Des[0],time()+2145900917)); } elseif($_POST['Design'] == "2") {var_dump(setcookie('Design',$Dese,time()+2145900917));
    			   } elseif($_POST['Design'] == "3") { var_dump(setcookie('Design',$Des[3],time()+2145900917)); }
    			   /* Design (Cursor) --------- Start ---------- */ $Ma = array("1","2","3");
    		       if ($_POST['Maus'] == "1") { var_dump(setcookie('Maus',$Ma[0],time()+2145900917));} 
    		       elseif($_POST['Maus'] == "2") { var_dump(setcookie('Maus',$Ma[1],time()+2145900917));} elseif($_POST['Maus'] == "3") {var_dump(setcookie('Maus',$Ma[2],time()+2145900917)); } 
    			   /* Startseite (Anzeige) --------- Start ---------- */ $SA = array("1", "2", "3");
    			   if ($_POST['StartAnzeige'] == "1") { var_dump(setcookie('SA',$SA[0],time()+2145900917));} elseif($_POST['StartAnzeige'] == "2") {var_dump(setcookie('SA',$SA[1],time()+2145900917)); }
    			   elseif ($_POST['StartAnzeige'] == "3") { var_dump(setcookie('SA',$SA[2],time()+2145900917)); } 
    			   /* Additional (Zusätzlich) --------- Start ---------- */ $Addit = array("1","2");
    			   if ($_POST['Addi'] == "1") { var_dump(setcookie('Zusatz',$Addit[0],time()+2145900917)); }  elseif($_POST['Addi'] == "2") { var_dump(setcookie('Zusatz',$Addi[1],time()+2145900917)); } 
    			   echo "<script>window.location = 'Index.php?seite=Einstellungen';</script>";


    ...wenn du denn dort - statt dem echo eine Variable benutzt kannst du diese eben dort einfügen, damit die Ausgabe erscheint welche du haben willst!
  15. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Das Problem an sich ist gelöst, und über guten oder schlechten Stil, Quelltext zu formatieren, lässt sich streiten, ist aber nicht Gegenstand des Threads. Daher: geschlossen
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!