PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Neuer Beitrag oder nicht Problem (http://www.selfphp.de/forum/showthread.php?t=24308)

SchwarzerMagier 28.07.2011 16:33:24

Neuer Beitrag oder nicht Problem
 
Hallo SelfPHp Com.
Ich habe ein groß und wieder rum kleines Problem.
Und Zwar ich schreibe grade ein Forum nun bin ich zu der Anzeige gekommen ob ein neuer Post oder etwas neues Vorhanden ist.
Doch dabei henkt es seit 2 tagen und ich habe keine ahnung warum habe es schon in 2 anderen Foren gepostet, doch keine hilfe mehr.

Es wird in eine Tabelle Namens thema_gelesen ein Eintrag gemacht mit Datum, ThemaID.
nun soll überprüft werden ob ein Eintrag vorhanden ist oder nicht.
Wenn keiner Vorhanden ist dann anzeigen das ein neuer Beitrag vorhanden ist.
wen einer Vorhanden ist dann Prüfen ob Datum neuer als das In der Tabelle Thema
und dann anzeigen das kein neuer Beitrag vorhanden ist
aber das geht nicht.

hier meine 2 Tabellen

Zitat:

CREATE TABLE IF NOT EXISTS `thema_gelesen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Username` varchar(30) NOT NULL,
`Tid` int(10) NOT NULL,
`Datum` datetime NOT NULL,
PRIMARY KEY (`id`)
)
Zitat:

CREATE TABLE IF NOT EXISTS `thema` (
`PID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Autor` varchar(50) NOT NULL,
`Datum` datetime NOT NULL,
`Titel` varchar(120) NOT NULL,
`Inhalt` text NOT NULL,
`Tid` int(10) NOT NULL,
`Kid` int(10) NOT NULL,
PRIMARY KEY (`PID`)
)
so hier mein Code der das anzeigen soll

Code:

<div class="kat">
    <br>
    <br>
<?php

include 'connect.php';

$kid = 0;
if( isset( $_GET['kid'] ) ) {
  $kid = intval($_GET['kid']);
}
If( $_SESSION['recht'] == "A" ){
        if($_SESSION['recht'] == "B")
    {
    }
}else{
    if($_SESSION['recht'] == "B")
    {
       
   
    } 
}   

   
$query = "SELECT * FROM Thema WHERE Kid = '$kid' GROUP BY Tid
";
$username = $_SESSION['username'];
        $select = "SELECT thema.Datum, thema_gelesen.Datum, thema.Tid, thema_gelesen.Username, thema.PID FROM thema_gelesen  LEFT JOIN thema ON thema.Tid = thema_gelesen.Tid WHERE thema_gelesen.Username = '$username' GROUP BY thema.Tid ";

if ($result = mysqli_query($db, $query)) {
   



       
       

       

    /* fetch associative array */
    while ($datensatz = mysqli_fetch_assoc($result))
        {        $Datum = $datensatz['Datum'];
                $tid3 = $datensatz['Tid'];
                        echo '<div class="Tuser">';
        echo $datensatz['Autor'];
        echo '</div>';
        echo '<div class="TTitel">';

                            if ($result1 = mysqli_query($db, $select))
                {
   
    while ($row = mysqli_fetch_array($result1))
        {                  $tid1 = $row['Tid'] == $tid3;
                        $Datum1 = $row['Datum'];


       
        if (!isset($tid1))
        { 
         
           
                        echo '11111';

            echo '<img src="img/on.gif">';
           
        }else
        {
       
            If ($Datum1 < $Datum)
            {
                                echo '2222';
                echo '<img src="img/on.gif">';     
            }else
            {  if($tid1 = $tid3)
            {
                                echo '3333';
                                 
                        echo '<img src="img/off.gif">';
            }else
            {
                echo '<img src="img/on.gif">';   
            }
            }

 

       
        }
                }
                }
        echo sprintf('<a href="index.php?site=Thema&kid=%d&tid=%d">%s</a>', $kid, $datensatz['Tid'], $datensatz['Titel']);
        echo '</div><hr>';


        }
echo '<div class="newThema"><br><br><br><br>';
echo sprintf('<a href="index.php?site=ThemaErstelen&kid=%d">neuesThema</a>', $kid);
echo '</div>';



}

else
{
    echo'sie haben nicht das Recht Ein neues Thema zu schreiben';
}


     
   



?>
</div>

Bin echt vol am ende ka mehr was ich noch machen soll

TeX 29.07.2011 12:34:35

Hö?

Na Du brauchst doch nur Datum, Thread und den User in eine separate Tab zu legen. Du ließt dann nur noch je nach Thread und User das Datum aus.

PHP-Code:

$check=mysql_query("SELECT `datum` FROM `thema_gelesen` WHERE `user`='meine_ID' AND `ThemaID`='ID' ORDER BY `datum` DESC LIMIT 1"); 

Damit bekommst Du das Datum von dem Thread wo der User das letzte mal drauf war. Jetzt nur noch vergleichen (mit dem Datum des originalen Thread) und schon hast Deine Anzeige.

Vielleicht ist es auch nur die falsche Herangehensweise?

Wenn ich mir so überlege (stande auch schon vor vielen Jahren vor dem Problem) , was dann mit der Funktion "alle Foren als gelesen markieren" ist?

Trägt man nun alle Threads des Users mit neuerem Datum nach längerer Pause in die DB ein (die Tab wird rießig)?

Ich glaube ich hatte das rückwerts gelöst und zwar hatte ich bei jedem Thread die UserID´s als String ala _1_4_7_12_676_ ... in einem Feld abgespeichert und beim Besuch der letzten Seite des Threads die eigene ID wieder entfernt. Einträge die älter als z.B. 30 Tage sind wurden dann geleert.

Kann auch sein das ich das mit Cookies gemacht katte, vielleicht fällt ja jemanden anderes noch was ein.

SchwarzerMagier 01.08.2011 01:43:45

AW: Neuer Beitrag oder nicht Problem
 
Jetzt bin ich verwert
(durchnander)

Im anderen Forum labern alle dafon Lefft Join Ubendingt das Werte die NULL sind auch genommen werden

TeX 01.08.2011 09:21:39

AW: Neuer Beitrag oder nicht Problem
 
Ist halt eine Frage wie man das System aufbaut. Man kann natürlich auch eine Tabelle erstellen wo alle besuchten Thread´s enthalten sind und das mit LEFT JOIN lösen. Diese Tabelle sollte aber regelmäßig gesäubert werden.

SchwarzerMagier 02.08.2011 16:31:53

AW: Neuer Beitrag oder nicht Problem
 
So gut danke geht nun alles

nun muss ich mich an die Formartierungs Functionen machen wen man ein thema schreibt

aber ich habe keine genaue Vorstellung wie ich meine diese funktionen hier

[.LIST=1]
[./LIST][.B][./B]
[.CENTER][./CENTER]

ich weis nur das man es denke ich mal so macht aber wie man dann macht das es in der Text box erscheint ka
Js hat man mir gesagt soll gehen
If ("[CENTER]"){
<center>
}

TeX 03.08.2011 13:51:08

AW: Neuer Beitrag oder nicht Problem
 
Ich denke mal Du meinst die Buttons die man z.B. für Fettschrift drückt und dann der Code in eine Textarea geschrieben wird?

Falls ja, das geht mit JS.

HTML-Code:

<input type="button" id="bu_fett" value="fett" onClick="document.getElementById('ta').value=document.getElementById('ta').value + '[b][/b]';" /><br />
<textarea id="ta" style="width:500px;height:500px;"></textarea>

Kannst es ja mal testen und evtl. werweitern, oder z.B. den JS-Code in eine Funktion packen, dann ist es nen bissel leichter eine neue Box zu erstellen.



Um den Text dann wieder umzudrehen kannst Du das z.B. so machen:

PHP-Code:

<?php
$text
='hier [i]ist[/i] mal [u]mein[/u] [b]Text[/b] aus der [i][u][b]Datenbank[/b][/u][/i]...';

$form_array['[b]']='<strong>';
$form_array['[/b]']='</strong>';
$form_array['[i]']='<i>';
$form_array['[/i]']='</i>';
$form_array['[u]']='<u>';
$form_array['[/u]']='</u>';

foreach(
$form_array as $k => $w){
    
$text=str_replace($k,$w,$text);
}

echo 
$text;
?>


SchwarzerMagier 03.08.2011 22:22:38

AW: Neuer Beitrag oder nicht Problem
 
Danke dir bei mir siht der js code so aus

Zitat:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Einf&uuml;gen von Inhalten in eine Textarea</title>
<script type="text/javascript">
<!--
function insert(aTag, eTag) {
var input = document.forms['formular'].elements['eingabe'];
input.focus();
/* für Internet Explorer */
if(typeof document.selection != 'undefined') {
/* Einfügen des Formatierungscodes */
var range = document.selection.createRange();
var insText = range.text;
range.text = aTag + insText + eTag;
/* Anpassen der Cursorposition */
range = document.selection.createRange();
if (insText.length == 0) {
range.move('character', -eTag.length);
} else {
range.moveStart('character', aTag.length + insText.length + eTag.length);
}
range.select();
}
/* für neuere auf Gecko basierende Browser */
else if(typeof input.selectionStart != 'undefined')
{
/* Einfügen des Formatierungscodes */
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
/* Anpassen der Cursorposition */
var pos;
if (insText.length == 0) {
pos = start + aTag.length;
} else {
pos = start + aTag.length + insText.length + eTag.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
/* für die übrigen Browser */

}
//-->
</script>
</head>
<body>
<
<form name="formular" action="">
<p><textarea name="eingabe" cols="30" rows="10">Ihre Nachricht</textarea></p>
<p><input type="button" value="Einfügen" onClick="insert('', '')"></p>
<p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>
<p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>
<p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>
<p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p> <p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>
<p><input type="button" value="Einfügen" onClick="insert('[link]', '[/link]')"></p>

</form>
</body>
</html>
habe ich im inet gefunden habe nie js gelernt und finde keine gute tuds

TeX 04.08.2011 08:56:03

AW: Neuer Beitrag oder nicht Problem
 
Du solltest Dich erstmal mit den Grundsachen von JS beschäftigen bevor Du Dich an solche Sachen wagst. Der zugeschickte Code ($_POST) muß noch gecheckt werden (SQL-injection etc.).

HTML-Code:

<?php

if(!empty($_POST['s']) && !empty($_POST['ta'])){
       
        $text=$_POST['ta'];
       
        $form_array['[b]']='<strong>';
        $form_array['[/b]']='</strong>';
        $form_array['[i]']='<i>';
        $form_array['[/i]']='</i>';
        $form_array['[u]']='<u>';
        $form_array['[/u]']='</u>';
       
        foreach($form_array as $k =>
$w){
                $text=str_replace($k,$w,$text);
        }
       
        # weiterverarbeitung der Variablen (z.B. auf bösen Code checken etc.)
        echo nl2br($text).'<hr />';
        $ta=$_POST['ta'];
}

?>


<!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">
        <head>
                <title>test</title>
               
                <script type="text/javascript">
                <!--
                function insert(aTag, eTag, eID) {
                        var input = document.getElementById(eID);
                        input.focus();
                        /* für Internet Explorer */
                        if(typeof document.selection != 'undefined') {
                                /* Einfügen des Formatierungscodes */
                                var range = document.selection.createRange();
                                var insText = range.text;
                                range.text = aTag + insText + eTag;
                                /* Anpassen der Cursorposition */
                                range = document.selection.createRange();
                                if (insText.length == 0) {
                                        range.move('character', -eTag.length);
                                } else {
                                        range.moveStart('character', aTag.length + insText.length + eTag.length);
                                }
                                range.select();
                        }
                        /* für neuere auf Gecko basierende Browser */
                        else if(typeof input.selectionStart != 'undefined')
                        {
                                /* Einfügen des Formatierungscodes */
                                var start = input.selectionStart;
                                var end = input.selectionEnd;
                                var insText = input.value.substring(start, end);
                                input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
                                /* Anpassen der Cursorposition */
                                var pos;
                                if (insText.length == 0) {
                                        pos = start + aTag.length;
                                } else {
                                        pos = start + aTag.length + insText.length + eTag.length;
                                }
                                input.selectionStart = pos;
                                input.selectionEnd = pos;
                        }
                        /* für die übrigen Browser */
               
                }
                //-->

                </script>
               
        </head>
       
        <body>
               
                <form method="POST">       
                <input type="button" value="B" onClick="insert('[b]', '[/b]', 'ta')" />
                <input type="button" value="I" onClick="insert('[i]', '[/i]', 'ta')" />
                <input type="button" value="U" onClick="insert('[u]', '[/u]', 'ta')" /><br />
                <textarea id="ta" name="ta" style="width:500px;height:300px;"><?php if(!empty($ta)){echo $ta;}?></textarea>
                <br />
                <input type="submit" name="s" value="speichern" />
                </form>
        </body>
</html>


SchwarzerMagier 04.08.2011 14:03:02

AW: Neuer Beitrag oder nicht Problem
 
Das mache ich in php hasse javascript
wen ich mysqli_real_escape string nutze kann man dann immer noch injekten ?

SchwarzerMagier 12.11.2011 14:32:22

AW: Neuer Beitrag oder nicht Problem
 
SO noch mal eine Kleine Frage
kann ich es nicht teoretisch so machen dass ich einfach eine zahlen reie mit den Post eintregen mache z.B 1, 2, 3
und diese dann mit einem Array durchsuche nach der aktuelen Post id und wenn dann eine Im Thema hinzukommt dieses dann als gelessen markiere
allso z.B
1, 2 ,3 steht in gelesen tb.

nun kommt im thema id 4 dazu dass steht nicht in der gelesen table allso neu beitetrag das ich das mit einer schleife durchsuche dann ist nur mein prob wie mache ich es das ich eine zahl neu hintendran hängen kann


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:16:52 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.