PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VMS 1.2.0 Newssystem Problem



swinxx
24.01.2015, 14:20
Hey Leute,

ich benutze das VMS nun seit kurzem bei einer neuen Seite, welche ich für einen Chor als Homepage mache. Einige Funktionen des VMS sind auch da ganz praktisch, daher hab ichs auch gewählt. Nun hab ich aber leider mit dem Newssystem ein Problem:

Ich kann so wie´s sein soll im Adminforce einen Titel und Text im Formular eingeben und wenn ich auf "Absenden" klicke sehe ich das ganze dann an der Stelle auf der Seite wo die News eingebunden sind (also dieses Codestück mit der DB Abfrage zum News auslesen).
So !
Problem ist jetzt aber folgendes: Sobald ich die ersten News gepostet habe kann ich keine weiteren mehr posten! Also sobald ich die ersten News gepostet habe und dann versuche im Adminforce weitere News einzugeben funzt es nicht mehr. Die ersten News die ich gepostet habe bleiben weiterhin stehen, aber die neuen werden nicht angezeigt.
Normalerweise war es auch so, dass wenn ich über das Adminforce News gepostet habe, das Formular im Adminforce nach klick auf Absenden auch wieder leer war. Wenn ich jetzt auf Absenden klicke "blinkt" die Seite einmal kurz auf (so Reloadmäßig), aber die Texte bei Titel und im Textfeld bleiben stehen...

Also Anfangs dachte ich mir das es wohl was mit der DB zu tun hat, das ein Feld einen falschen Wert hat oder so und hab mir das mal angeschaut. Ich kenn mich zwar so gut wie 0 aus mit SQL, aber ich weiss, dass bei Tabellen wo immer nach und nach eine Zeile dazukommt ein "auto-increment" (oder so ähnlich) ist, wenn´s ne ID für die Felder gibt, damit die eben immer um eins weiterzählt.

Bei der News-Tabelle im SQL des VMS 1.2.0 war das abder nicht der Fall wie ich dann gesehen hab:

News Tabelle des VMS 1.2.0:


Tabellenstruktur für Tabelle `vms_news`
--

DROP TABLE IF EXISTS `vms_news`;
CREATE TABLE `vms_news` (
`id` int(11) NOT NULL default '0',
`zeit` int(11) NOT NULL default '0',
`titel` varchar(60) NOT NULL default '',
`news` longtext NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

--

... und dann hab ich mal bei der SQL meines VMS nachgesehen, mit welchem ich damals meine Loseseite betrieben hab und hab gemerkt das da in der SQL noch dieses "auto-increment" angegeben ist, in der SQL welche man für die VMS Installation ausführt (in der ID Spalte)!



CREATE TABLE `vms_news` (
`id` int(11) NOT NULL auto_increment,
`zeit` int(11) NOT NULL default '0',
`titel` varchar(60) NOT NULL default '',
`news` longtext NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

--

Jaaaa... und es ging dann so weiter das ich die alte NEws Tabelle gelöscht hab und diese mit dem "auto-increament" eingebaut hab. Dann hab ich mich zuerst auch mal voll gefreut, denn als ich die zweiten News gepostet hatte sah ich das das Formular im Adminforce leer war und die News gepostet wurden.

DOCH ZU FRÜH GEFREUT !

Ich hab versucht die dritten News zu posten und "Tadaaa" -> Es geht nicht :mad::mad::mad::mad::mad:

Ich konnte nun also genau zwei News posten und dann war ich wieder am selben Stand wie vorher - Toll ! Yeah !

Leute ich weiss nicht was ich machen soll! Ich kann mich erinner das ich noch niemals ein Problem mit dem Newssystem hatte, bei keiner meiner VMS Seiten... und ich hatte davon echt schon viele.

Ich hoffe jemand von euch findet die Zeit dafür und ist so nett mir ein wenig unter die Arme zu greifen damit ich das hinbekomme. Das NEwssystem ist wirklich sehr wichtig für die Seite die ich da erstelle.

Vielen Dank und greetz,
Swinxx

isaack
24.01.2015, 14:31
hast du mal in der db nachgeschaut ob die id auch wirklich von allein eingetragen wird?

swinxx
24.01.2015, 16:16
Also ich denke schon...

Hab mal nen Screen gemacht. Weiss jetzt aber nicht ganz genau wie du das meinst.

http://www.artensemble.at/swinxx/dbscreen.gif

Kraemer84
24.01.2015, 19:11
Das ist das Vms 2.5 Beta ?

Ansonsten kann man nur sagen .. verfolge den Weg was das Programm macht

Angefangen bei adminforce/content/newssystem/news.php (Ich gehe davon aus das die News nur auf der Seite laden)



if ($_POST['news4'] == 'seite') {
db_query("UPDATE " . $db_prefix . "_kontodaten SET news='1' WHERE 1");
if ($_POST['id'] == 0) db_query("INSERT INTO " . $db_prefix . "_news (zeit,titel,news) VALUES ('" . time() . "','" . $_POST['titel'] . "','" . $_POST['news'] . "')");
if ($_POST['id'] >= 1) db_query("UPDATE " . $db_prefix . "_news SET titel='" . $_POST['titel'] . "',news='" . $_POST['news'] . "' WHERE id='" . $_POST['id'] . "'");
}


hier einfach mal checken was passiert kann auch ersetzt bzw umgeändert werden (Dafür muss aber ein Datensatz immer in der Datenbank erhalten bleiben)



if ($_POST['news4'] == 'seite') {
db_query("UPDATE " . $db_prefix . "_news SET titel='" . $_POST['titel'] . "',news='" . $_POST['news'] . "' WHERE id='1'");
}


Hier auch wichtig das die id der News immer 1 ist

Wäre jetzt zb 1 Lösungsansatz falls es an den ids liegt


Lösungsansatz 2 Was mein vorposter wissen wollte .. ob dann wenn neue news erstellt werden, ob die abgespeichert werden aber nicht auf der Seite angezeigt werden

nicht das da der Fehler auf der Startseite im sql-statement ist mit dem News laden

isaack
24.01.2015, 21:42
Kraemer id der news immer eins? das geht doch nicht. dann würdest du immer nur die erste news in der db bearbeiten. oder nicht? :-)

swinxx mach doch mal bitte ein screen von der strucktur. steht in der db gleich neben anzeigen wie auf dem screen von dir zu sehen.

Kraemer84
24.01.2015, 22:12
Naja ok muss ich dazu sagen .. das war jetzt auch nur gedacht dafür das es immer nur einen Newsblock gibt der immer aktualisiert wird und nicht zig Newseinträge untereinander gespeichert werden.

Klar optional kann man zig Newseinträge untereinander speichern wenn ich aber an mein Verhalten denk.. Wenn ich auf eine Seite geh mit 300 Newseinträgen .. die les ich mir doch nicht alle durch

ansonsten gilt es hier einfach zu prüfen warum es nicht gespeichert wird. Ich würde hier sogar die keys und auto_increments entfernen und kein update nehmen sondern einfach nur ein insert into und jeweils die alte id auslesen und als id+1 abspeichern

aber muss ja jeder selber sehen

swinxx
24.01.2015, 22:23
Hier mal der Screen von der Struktur. Das is nun aber eben aus dem VMS wo in der SQL das auto-increment dabei is. In der vom VMS 1.2.0 is das ja nich dabei - evt sollte ich das wieder ändern...

Angezeigt bekomme ich übrigens immer nur die neuesten News und nicht alle (obwohl ich denke das es so sein sollte das alle untereinander angezeigt werden die geschrieben wurden).

http://www.artensemble.at/swinxx/struktur.gif

Danke euch schonmal für die viele Hilfe :)

Masterphil
25.01.2015, 11:38
Swinxx is back, freu...

Schreibe mal einfach eine News ohne Sonderzeichen , habe da ein ähnliches Problem, denke liegt an der Formatierung.

MfG

swinxx
25.01.2015, 16:05
Wow alter, ich glaub du hast recht!

Hab grad nochmal probiert und einfach zwei normale Worte reingeschrieben und es hat funktioniert. Ich konnte eine dritte und auch eine vierte News posten...

Hst du ne Lösung für das Problem, oder bist du da auch noch am grübeln? Das blöde bei mir is auch das ich gerne hätte das alle News angezeigt werden, die neuesten immer ganz oben. Aber es zeigt mir immer nur die letzten an die ich gepostet hab. Ich kann mich nich erinnern ob das immer so war, hatte mir eingebildet das es damals so war das alle angezeigt wurden. Naja...

Also wenn du da was weisst das ich machen kann dann wärs nice wenn du mir da mal helfen könntest!

cu, Swinxx

Kraemer84
25.01.2015, 18:30
Die Variable raussuchen welche die Informationen in der Datenbank speichert und dann abändern



$eintrag = $_POST['eintrag'];
$eintrag_fixed = ($eintrag, ENT_QUOTES);


das ist für die sonderzeichen zuständig

Ghost-IT
26.01.2015, 08:33
@swinxx
Kraemer hat ja schon dein Problem oben gelöst zum Thema mehrere News musst du dir mal diese Zeile angucken
$news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC LIMIT 1"); (findest du in content/intern/startseite.php)
Diese sagt an DESC (absteigend sortieren)
LIMIT 1 ( Ein Datensatz aus der Datenbank verwenden)
Also kann garnicht mehr als eine News abgebildet werden.
Ändere dieses einfach auf die Zahl wie viele Datensätze du gerne hättest das auslesen übernimmt der Array darunter.
Also einfach
$news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC LIMIT 5");
zum ausgeben von 5 Datensätzen

swinxx
26.01.2015, 12:45
Na das nenn ich mal ne richtige Erklärung für nen php-noob für mich. Danke, habs hinbekommen, besser hätte die Erklärung nicht sein können - plötzlich erscheint es so logisch^^

lg, swinxx

Ghost-IT
26.01.2015, 12:53
Habe ja auch mit dem ganzen mal angefangen und War immer froh wenn mir jemand was detailliert erklärt hat und nicht einfach nur die Lösung dahin geschrieben hat ;)
Und jetzt probiere ich mich mal an vms^^

swinxx
26.01.2015, 13:38
Zu der Sache mit den Sondezeichen kann ich mittlerweile folgendes sagen:

Das Problem dürfte das "%" Zeichen sein. Hab alle anderen getestet, es gab nur bei dem Probs. Also genau getestet habe ich jetzt alle Sonderzeichen welche über den Zahlen-Tasten stehen von ! bis ?. Und wie gesagt, alle haben funktioniert ausser das Prozentzeichen...

Hoffe das hilft weiter...

LG, Swinxx

swinxx
26.01.2015, 13:44
Ähm, so mal nebenbei noch dazu: Es gibt ja ne Global Variable in php welche ich nutzen kann um Zeit und Datum auszugeben.

Könnte mir jmd kurz sagen wie die genau lautet und wie ich sie in diesen Code einbaue wenn ich das Datum neben dem Titel stehen haben möchte!?

Das is der Code:


<? $news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC LIMIT 15");
while ($nz = mysql_fetch_array($news)) {
echo '&nbsp;&nbsp;<b><u>';
echo nl2br($nz['titel'].'</u></b><br /><br />'. $nz['news'].'<hr><br />');
} ?>

Die vielen Zeilenumbrüche und so sind von mir da ich die menu_head und _foot Tags rausgenommen hab und die News in einer Box anzeiegen lasse anstatt für jeden Newseintrag eine eigene Box zu erstellen...

Also für die Hilfe wäre ich wie immer sehr dankbar, ihr habt mir bisher auch immer wirklich schnell geholfen - Danke danke danke :)

lg, Swinxx

Ghost-IT
26.01.2015, 15:19
Ich gehe mal davon aus das du das datum von dem tag als du den Post verfasst hast meinst oder ?

swinxx
26.01.2015, 16:14
Jupp, genau, einfach die Zeit zu der ich den Newsbeitrag "abschicke"...

Ghost-IT
27.01.2015, 07:43
Ich bin mir nun nicht genau sicher was du meinst da das Datum ja schon ausgegeben wird. Um genau zu sein hier.
if ($_SESSION['login'] == 'true'){
$news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC LIMIT 15");
while ($nz = mysql_fetch_array($news)) {
head($nz['titel'].' vom '.date("d.m.Y - H:i:s",$nz['zeit']));
echo nl2br($nz['news']);
foot();
}
}

Das .date sagt an das Php das ganze umwandeln soll.
d.m.Y sagt an das er nach Tag, Monat, Jahr sortieren soll.
H:i:s sagt an das er die Uhrzeit sortieren soll nach in diesem Fall
H = 24 Stunden Format Stunde
i = Minuten mit führender Null also 00-59
s = Sekunden mit führender Null also 00-59
$nz['zeit'] = Ist der Timestamp der aus der Datenbank abgegriffen wird da $nz das Datenarray ist und ['zeit'] ist die Variable aus dem Array die er nehmen soll.
Wenn du nun nur das Datum haben willst heißt der Code

if ($_SESSION['login'] == 'true'){
$news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC LIMIT 15");
while ($nz = mysql_fetch_array($news)) {
head($nz['titel'].' vom '.date("d.m.Y",$nz['zeit']));
echo nl2br($nz['news']);
foot();
}
}

Ich hoffe ich bin auf das richtige eingegangen. Wenn noch Fragen ausstehen schreib ruhig ;)

Gruß

Kraemer84
27.01.2015, 10:22
Nutze bitte für php die php tags :)



$quellcode

swinxx
27.01.2015, 20:11
@Ghost-IT: Hat perfekt gefunzt mit dem Datum - is schon eingebaut!

Danke dir :)
lg, Swinxx

swinxx
29.01.2015, 18:23
@Masterphil: Hast du ne Ahnung woran das legt das man bei den News das "%"-Zeichen nicht verwenden kann ? Wie gesagt: Alles funktioniert, ausser das % Zeichen, sobald das drin is ann man die News nicht mehr posten...

Wäre nice wenn du dafür ne Lösung hättest!

lg, Swinxx

Kraemer84
30.01.2015, 00:31
% ist einfach problematisch ..




$text_fixed = str_replace("%","Prozent",$text);


so hab ich das bei einem fwx gelöst ..

swinxx
13.02.2015, 19:24
% ist einfach problematisch ..




$text_fixed = str_replace("%","Prozent",$text);


so hab ich das bei einem fwx gelöst ..

KK, das is ja mal ne gute Sache. Wenn ich das in mein VMS einbauen will nehm ich mal an das ich den Codeschnippsel irgendwo in der news.php einbauen muss welche im Adminforce Verzeichniss liegt, da dort ja der Code ist welcher die News in die DB schickt sobald ich sie über das Formular abgeschickt hab...

Ist das richtig ? Wüsste nicht wo sonst und das ich den Code nicht bei der Ausgabe der News im Userbereich einbauen muss is ja klar.

Also genauer gesagt denk ich mal der Code gehört da wo rein:


<?
if (!isset($titel)) $titel = '';
if (!isset($news)) $news = '';
if (!isset($id)) $id = '0';
if (!isset($_POST['auffuehren'])) $_POST['auffuehren'] = '0';
if (!isset($_POST['load'])) $_POST['load'] = '0';
if (!isset($_POST['loader'])) $_POST['loader'] = '';
if (!isset($_POST['newsletter'])) $_POST['newsletter'] = '';

if ($_POST['auffuehren'] == 'Ausführen') {
if ($_POST['id'] == 0 ){
if ($_POST['art'] == 1 || $_POST['art'] == 2) db_query("INSERT INTO ".$db_prefix."_news (zeit,titel,news) VALUES ('".time()."','".$_POST['titel']."','".$_POST['news']."')");

if ($_POST['art'] == 1 || $_POST['art'] == 3) {
$empfaenger = db_query('SELECT emailadresse FROM '.$db_prefix.'_emaildaten WHERE freigabe_fuer = 1 OR freigabe_fuer = 3 GROUP BY emailadresse');
while ($user = mysql_fetch_assoc($empfaenger)) usermail ($user['emailadresse'], $_POST['titel'], $_POST['news'], '"'.$seitenname.'" <'.$betreibermail.'>');
}
} else db_query("UPDATE ".$db_prefix."_news SET titel='".$_POST['titel']."',news='".$_POST['news']." WHERE id='".$_POST['id']."'");
}

if ($_POST['load'] == 'Editieren') {
$edit = mysql_fetch_array(db_query("SELECT titel,news,id,zeit FROM ".$db_prefix."_news WHERE id=".(int)$_POST['loader']." LIMIT 1"));
$titel = $edit['titel'];
$news = $edit['news'];
$id = $edit['id'];
}

if ($_POST['load'] == 'Löschen') {
db_query("DELETE FROM ".$db_prefix."_news WHERE id='".(int)$_POST['loader']."' LIMIT 1");
}

$old_news = db_query("SELECT * FROM ".$db_prefix."_news ORDER BY id DESC");
?>

Ich hoffe das darf ich so posten :mad:

Wäre toll wenn jmd nen Moment Zeit hätte um mir zu verraten wo genau ich das am besten reinhau...

Wie immer bedanke ich mich auch wieder vielmals für die schnelle Hilfe :)

cu, Swinxx


*Edit*
Frage: Welchen Tag-Button muss ich verwenden damit der php Code den ich hier poste auch so schön gehighlightet wird? Immer wenn ixh zwischen die "php" Tags schreibe steht der Code zwar in einem Codefenster, aber immer alles in schwarz :(

Kraemer84
14.02.2015, 12:26
Jeweils nach den Posts.. :)



if ($_POST['auffuehren'] == 'Ausführen') {
$news = str_replace("%","Prozent",$_POST['news']);
$titel = str_replace("%","Prozent",$_POST['titel']);

// und im insert into abändern

...VALUES ('".time()."','".$titel."','".$news."')");