mysql Tabelle nach Buchstaben oder alles ausgeben

spikaner

Quereinsteiger @ php
Habe folgendes Problem bei der Ausgabe einer Tabelle die Buchstaben A-Z funktionieren einwandfrei nur "0-9" und "Alle" macht mir zu schaffen weiß jemand rat?

PHP:
<?php
require ("config.php");
echo print_r($_GET);
if (isset($_GET['variable'])) $variable = htmlspecialchars($_GET['variable'])."%"; else $variable = "A%";

$connect    = @mysql_connect($mysql_host, $mysql_user, $mysql_pw);
$db         = mysql_select_db($mysql_db,$connect) or die ("Kann die Datenbank nicht lesen!");

$sql_query_string = "SELECT * FROM mp3files WHERE interpret LIKE '".$variable."'";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');


// dann den anfang der tabelle mit den Links für die Sortierung

echo '<div align="center"></br></br></br>';

// So und ab hier is der Wurm drin

$alle = "";
$zahlen = "[0-9]";
echo '<table border="1" width="90%"><tr><td><a href="'.$_SERVER['PHP_SELF'].'?variable='.$alle.'">Alle</a></td>'.'<td><a href="'.$_SERVER['PHP_SELF'].'?variable='.$zahlen.'">0-0</a></td>';

// bis hier

for ($char = ord('A'); $char <= ord('Z'); $char++){
$buchstabe=chr($char);
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?variable='.$buchstabe.'">';
print $buchstabe;
echo '</td>';
}
echo '<table border="1" width="90%">';
echo '<tr><td width="35%">'."Interpret".'</td>'.'<td width="40%">'."Album".'</td>'.'<td width="10%">'."Länge".'</td>'.'<td width="15%">'."Uploader".'</td>';
echo '</table>';
echo '<table border="1" width="90%">';

// gefolgt von einer schleife, die alles ausgibt

while(($datensatz=mysql_fetch_assoc($result))) {
    echo '<tr><td width="35%">' . $datensatz['interpret'] . '</td>'.'<td width="40%">'. $datensatz['titel'] . '</td>'.'<td width="10%">'. date("i:s",$datensatz['laenge']) . '</td>'.'<td width="15%">'. $datensatz['uploader'] . '</td>';       
}

// und das ende der tabelle
echo '</table>';
echo '</div>';
?>

mfg Spikaner
 
Zuletzt bearbeitet:
Also ich hab deine Frage nicht verstanden.Kanst du keine Zahlen aus der Tabelle auslesen? Oder was möchtes du machen.

Mfg Splasch
 
ich möchten beim klicken auf Alle bzw 0-9 die ganze tabelle bzw. die Interpreten mit den anfangszahlen 0-9 ausgeben und das Funktioniert nicht.
Anfangsbuchstabe A-Z funktioniert wunderbar.
bsp. wenn ich auf A Klicke Abba AC/DC bei R Rammstein usw...

mfg Spikaner
 
Ahh hab den Fehler MSSQL kann ... LIKE '[0-9]' MYSQL die ich hier habe und auf den Server leider nicht.., also besteht das Problem noch weiterhin aber ich komm ohne Hife nicht weiter.

mfg Spikaner
 
Also das Einzige was mir da einfällt ist den Between befehl zu nutzen.
between '2' and '50000'


Der Nachteil sobald die Zahl mal größer ist als 50000 wird sich nicht mehr gefunden.

PHP:
SELECT * FROM mp3files WHERE interpret BETWEEN '0' AND '9999999'

Versuch mal das
PHP:
SELECT * FROM mp3files WHERE interpret REGEXP '^[0-9]'


Mfg Splasch
 
Zuletzt bearbeitet:
Dann muß ich aber das ganze Script nach REGEXP umschreiben oder?, und die Variablen dann übergeben?

mfg Spikaner

P.S. Warum kann Mysql net das selbe wie MSsql argh..., ich könnt kotzen...
 
Da die bisherigen Lösungen jegliche Sonderzeichen ignorieren, hab ich das ansonsten vollkommen richtige Statement von splasch etwas modifiziert. Damit du nicht den ganzen Code umändern musst, habe ich ferner auch den Aufbau ein wenig vereinfacht:

PHP:
<?php
if (!empty($_GET['variable'] AND ctype_alpha((string) $_GET['variable']{0})) {
    // alphabetisch
    $whereclause = "`interpret` LIKE '" . $_GET['variable']{0} . "%'";
} else if (!empty($_GET['variable']) AND (string) $_GET['variable'] == '#') {
    // numerisch oder Sonderzeichen
    $whereclause = "`interpret` NOT REGEXP '^[a-z]";
} else {
    // alle
    $whereclause = "1";
}

$sql_query_string = "
    SELECT *
    FROM `mp3files`
    WHERE {$whereclause}";

// ...

Muss entsprechend nur noch eingepasst werden, dann sollte es funktionieren.
Übrigens: MySQL kann einiges mehr als du anscheinend denkst - Nicht umsonst ist es die womöglich weitverbreitetste Datenbanksoftware, die man so für kein Geld erhalten kann. ;)
 
Hab es jetzt ein bischen anders gelöst aber habe noch 2 Probleme wenn ich auf alle klicke werden wieder nur die zahlen angezeigt und beim klick auf das Formular bekomm ich nen Fehler 404.. hier der Code
PHP:
<?php
require ("config.php");
echo print_r($_GET);

$connect    = @mysql_connect($mysql_host, $mysql_user, $mysql_pw);
$db         = mysql_select_db($mysql_db,$connect) or die ("Kann die Datenbank nicht lesen!");

if (isset($_GET['variable'])) 
{
$variable = htmlspecialchars($_GET['variable'])."%";
$sql_query_string = "SELECT * FROM mp3files WHERE interpret LIKE '".$variable."'";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');

}
 else if (isset($_GET['zahlen'])) 
{
$zahlen = htmlspecialchars($_GET['zahlen']);
$sql_query_string = "SELECT * FROM mp3files WHERE interpret REGEXP '^[0-9].*$'";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');

}
else if (isset($_GET['alle']))
{
$alle = htmlspecialchars($_GET['alle']);
$sql_query_string = "SELECT * FROM mp3files WHERE interpret";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');
}
else if (isset($_POST['sucheinterpreten']))
{
$sucheinterpreten = htmlspecialchars($_POST['sucheinterpreten'])."%";
$sql_query_string = "SELECT * FROM mp3files WHERE interpret LIKE '".$sucheinterpreten."'";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');
}
else
{
$sql_query_string = "SELECT * FROM mp3files WHERE interpret";
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');
}

// dann den anfang der tabelle mit den Links für die Sortierung

echo '<div align="center"><br><br><br>';
$alle = "1";
$zahlen = "1";
echo '<table border="1" width="90%"><tr><td><a href="'.$_SERVER['PHP_SELF'].'?alle='.$alle.'">Alle</a></td>'.'<td><a href="'.$_SERVER['PHP_SELF'].'?zahlen='.$zahlen.'">0-9</a></td>';
for ($char = ord('A'); $char <= ord('Z'); $char++){
$buchstabe=chr($char);
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?variable='.$buchstabe.'">';
print $buchstabe;
echo '</td>';
}
// dann noch das Formular
echo '<tr><td>';
echo '<form method="POST" action="anfrage1.php">';
echo '<input type="text" name="sucheinterpret" size="20"><input type="submit" value="Absenden" /><input type="reset" value="Zurücksetzen" />';
echo '</form>';
echo '</tr></td>';
// hier noch Titel usw.
echo '<table border="1" width="90%">';
echo '<tr><td width="35%">'."Interpret".'</td>'.'<td width="40%">'."Album".'</td>'.'<td width="10%">'."Länge".'</td>'.'<td width="15%">'."Uploader".'</td>';
echo '</tabele>';
echo '</table>';
echo '<table border="1" width="90%">';

// gefolgt von einer schleife, die alles ausgibt

while(($datensatz=mysql_fetch_assoc($result))) {
    echo '<tr><td width="35%">' . $datensatz['interpret'] . '</td>'.'<td width="40%">'. $datensatz['titel'] . '</td>'.'<td width="10%">'. date("i:s",$datensatz['laenge']) . '</td>'.'<td width="15%">'. $datensatz['uploader'] . '</td>';       
}

// und das ende der tabelle
echo '</table>';
echo '</div>';
?>

Warum gibt er mir bei Alle nur die Zahlen aus obwoh die sql Abfrage eindeutig
PHP:
SELECT * FROM mp3files WHERE interpret
lautet und warum bekomm ich den Fehler 404

Das mit Alle hab ich hinbekommen musste nur das WHERE interpret weglassen ^^

mfg Spikaner
 
Zuletzt bearbeitet:
Was ist bitte daran eindeutig ?
Warum gibt er mir bei Alle nur die Zahlen aus obwoh die sql Abfrage eindeutig
PHP-Code:
SELECT * FROM mp3files WHERE interpret

Wenn du schon eine Where klausel hinzufügst dann mußte auch angeben was er machen soll.

PHP:
SELECT interpret FROM mp3files;

Mfg Splasch
 
Zurück