Php erstellt automatisch Mysql Tabellen ...

Matlox

Mitglied
Hi Leute,
heute bin ich wieder um einiges weiter, doch folgendes Problem habe ich noch.
Sobald ich das Formular aufrufe (Newsadmin.php) erstellt er schonmal (ohne Klick auf Submit) news in die Mysql Datenbank und wenn ich dann News ins Formular schreibe und absenden mach, dann nochmal :D, wie bekomm ich es weg das er die ersten news automatisch erstellt? achja und wie schaff ich es das er das Datum auch einfügt, so funktionierts nicht?:

admin/News.php
PHP:
<?php
	session_start();

	mysql_query("INSERT INTO news (titel, datum, inhalt) 
	VALUES ('$titel', '$datum', '$inhalt')"); 

	$datum = $datum; 
	$inhalt = $date("Y.m.d");
	$titel = $titel;

{
	eval ("dooutput(\"".gettemplate("tpl/newsadmin")."\");"); 
}

?>

tpl/newsadmin.html:
HTML:
<table width="100%"> 
 <form action="index.php?section=newsadmin" method=post> 
  <tr> 
   <input type="hidden" name="action" value="save"> 
   <td><input type=text name=titel size="26" value="Newstitel"></td> 
  </tr> 
  <tr> 
   <td><textarea name="inhalt" rows="9" cols="43">Newstext</textarea></td> 
  </tr> 
  <tr> 
   <td><input type=submit value="News erstellen !"></td></form> 
  </tr>
 </table>
 
Kann mir gut vorstellen, dass es dir einen Datensatz einträgt, wenn du gleich nach Aufruf des Scriptes einen entsprechenden Query absetzt.

Date kann nicht funktionieren, da du es als Variabel-Funktion-Zwitterding behandelst. Keine Ahnung was du da wurstelst, aber ich denke du solltest noch einmal den Absatz über Variablen und dann den über Funktionen lesen. Auch die Doku von date() dürfte dir gefallen:

http://de.php.net/manual/de/function.date.php

Klartext:

PHP:
//Nicht funktionsfähiges Zwitterding weil:
- Kein Funktionsaufruf
- Kein Zeitstempel der mit den Formatangaben formatiert werden könnte
$inhalt = $date([...]);

//Schon besser
$inhalt = $date("Y.m.d", time());

Lesen, lesen, lesen. Mühsam, was? ;)

Gruss
De Igäl
 
Der zweite Parameter der date()-Funktion ist optional; falls er nicht angegeben wird, wird der Wert der time()-Funktion genommen. Demzufolge ist der Aufruf der date-Funktion nur mit Formatparameter korrekt.
 
Hallo Matlox

deinem Aufbau zufolge ist es kein Wunder warum er schon am Anfang etwas in die DB hineinschreibt. Aber auch so nebenbei machst du paar merkwürdige Sachen :)
Das Eintragen der News sollte an einer Bedingung geknüpft sein und zwar diese, dass der User das Formular abgeschickt hat.

PHP:
// admin/news.php
if (isset($_POST['send']))
{
  $titel = trim(strip_tags(mysql_real_escape_string($_POST['titel'])));
  $news = trim(strip_tags(mysql_real_escape_string($_POST['news']))); 
  // Eintrag in die DB
  mysql_query("INSERT INTO news (titel, datum, inhalt) 
  VALUES ('$titel',NOW(), '$newst');");  
}
else eval ("dooutput(\"".gettemplate("tpl/newsadmin")."\");");
Unbekannte Funktionen bitte im Manual nachschlagen. Übergebene Variablen werden mit $_POST (bei Formular) und $_GET (bei URL) angesprochen und geprüft.

Beim Formular achte auf die Anführungszeichen und das jedes Element einen namen bekommt.
HTML:
<form action="index.php?section=newsadmin" method=post> 
  <tr> 
   <input type="hidden" name="action" value="save"> 
   <td><input type="text" name="titel" size="26" value="Newstitel" /></td> 
  </tr> 
  <tr> 
   <td><textarea name="news" rows="9" cols="43">Newstext</textarea></td> 
  </tr> 
  <tr> 
   <td><input type="submit" name="send" value="News erstellen !"></td></form>

Bei dem Datum solltest du in der Mysql Tabelle den Datentyp DATETIME wählen, somit hast du das Datum und die Uhrzeit gespeichert und kannst diesen formatiert ausgeben lassen.
SQL:
SELECT `titel`,`news`,DATE_FORMAT( `datum` , '%d.%m.%y - %H:%i' ) AS `dato` FROM `news` ORDER BY `id`;

mfg ;-)
 
Zuletzt bearbeitet von einem Moderator:
Ah sry, hab gestern dran rumgearbeitet und war dann müde hab alles stehn und liegn gelasn daher die vielen Fehler :S

Ok soweit funktioniert es, nur 2 sachen noch, das Datum gibt er ned richtig aus und :

PHP:
<?php
	session_start();

	if (isset($_POST['send'])) 
{ 
	$titel = trim(strip_tags(mysql_real_escape_string($_POST['titel']))); 
	$news = trim(strip_tags(mysql_real_escape_string($_POST['news']))); // <--- ich verstehe diesen befehl nicht?!  

	mysql_query("INSERT INTO news (titel, datum, inhalt) 
	VALUES ('$titel', NOW(), '$inhalt')"); 

	$inhalt = $inhalt; 
	$titel = $titel;
}{
	eval ("dooutput(\"".gettemplate("tpl/newsadmin")."\");"); 
}

?>

zur news/index.php
PHP:
<?php
	session_start();

	$sql = "SELECT * FROM news ORDER BY Id DESC";
	if (!$res_id = mysql_query($sql))
	die ('Achtung, SQL-Befehl ist falsch!');
	while ($row = mysql_fetch_array($res_id))
{
	$Id = $row['Id'];
	$titel = $row['titel'];
	$datum = DATE_FORMAT( `datum` , '%d.%m.%y - %H:%i' ) As $row['datum'];
	$inhalt = $row['inhalt'];

	eval ("dooutput(\"".gettemplate("tpl/news")."\");"); 
}

?>

wie gehört das mit den Datum richtig?

danke SUPER SUPER nettes Forum hier!
 
Wenn es ein Timestamp feld ist hingegen so:

PHP:
<?php
    session_start();

    $sql = "SELECT *, DATE_FORMAT( `datum` , '%d.%m.%y - %H:%i' ) As fdatum FROM news ORDER BY Id DESC";
    if (!$res_id = mysql_query($sql))
    die ('Achtung, SQL-Befehl ist falsch!');
    while ($row = mysql_fetch_array($res_id))
{
    $Id = $row['Id'];
    $titel = $row['titel'];
    $datum = $row['fdatum'];
    $inhalt = $row['inhalt'];

    eval ("dooutput(\"".gettemplate("tpl/news")."\");"); 
}

?>
 
ok, das mit den Datum haut schon hin :)
danke euch allen!

Jetzt aber was anderes, wie geb ich am einfachsten einen Text aus, wenn noch keine news vorhanden sind?! und welche ist die einfachste Blätterfunktion?

Sry, wegen den vielen Fragen, aber ich will das Cms dan Open Source stellen und es soll jeden PHP-Anfänger eine Hilfestellung geben :)
 
Blätterfunktionen machst du mit LIMIT *start*, *anzahl* innerhalb der SQL Query.

deffinier eine Variable "eps" (einträge pro seite). Erstelle eine GET Variable page die wenn nicht gesetzt oder kleiner 1 ist auf 0 gesetzt wird.

dann machst du so Symbolisch gesprochen: "..... LIMIT $eps*$page, $eps". Dann kannst du jede Seite ansteuern, wieviele Seiten es gibt ist eine einfache mathematische rechnung "wieviele einträge gibt es durch wieviele pro seite" und das ganze aufgerundet.
 
Zurück