Zur Navigation

datenbank auslesen

1 tobi

ich hab ein kleines problemchen bei auslesen der datenbank

in der db habe ich in der tabelle veranstaltungen
id, title, datum, datei, adresse gespeichert.

jetzt erhalte ich beim auslesen ein fehlermeldung:
Parse error: syntax error, unexpected T_STRING on line 24

line 24: echo "Bisher sind " . $anzahl . " Turniere eingetragen!";

leider komme ich nicht auf den fehler.

//Datenbank verbinden

echo "<div id=\"box2\">\n";
echo "<p><b><font size=\"+2\">Turniervorschau</font></b></p>\n";
echo "<p>Hier eine Übersicht über einige Turniere die in nächster Zeit stattfinden.<br>Falls jemand ein Turnier vermisst oder möchte dass ein Turnier hier mit aufgenommen wird, dann bitte eine E-mail an: <img src=\"bilder/mailadressen/grafik_mail_webmaster.gif\"></p>\n";
echo  "<a href=\"upel.php\">Turniere eintragen</a><br>";
echo "<br>";

$sql = "
SELECT id, datum, title, datei, adresse FROM veranstaltungen;

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}

$anzahl = mysql_num_rows($db_erg);
echo "Bisher sind " . $anzahl . " Turniere eingetragen!";
echo "<br>";
echo "<br>";


echo "<table width=\"80%\" border=\"1\" cellpadding=\"3\" cellspacing=\"0\">";
echo "<tr>";
echo "<td></td>";
echo "<td>Wann:</td>";
echo "<td>Was:</td>";
echo "<td>Ausschreibung:</td>";
echo "<td>Webseite:</td>";
echo "</tr>";

$anzahl = 1;
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>". $anzahl . "</td>";
echo "<td>". $zeile['datum'] . "</td>";
echo "<td>". $zeile['title'] . "</td>";
echo "<td>". $zeile['datei'] . "</td>";
echo "<td>". $zeile['adresse'] . "</td>";
echo "</tr>";
$anzahl++;
}
echo "</table>";

mysql_free_result( $db_erg );

echo "<br>";
include "aktualisierung.php";
echo "</div>\n";

mysql_close($link);

11.04.2009 23:55

2 Jörg

So eine Fehlermeldung weist meist auf einen Syntaxfehler im PHP-Code hin, der vor der genannten Zeile zu suchen ist:

Parse error: syntax error, unexpected T_STRING on line 24

Hier fehlt ein Anführungszeichen:

$sql = "
SELECT id, datum, title, datei, adresse FROM veranstaltungen;

11.04.2009 23:59

3 tobi

oh man ist schon spät, ein blödes zeichen!

folgendes ich hab in einem formular folgendes gespeichert:
Datum: 25.08.2009 als text, in der db kommt 1251151200 raus

wie kann ich dies umwandeln.

die datei wird so in der db gespeichert:
dateien/test/da26680ec69ed20643f2d7a706b4ac95.pdf
und genauso auch ausgelesen. muß ich da dann nen link angeben damit man die datei anklicken kann?

das gleiche gilt für die webseite: die wird so abgespeichert http://example.com und auch genauso ausgelesen

12.04.2009 00:19

4 Jörg

Datum: 25.08.2009 als text, in der db kommt 1251151200 raus

Wie fügst du die Daten denn in die Datenbank ein?

die datei wird so in der db gespeichert:
dateien/test/da26680ec69ed20643f2d7a706b4ac95.pdf

D.h. du speicherst diese URL der Datei in der Datenbank?

und genauso auch ausgelesen. muß ich da dann nen link angeben damit man die datei anklicken kann?

Wie möchtest du die Datei denn aufrufen? Wenn sie über einen Link verfügbar machen möchtest, dann musst du diesen Link natürlich einbauen

12.04.2009 09:59 | geändert: 12.04.2009 09:59

5 tobi

mit der speichere ich:

<?php
include "inc/kopf.php.inc";
include "inc/menu.php.inc";

    $success = false;
    $error = null;

    if(isset($_POST["submit"])) {
        $mysqli = new MYSQLi("localhost", "i", "", "");

        try {
            // die Textfelder prüfen
            if(!isset($_POST["veranstaltung"])) throw new Exception("Füllen Sie das Feld Veranstaltungen aus!");
            if(!isset($_POST["datum"])) throw new Exception("Füllen Sie das Feld Datum aus!");
            if(preg_match("/^{.}2\.{.}2\.{.}4$/", $_POST["datum"])) throw new Exception("Das Datum entspricht nicht dem Schema xx.xx.xxxx!");
            if(!isset($_POST["url"])) throw new Exception("Füllen Sie das Feld Adresse aus!");

            // die Datei prüfen
            if(!isset($_FILES["datei"])) throw new Exception("Geben Sie eine Datei für die Ausschreibung an!");
            $ext = (string)substr( strtolower( strrchr($_FILES['datei']['name'], '.') ), 1 ); // file extension
            if($ext !== "doc" && $ext !== "pdf") throw new Exception("Die Datei darf nur im Dateiformat .doc oder .pdf sein!");
            if($_FILES["datei"]["size"] > 5000000) throw new Exception("Die Datei ist zu groß!");

            // hochgeladene Datei verschieben
            $file = "dateien/test/" . md5(uniqid()) . "." . $ext;
            move_uploaded_file($_FILES["datei"]["tmp_name"], $file);

            // Datenbank eintrag vornehmen
            $arrayDatum = explode(".", $_POST["datum"]);
            $timestamp = (int)mktime(0, 0, 0, (int)$arrayDatum[1], (int)$arrayDatum[0], (int)$arrayDatum[2]);
            $mysqli->query("INSERT INTO veranstaltungen (title, datum, adresse, datei) VALUES ('" . $_POST["veranstaltung"] . "', $timestamp, '" . $_POST["url"] . "', '$file')");

            $success = true;
        }
        catch(Exception $e) {
            $error = $e->getMessage();
        }
    }
?>
<?php
echo "<div id=\"box2\">\n";
?>
<h1>Turnier eintragen</h1>

<p>Tragen Sie im folgenden Formular ihre Veranstaltung ein. Alle Felder sind Pflichtfelder und für den Datei-Upload ist eine maximale Größe von 5MB gesetzt und das Dateiformat ist auf .doc und .pdf beschränkt.</p>

<? if(!empty($error)): ?>
<h2>Fehler</h2>

<p><span style="color: red; font-weight: bold;">Es ist folgender Fehler aufgetreten:</span><?=$error?></p>
<? endif; ?>

<? if($success): ?>
<h2>Erfolg</h2>

<p style="color: green; font-weight: bold;">Ihr Eintrag wurde übernommen.</p>
<? endif; ?>

<? if(!$success): ?>

<form action="<?=$_SERVER["PHP_SELF"]?>" method="post" enctype="multipart/form-data">
    <p>
        <label for="veranstaltung">Veranstaltung</label>
        <input type="text" name="veranstaltung" id="veranstaltung" value="<?=isset($_POST["veranstaltung"]) ? $_POST["veranstaltung"] : "" ?>" />
    </p>
    <p>
        <label for="datum">Datum</label>
        <input type="text" name="datum" id="datum" value="<?=isset($_POST["datum"]) ? $_POST["datum"] : "xx.xx.xxxx" ?>" />
    </p>
    <p>
        <label for="url">Adresse</label>
        <input type="text" name="url" id="url" value="<?=isset($_POT["url"]) ? $_POST["url"] : "http://example.com" ?>" />
    </p>
    <p>
        <label for="datei">Ausschreibung</label>
        <input type="file" name="datei" id="datei" />
    </p>
    <p>
        <input type="submit" name="submit" value="eintragen!" />
    </p>
</form>
<? endif; ?>

<?php
include "aktualisierung.php";
echo "</center>\n";
echo "</div>\n";

die sql:

CREATE TABLE IF NOT EXISTS `veranstaltungen` (
  `id` string(10) NOT NULL auto_increment,
  `title` varchar(30) NOT NULL,
  `datum` varchar(30) NOT NULL,
  `adresse` varchar(50) NOT NULL,
  `datei` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 



mit der datei lese ich aus:

//Datenbank verbinden
include "../zugang.php.inc";

echo "<div id=\"box2\">\n";
echo "<p><b><font size=\"+2\">Turniervorschau</font></b></p>\n";
echo "<p>Hier eine Übersicht über einige Turniere die in nächster Zeit stattfinden.<br>Falls jemand ein Turnier vermisst oder möchte dass ein Turnier hier mit aufgenommen wird, dann bitte eine E-mail an: <img src=\"bilder/mailadressen/grafik_mail_webmaster.gif\"></p>\n";
echo  "<a href=\"upel.php\">Turniere eintragen</a><br>";
echo "<br>";

$sql = "
SELECT id, datum, title, datei, adresse FROM veranstaltungen ";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}

$anzahl = mysql_num_rows($db_erg);
echo "Bisher sind " . $anzahl . " Turniere eingetragen!";
echo "<br>";
echo "<br>";


echo "<table width=\"80%\" border=\"1\" cellpadding=\"3\" cellspacing=\"0\">";
echo "<tr>";
echo "<td></td>";
echo "<td>Wann:</td>";
echo "<td>Was:</td>";
echo "<td>Ausschreibung:</td>";
echo "<td>Webseite:</td>";
echo "</tr>";

$anzahl = 1;
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>". $anzahl . "</td>";
//echo "<td>" . datum("d.m.Y G:i:s", strtotime($zeile['timestamp'])) . "</td>";
echo "<td>". $zeile['datum'] . "</td>";
echo "<td>". $zeile['title'] . "</td>";
echo "<td>". $zeile['datei'] . "</td>";
echo "<td>". $zeile['adresse'] . "</td>";
echo "</tr>";
$anzahl++;
}
echo "</table>";

mysql_free_result( $db_erg );

echo "<br>";
include "aktualisierung.php";
echo "</div>\n";

mysql_close($link);

später sollte:
1 (id); 22.05.2009 (datum); 11. Mein-Turnier (title); http://www.123.de/dateien/tunriere/blala.pdf (datei); http://www.123.de (adresse)
in einer tabelle erscheinen

12.04.2009 11:31 | geändert: 12.04.2009 11:34

6 Jörg

Du wandelst hier das Datum in einen Timestamp um:

// Datenbank eintrag vornehmen
            $arrayDatum = explode(".", $_POST["datum"]);
            $timestamp = (int)mktime(0, 0, 0, (int)$arrayDatum[1], (int)$arrayDatum[0], (int)$arrayDatum[2]);
            $mysqli->query("INSERT INTO veranstaltungen (title, datum, adresse, datei) VALUES ('" . $_POST["veranstaltung"] . "', $timestamp, '" . $_POST["url"] . "', '$file')");

Das kann aber durchaus sinnvoll sein, weil man Timestamps vergleichen kann und so z.B. nach dem Datum sortieren, deswegen würde ich das so lassen.

Du kannst den Timestamp nach der Abfrage aus der Datenbank aber wieder in ein Datumsformat umwandeln. Dafür gibt es die Funktion date():

http://de2.php.net/date

12.04.2009 14:30

7 tobi

gut dann lasse ich es so. denn datum sortieren kann echt von vorteil sein.

mein sql sieht jetzt so aus:

CREATE TABLE IF NOT EXISTS `veranstaltungen` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(30) NOT NULL,
  `datum` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `adresse` varchar(50) NOT NULL,
  `datei` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

wenn ich das jetzt so mache, dann kommt in der datenbank
0000-00-00 00:00:00

edit: ich hab als datum 30.08.2009 im formular eingetragen

12.04.2009 14:36 | geändert: 12.04.2009 14:40

8 Jörg

Bei $timestamp handelt es sich um einen Unix-Timestamp, int(11) wäre hier das passende Format für die Spalte datum.

12.04.2009 14:41

9 tobi

mach ich dann:



CREATE TABLE IF NOT EXISTS `veranstaltungen` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(30) NOT NULL,
  `datum` int(11) NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `adresse` varchar(50) NOT NULL,
  `datei` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

?

12.04.2009 14:44

10 Jörg

Als default Wert muss dann auch ein Integer angegeben werden, also z.B. 0

`datum` int(11) NOT NULL default 0,

12.04.2009 15:03