Ergebnis 1 bis 20 von 288

Thema: Allgemeiner Fragenthread II

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Teelicht Beitrag anzeigen
    Da ich nur (fortgeschrittener?) Anfänger in PHP bin: Was sollte man denn stattdessen nutzen? Lieber Require()? Und was ist denn an include() so unelegant?
    Ich include hier eine .html Datei. include() interessiert die Dateiendung aber nicht, ein <?php ?> Block wird immer ausgeführt (auch wenns ne .txt Datei ist). In einer .html Datei hat sowas aber nix zu suchen, und es wäre wahrscheinlich auch nicht erwünscht, dass solche Blöcke ausgeführt werden. Also wäre echo file_get_contents('navigation.html'); wesentlich eleganter, da es verhindert, dass ein Angreifer sich den eventuell variablen Dateinamen zu Nutzen macht um eine PHP Datei auszuführen, die er vorher auf den Server eingeschleust hat. Frag mich nicht wie, aber es geht ums Prinzip

    require() würde ich da nicht benutzen. Lieber ein if(include('navigation')) { ... }, um evtl. eine geeignete Fehlermeldung anzuzeigen, die keine Daten preisgibt, die der Benutzer nicht sehen soll. require() würde ich nur für PHP Dateien benutzen, die Funktionen und Klassen enthalten, die für die spätere Ausführung gebraucht werden und im Allgemeinen nicht fehlen sollten.

  2. #2

    [MySQL] Fehler

    Wo ist hier der SQL Fehler?
    Code:
    UPDATE `benutzer` SET `Ben_Geburtstag` = '1991-09-19', SET `Ben_ICQ` = '477582719', SET `Ben_Website` = NULL, SET `Ben_Interessen` = 'Internet (HTML, CSS, JavaScript, PHP)', SET `DatumBesuch` = NOW() WHERE `ID` = 1 LIMIT 1;
    Das ist die SQL, die mit mysql_query($SQL, $DBVerbindung); geupdatet werden soll.

    Warum gibt er folgenden Fehler aus?
    Code:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET `Ben_ICQ` = '477582719', SET `Ben_Website` = NULL, SET `Ben_Interessen` = 'I' at line 1

  3. #3
    Weil du das SET nur einmal schreiben darfst.

  4. #4

    Dankö!

    Achso, klar, danke!^^

  5. #5
    Hallo allerseits, hab ne kurze Frage.
    Ich wollt mir mal ein "Wer ist Online?" Script erstellen, bei dem alle registrierten Benutzer erfasst werden, die gerade online sind.
    Da hab ich mir gedacht, dass ich in der Usertabelle in der DB das Attribut "Online" hinzufüge, und auf die index.php ein Script packe, welches jedes mal den Wert 1 einträgt.
    Naja und letztendlich werden alle User gezählt, deren "Online" Wert "1" beträgt.
    Sollte soweit klappen, nur weiß ich nicht, wie man nach einer gewissen Zeit wieder 0 eintragen kann, sofern der User nicht mehr aktiv ist

  6. #6
    Bei der Variante bräuchtest du noch ein Extra-Feld des Typs Timestamp "Letzte Aktion". Bei jedem Aufruf der Seite (oder auch jedem zehnten, wenn das genügend sind), resettest du dann alle Online-Flags von Usern, deren letzte Aktion schon länger als x Minuten her ist.
    Kannst aber auch gleich eine neue Tabelle nehmen, dann brauchst du nur User ID und Timestamp und löschst die Einträge der Nicht-Aktiven einfach. Kann aber nicht sagen, was performanter ist, das müsstest du ausprobieren, wenn's dir drauf ankommt. Viel Arbeit ist's eh nicht.

  7. #7

  8. #8
    Hui, heut will ich auch mal eine frage stellen.


    Ich werd hier noch bekloppt, ich verstehe einfach nicht warum mir der http://validator.w3.org/ kein richtiges UTF-8 Encoding ausgibt.

    Bekomme immer diese Meldung:
    Zitat Zitat
    The character encoding specified in the HTTP header (iso-8859-1) is different from the value in the XML declaration (utf-8). I will use the value from the HTTP header (iso-8859-1).
    So und hier der Quelltext:

    HTML-Code:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<title>{title}</title>
    	<link rel="stylesheet" type="text/css" href="firmen/{firma}/style/style.css" />
    </head>
    <body>
    	<div id="head">
    		<div id="headTwo">
    			<h1>{title}</h1>
    			<h2>wushu</h2>
    		</div>
    	</div>
    	<ul id="navi">
    		<li><a href="?page=0">Start</a></li>
    	</ul>
    	<div id="content">
    		{content}
    	</div>
    </body>
    </html>
    Koennt ihr mir da weiterhelfen? Werd hier bald kirre.

    gruss deadshox

  9. #9
    Steht ja eh schon in der Meldung: im HTTP-Header wird statt utf-8 iso-8859-1 als Encoding angegeben.
    Das ist leider immer ein ziemliches Problem, hängt nicht an der HTML-Datei sondern am Server. Als Ausweg gibt es zwei Möglichkeiten:
    Entweder du darfst vom Anbieter aus .htaccess-Dateien erstellen (und der Server verwendet Apache), dann kannst du dort einstellen, dass HTML-Dateien allgemein, oder die Datei im Speziellen, als utf-8 ausgeliefert werden sollen.
    Oder du darfst PHP-Dateien verwenden, dann könntest du eine erstellen, die zuerst header('Content-Type: text/html; charset: utf-8'); aufruft und dann die jeweilige Datei ausgibt, was allerdings ein Performanceverlust wäre.

    In die .htaccess-Datei müsste folgendes:
    Code:
    AddCharset utf-8 .html
    
    # Oder, für bestimmte Files mit utf-8:
    <Files "example.html">
    AddCharset utf-8 .html
    </Files>

  10. #10
    Nebenbei, wenn du utf-8 verwendest ist die XML-Deklaration optional. Und du solltest sie auch weglassen, da sie nur schädlich ist.

  11. #11
    Hallo !
    Ich stehe vor folgendem Problem:
    Ich möchte gern ein PN Script (Ohne PN Anzeige) kreieren, dafür allerdigns nur eine einzige Datei verwenden.
    Das heißt, dass sowohl der DB-Eintrag, also auch die Anzeige des Formulars in eine Datei gebracht werden müssen.
    Soweit kein Problem, ich benutze ein verstecktes Inputfeld, in welchem eine bestimmter Wert übergeben wird.
    Beim Absenden der Nachricht wird überprüft, ob der genannte Wert vorhanden ist, und sofern er es ist, führt die Datei den Eintrag-Part durch; ist er es nicht, wird das Formular angezeigt.
    Nur ist mein Problem, was wohl auch ein albekanntes darstellt, dass man nach dem erfolgreichen Eintrag F5 drückt und ein zweiter Eintrag durchgeführt werden kann, was ich gerne verhinden möchte.
    Eigentlich wäre das auch kein Problem, da ich wieder die Methode des versteckten Inputfeldes verwenden könnte, was sonst auch immer geklappt hat.
    Nun habe ich allerdings die Schwierigkeit, dass der Script sich eben in einer Datei befindet, demnach werden also 2 solcher Inputs verwendet, was logischerweise das Überprüfen per if unmöglich macht.

    Zum Verständnis nochmal der Code (ohne F5 Sicherheit)

    PHP-Code:
    <?php

    $empf 
    $username;
    $rec $_POST["rec"];
    $subj $_POST["subj"];
    $titel $_POST["titel"];
    $pnon $_POST["pnon"];


    $time time();


    if (
    $from == "da")
    {
    $eintrag "INSERT INTO user_pn
             (sender, receiver, message, time, titel)
             VALUES
             ('
    $username', '$rec', '$subj', '$time', '$titel')";

             
    $eintragen mysql_query($eintrag);

    $send "yes";
    }
    else
    {
    echo
    "

    <form action='?content=newpn' method='post'>
    <br />
    <div style='margin: 5px;'>
    <br />
    <input type='hidden' name='form' value='da' />

    <!-- Formulardaten -->

    </form>"
    ;
    }

    ?>

  12. #12
    Entweder du machst eine Zeitsperre über die Session rein oder Aktions-IDs.

    Im ersten Fall speicherst du beim Absenden des Formulars den aktuellen Timestamp in der Session ab und überprüfst den halt:
    PHP-Code:
    <?php
    if($_SESSION['pm_time'] < time() - 60)
    {
      
    // Versende die PM

      
    $_SESSION['pm_time'] = time();
    }
    else
    {
      
    // Warten...
    }
    ?>
    Im anderen Fall generierst du eine ID, wenn das Formular angezeigt wird, der dann mit dem Formular verschickt wird. Mithilfe von diesem Wert kannst du dann überprüfen, ob das Formular bereits abgeschickt wurde:
    PHP-Code:
    <?php
    if(...)
    {
      if(!
    $_SESSION['action_id'])
      {
        
    $_SESSION['action_id'] = uniqid('pm_'true);
      }

      
    // Dein Formular mit der ID
      
    echo '<input type="hidden" name="action_id" value="'.$_SESSION['action_id'].'">';
    }
    else
    {
      if(
    $_POST['action_id'] && $_SESSION['action_id'] == $_POST['action_id'])
      {
        
    // Alles OK

        
    unset($_SESSION['action_id']);
      }
      else
      {
        
    // Schon abgeschickt
      
    }
    }
    ?>
    Ich hoffe das hilft dir weiter...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •