• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

vorhandene große Tabelle sortierfähig machen

sAks

Neues Mitglied
Hallo allerseits!

Habe ein kleines bzw. großes Problem. Möchte nicht direkt auf meine Daten eingehen, daher bringe ich mein Problem an einem Beispiel dar:

Stellt euch vor, ich besitze eine Videothek mit 1000 Filmen. Ich habe von anfang an eine Exceltabelle erstellt, in der ich jeden Film chronologisch aufnahm (Nr.; Name; Genre; Schauspieler; etc..).
Nun möchte ich diese Liste online stelle, so dass meine Kunden alle Filme betrachten und der Liste nach Genre, Name, etc. sortieren können.

Hab leider wenig Plan von Mysql-Datenbanken oder andere Möglichkeiten, vllt wäre das PHP-Forum auch eher das richtige?
Wäre nett, wenn mir jmd Tipps, Links, Lösungen oder dergleichen geben könnte, wie ich dieses Sorteriungsproblem angehen kann.

Das wäre meine Wunschvorstellung: Roland Scull - eine Auswahl der Songs, die ich spiele

Grüße
sAks
 
Hi,

du legst dazu eine mysql tabelle an die genauso aufgebaut ist wie deine exceltabelle. Zusätzlich eine weitere Tabelle (z.B. `sort_rule`) in der die Sortierregel abgespeichert werden kann. Eine Spalte sollte den Spaltennamen enthalten nachdem sortiert werden soll und eine weitere Spalte brauchst du für die Sortierrichtung

MySQL :: MySQL 5.1 Referenzhandbuch :: 7.2.12 ORDER BY-Optimierung

PHP:
$sql = "SELECT intrepret, titel FROM songs ORDER BY interpret ASC";

folgendes wäre dann für dich interessant:
PHP:
ORDER BY interpret ASC
der wert interpret kommt dann aus der Tabelle `sort_rule`, es wird also nach dem Interpreten sortiert. Ebenfalls liest du den Wert ASC aus für absteigende Sortierung (DESC für aufsteigend [oder war es anderesrum :D egal]) aus. Für jeden Nutzer muss natürlich in der Tabelle `sort_rule` eine Zeile angelegt werden, damit jeder User seine eigene Sortierreihenfolge einstellen kann.
 
Hi,
erstmal danke für deine Antwort und deinen Link. Bin gerade dabei eine SQL-DB zu bauen, allerdings gibt es da die ersten Hürden..

Siehe: http://www.traum-projekt.com/forum/...yadmin-textdatei-tabelle-einf-gen-screen.jpeg
Habe das Bild aus Google-Bilder, darauf ist zu erkennen, dass die Funktion "Textfile upload" fehlt... Ohne diese Funktion kann ich meine csv nicht in meine erstellte DB importieren :( Habe die php.ini auf safemod und upload=on gecheckt... Mal sehen, vllt bringt eine Neuinstallation von pma etwas.
Melde mich dann später wieder mit einem möglichen Doppelpost ;-)
 
So, hab alles soweit hinbekommen. Die Datenbank steht, ich konnte auch alles schön ausgeben.

Nun wollte ich noch ein Formular hinzufügen, mit dem ich Einträge in die Datenbank von der Website aus machen kann. Versuchte es auf zwei verschiedene Möglichkeiten, aber ich komm einfach nicht mehr weiter.

Hier wieder am Beispiel der Videothek:
PHP:
  <?php
  
    echo"Neuen Eintrag schreiben :";
    echo"<form action=\"mov.php?aktion=insert\" method=\"post\">".
    "<table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">".
        "<tr>".
                  "<td>Titel : </td>".
                "<td><input type=\"text\" name=\"titel\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Fach : </td>".
                "<td><input type=\"text\" name=\"fach\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                "<td>Genre :</td>".
                "<td><input type=\"text\" name=\"genre\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Imdb-Link :</td>".
                "<td><input type=\"text\" name=\"link\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
            "<td><input type=\"submit\" name=\"sub\" value=\"Eintragen\"></td>".
            "<td><input type=\"reset\" name=\"res\" value=\"Reset\"></td>".
        "</tr>".
    "</table>".
    "</form>"; 
    
    $dbserver   = "localhost";
    $dbname     = "1";
    $dbuser     = "2";
    $dbpass     = "3";   
  
if (!isset($aktion))
{
    $aktion = "show";
}
  if ($aktion == "insert")
{
    $conn =  mysql_connect($dbserver,$dbuser,$dbpass);
     mysql_select_db($dbname,$conn);
    $query = "INSERT INTO mov VALUES ('', '". addslashes($titel)."', '". addslashes($fach)."', '". addslashes($genre)."', '". addslashes($link)."')";
    $result =  mysql_query($query,$conn);
    if (!$result)
        {
            die ("Sorry, der Eintrag hat nicht funktioniert");
        }
     mysql_close($conn);
} 

?>
und

PHP:
  <?php
  
    echo"Neuen Eintrag schreiben :";
    echo"<form action=\"mov.php?aktion=insert\" method=\"post\">".
    "<table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">".
        "<tr>".
                  "<td>Titel : </td>".
                "<td><input type=\"text\" name=\"titel\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Fach : </td>".
                "<td><input type=\"text\" name=\"fach\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                "<td>Genre :</td>".
                "<td><input type=\"text\" name=\"genre\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Imdb-Link :</td>".
                "<td><input type=\"text\" name=\"link\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
            "<td><input type=\"submit\" name=\"sub\" value=\"Eintragen\"></td>".
            "<td><input type=\"reset\" name=\"res\" value=\"Reset\"></td>".
        "</tr>".
    "</table>".
    "</form>"; 

    $dbserver   = "localhost";
    $dbname     = "1";
    $dbuser     = "2";
    $dbpass     = "3";

mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname);

  $titel = $_POST["titel"];
  $fach = $_POST["fach"];
  $genre = $_POST["genre"];
  $link = $_POST["link"];

  $eintrag = "INSERT INTO mov (titel, fach, genre, link) VALUES ('$titel', '$fach', '$genre', '$link')";

  $eintragen = mysql_query($eintrag);

?>
Beide sind mit dem Formular gleich aufgebaut. Die unterschiede sind nur in den letzten 10 Zeilen.

PHP:
 $eintrag = "INSERT INTO mov (titel, fach, genre, link) VALUES ('$titel', '$fach', '$genre', '$link')";
Achja, hier noch eine kleine Frage: Primary Key muss nicht eintragen? Tabelle würde so aussehen: Nr, Titel, Fach, Genre, Link

Problem hab ich auch mit der form action= des Formulars. Was soll ich da eintragen?

Danke im Voraus für die Hilfe :)
 
Zuletzt bearbeitet:
bei action="" trägst du den Dateinamen der Datei ein, wohin das Formular gesendet werden soll und wo die eingegebenen Daten verarbeitet werden sollen.

Deine zweite Lösung ist der Ersten vorzuziehen da du dort mit der Superglobal $_POST arbeitest.

Das Formular mit echo auszugeben ist keine gute Idee.

Immer mysql_error(); verwenden

PHP:
mysql_connect($dbserver,$dbuser,$dbpass) OR die (mysq_error());
mysql_select_db($dbname) OR die (mysq_error());
$eintragen = mysql_query($eintrag) OR die (mysq_error());

Bist du sicher, dass der Datenbankname, der Username und das Passwort richtig sind?
 
Hmm.. er bringt mir tatsächlich die Fehlermeldung "Access denied for user '2'@'localhost' to database '1'"

Auch wenn ich anstelle user-name, root-name und root-pw verwende geht es nicht. Strange..

Das Form-Action habe ich auch abgeändert, da ich eigentlich nicht von der aktuellen Seite weg, nur diese aktualisiert haben möchte: form action=\"#\"

Hier noch einmal der akt. php-code, mit dem ich nicht weiter komme :(
PHP:
  <?php
  
    echo"Neuen Eintrag schreiben :";
    echo"<form action=\"#\" method=\"post\">".
    "<table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">".
        "<tr>".
                  "<td>Titel : </td>".
                "<td><input type=\"text\" name=\"titel\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Fach : </td>".
                "<td><input type=\"text\" name=\"fach\" size=\"30\" maxlength=\"50\"></td>".
        "</tr>".
        "<tr>".
                "<td>Genre :</td>".
                "<td><input type=\"text\" name=\"genre\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
                  "<td>Imdb-Link :</td>".
                "<td><input type=\"text\" name=\"link\" size=\"30\" maxlength=\"100\"></td>".
        "</tr>".
        "<tr>".
            "<td><input type=\"submit\" name=\"sub\" value=\"Eintragen\"></td>".
            "<td><input type=\"reset\" name=\"res\" value=\"Reset\"></td>".
        "</tr>".
    "</table>".
    "</form>"; 


$dbhost = 'localhost';
$dbuser = '1';
$dbpass = '2';
$dbname = '3';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) OR die(mysql_error());
$db_selected = mysql_select_db($dbname, $conn) OR die(mysql_error());

  $titel = $_POST["titel"];
  $fach = $_POST["fach"];
  $genre = $_POST["genre"];
  $link = $_POST["link"];

$eintrag = "INSERT INTO mov (titel, fach, genre, link) VALUES ('$titel', '$fach', '$genre', '$link')" OR die(mysql_error());

  $eintragen = mysql_query($eintrag) OR die(mysql_error());
  
mysql_close($conn);
?>
Sieht jmd einen Fehler? :(
 
User 2 scheint nicht die Berechtigung zu besitzen, auf die Datenbank 1 zuzugreifen. Überprüf mal die Rechte für den User 2.
 
Bist du sicher, dass du den User 1 mit Passwort 2 überhaupt angelegt hast? Seltsame Wahl :D

Wenn du auf der Seite bleiben möchtest verwende einfach

Code:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">

Und nimm den Formularcode bitte aus der echo-Ausgabe raus. Schreib das Formular doch einfach vor den PHP-Code!

PHP:
<?php 
//php-code
echo "Bla";
?>

<!-- Html-Code -->
<span style="font-weight:bold;">Hallo</span>

<?php
//wieder php-Code
?>

<!-- wieder HTML -->

Die Ausgabe mit echo bietet sich nur bei kleineren Ausgaben an, da echo auch langsamer ist, weil es eben noch durch den Parser gejagt werden muss.
 
Ok, hatte meinen Fehler gefunden. Groß- und Kleinschreibung sollte man beherrschen :)

Dennoch komme ich zum nächsten Problem.
Ich möchte das Formular ausfüllen und dann, nachdem man den insert-button geklickt hat, sollte ein Eintrag in der DB erfolgen.
Mein Problem: Sobald die Seite aufgerufen wird, wird sofort ein Eintrag (Werte überall 0) in der DB gemacht (ohne dass ich den button gedrückt habe).

PHP:
<p titel="down"><a href="#top"><img src="http://www.html.de/images/top.png" border="0" /></a></p>

   Neuen Eintrag schreiben:
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
    <table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">
        <tr>
                  <td>Titel :</td>
                <td><input type="text" name="Titel" size="30" maxlength="50"></td>
        </tr>
        <tr>
                  <td>Fach :</td>
                <td><input type="text" name="Fach" size="30" maxlength="50"></td>
        </tr>
        <tr>
                <td>Genre :</td>
                <td><input type="text" name="Genre" size="30" maxlength="100"></td>
        </tr>
        <tr>
                  <td>Imdb-Link :</td>
                <td><input type="text" name="Link" size="30" maxlength="100"></td>
        </tr>
        <tr>
            <td><input type="hidden" name="eintragen" value="'.$eintragen.'"></td>
            <td><input type="submit" value="Eintragen"></td>
            <td><input type="reset" name="reset" value="Reset"></td>
                    
        </tr>
    </table>
    </form>

<?php

include 'config.php';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) OR die(mysql_error());
$db_selected = mysql_select_db('mov', $conn) OR die(mysql_error());

  $titel = $_POST["Titel"];
  $fach = $_POST["Fach"];
  $genre = $_POST["Genre"];
  $link = $_POST["Link"];

  $eintrag = "INSERT INTO Mov (Titel, Fach, Genre, Link) VALUES ('$titel', '$fach', '$genre', '$link')" OR die(mysql_error());

  if (!empty($titel) && !empty($fach) && !empty($genre) && !empty($link))
    {
    echo '<font color="#FF0000"> Bitte alle Felder bearbeiten. </font>';
    }
  else
    {    
    $eintragen = mysql_query($eintrag) OR die(mysql_error());
    } 
    
mysql_close($conn);
?>
Ist empty() && empty() && nicht erlaubt? Oder gibt es anstelle && (AND) auch ein &| (AND OR) ? Fand leider nichts brauchbares über die Sufu.

Kleine, blöde Frage noch hinzu.
Nachdem ich nun XX Einträge in der DB habe, die keinen Wert besitzen, habe ich diese einfach gelöscht. Da der PrimaryKey bei mir zugleich das Zählsystem ist, habe ich nun ein Problem, da der PK sich nicht zurücksetzen lässt?
 
Zuletzt bearbeitet:
Du trägst Daten ein, wenn mindestens eines der Felder nicht ausgefüllt ist.

Denn Dein if() sagt ja "Wenn $titel nicht leer ist UND $fach nicht leer ist UND ..." also nur, wenn alle Felder ausgefüllt sind, gibst Du nen Fehler aus.

Aber btw. was soll UND ODER sein? Es geht nur entweder "und" oder "oder". Was soll "und oder" machen?
 
Uuups... dachte anfangs anders herum... sollte natürlich empty() und nicht !empty() heißen. Thx.

Aber btw. was soll UND ODER sein? Es geht nur entweder "und" oder "oder". Was soll "und oder" machen?
Dachte in dem Sinne rein mathematisch:
Feld1 und/oder Feld2 = Feld1 und Feld2 leer; nur Feld1 leer; nur Feld2 leer.


Du trägst Daten ein, wenn mindestens eines der Felder nicht ausgefüllt ist.
Allerdings will ich, dass nur eingetragen wird, wenn ALLE Felder ausgefüllt sind. Mache ich das eher mit isset()? :(
 
Sorry für Doppelpost, aber ich konnte es nun, nachdem ich PHP: Hypertext Preprocessor durchstudiert hab, selbst lösen. Keine Ahnung ob es elegant ist, aber es funktioniert :) :

PHP:
<?php

include 'config.php';

$conn = mysql_connect($dbhost, $dbuser, $dbpass) OR die(mysql_error());
$db_selected = mysql_select_db('mov', $conn) OR die(mysql_error());
$error=$titel=$fach=$genre=$link="";

  $titel = $_POST["Titel"];
  $fach = $_POST["Fach"];
  $genre = $_POST["Genre"];
  $link = $_POST["Link"];

    $eintrag = "INSERT INTO Mov (Titel, Fach, Genre, Link) VALUES ('$titel', '$fach', '$genre', '$link')" OR die(mysql_error());
    $ok=true;
    
    if (strlen($titel)<3 && strlen($fach)<3 && strlen($genre)<3 && strlen($link)<3)
    {
        $err[0]=true;
        $ok=false; 
        $error.='Bitte geben pro Feld mindestens 3 Zeichen ein.<br>';
    }
    if($ok)
    {
        $eintragen = mysql_query($eintrag) OR die(mysql_error());
    } 
    else 
    {
        $error='Fehler bei der Eingabe!<p class="error">'.$error.'</p>';
    }

mysql_close($conn);

?>

Allerdings wurde meine "blöde Frage" noch nicht beantwortet ;)
Nachdem ich nun XX Einträge in der DB habe, die keinen Wert besitzen, habe ich diese einfach gelöscht. Da der PrimaryKey bei mir zugleich das Zählsystem ist, habe ich nun ein Problem, da der PK sich nicht zurücksetzen lässt?
 
Zu deiner Frage. Wofür brauchst du das Zählsystem?
Der PrimaryKey zählt bei mir quasi die Menge an Besitz. Ist bisschen blöd zu erklären. Daher anhand des Beispiels der Videothek: Die Menge der vorhandenen DVDs; Besitz: 1. Film 2. Film. ... 1300. Filme Da ich nie ein Datum eingefügt habe und das im Nachhinein nicht mehr kann, kann man sich am PrimeryKey (an der Zählung) auch chronologisch orientieren. ZB. ist Film Nr. 1300 neuer als Film Nr. 500.

Gibt es eine Möglichkeit der Datenbank zu sagen, dass sie bei 1301 weiterzählen soll und nicht mehr bei 1367 ?
 
Ja,

geh dazu in phpmyadmin, wähle die entsprechende Tabelle aus und klick auf den Reiter "Operationen". Dort kannst du unter "Tabellenoptionen" im Feld auto_increment den Wert beliebig ändern.
 
Es ist aber besser wenn du nicht anhand der Primary Keys analysiertst, was du hast.
Es ist viel einfacher so:
Code:
select count(*) from deine_tabelle;
 
Zurück
Oben