PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : schneiden von strings und deren eintrag in eine DB


Ernest
11.09.2005, 00:25:28
Mit find werden ordner /bla/blub/blob gelistet, jetzt ist meine idee die ordnernamen an den "/" abzuschneiden und in die Datenbank zu hauen,
gibt es einen Befehl der mir den String "vor" einem zeichen ausgibt und nicht "nach" einem Zeichen? zur zeit brauche ich 3 zeilen um das Ergebniss zu erreichen.

<?php
$dir="/daten";
$a = `find $dir -depth -type d -print`;
$files = explode ("\n", $a);


for ($i=0; $i < count($files); $i++)
{
$sub_old = substr("$files[$i]",14);
$genre = strstr($sub_old,"/");
$genre2 = substr("$genre",1);
$genre3 = substr("$genre",1, strpos($genre2,'/')) ;
echo $genre3;
echo "<br>";
}
?>


In der Datenbank sollen dann bla eine spalte, blub eine spalte und blob eine eigene spalte bekommen.
Dann ist da noch das problem das zur Zeit so oft der hauptordner gezeigt wird wie es unterordner gibt, das sollte aber bei integration der Datenbankfunktion nicht stören. Um das ganze Datenbankkonform in mehrere ta bellen zu packen ists mir zu spät um mich da reindenken zu wollen, mann könnte "blub" eine ID geben und dann in der haupttabbelle nur die ID angeben, muss aber nicht.


zeit fürs bett.

und besten dank für jede hilfe

feuervogel
11.09.2005, 01:29:47
$genre = explode( '/' , $files[$i] );
echo $genre[ 0 ];
echo "<br>";


ich glaube aber nicht, dass das:

$a = `find $dir -depth -type d -print`;
$files = explode ("\n", $a);

funktioniert.

meikel (†)
11.09.2005, 03:06:31
ich glaube aber nicht, dass das:
$a = `find $dir -depth -type d -print`;
$files = explode ("\n", $a);
funktioniert.Du nicht...:
http://de.php.net/manual/de/language.operators.execution.php

feuervogel
11.09.2005, 11:57:47
oha! es ja wirklich doch so einfach...und man braucht nicht mal exec oder system...

xabbuh
11.09.2005, 13:09:17
Möchtest du alles nach dem letzten Slash abschneiden (/foo/bar/foobar -> /foo/bar) oder möchtest du nur dann das letzte Zeichen abschneiden, wenn es ein Slash ist (/foo/bar/ -> /foo/bar?

Die erste Variante würde so funktionieren:

<?php
$var = substr($var, 0, strrpos($var, '/'));
?>


Die zweite klappt so:

<?php
$regex= '#^(.*)/$#';
preg_match($regex, $var, $matches);
$var = $matches[1];
?>


Oder auch so:

<?php
if(substr($var, strlen($var) - 1) == '/')
$var = substr($var, 0, strlen($var) - 2);
?>

Ernest
11.09.2005, 18:58:13
ich glaube das script funktioniert ganz gut, bis auf 2 macken.

bei bestimmten sonderzeichen wie [] und ' gibt mir mysql einen error und komischerweise sind alle Einträge mehrfach vorhanden.
Die Felder in der DB sind alle als "text" deklariert und auf UTF8_general gestellt

<?php
include('functions_db.php');
$conn = db_connect ($host, $user, $password);

$dir="/daten";
$a = `find $dir -depth -type d -print`;
$files = explode ("\n", $a);


for ($i=0; $i < count($files); $i++)
{

$sub_old = substr("$files[$i]",14);
$genre = explode( '/' , $sub_old );

for ($j=0; $j < count($genre); $j++)
{
echo "Genre: $genre[1]";
echo "<br>";
$Genre_db = "$genre[1]";
echo "Interpret1: $genre[2]";
echo "<br>";
$interpret = explode( '-' , $genre[2] );
echo "Interpret2: $interpret[0]";
echo "<br>";
$Interpret2 = "$interpret[0]";

if (count($interpret[1]) != '0')
{
echo "Album1: $interpret[1] $interpret[2]";
echo "<br>";
$Album1 = "$interpret[1] $interpret[2]";
}




$Album_tmp = explode( '-' , $genre[3] );
if (count($Album_tmp[1]) != '0')
{
echo "Album3: $Album_tmp[1]";
echo "<br>";
$Album3 = "$Album_tmp[1]";
}
else {
if (count($genre[3]) != '0')
{
echo "Album2: $genre[3]";
echo "<br>";
$Album2 = "$genre[3]";
}
}
if (count($genre[4]) != '0')
{
echo "Album4: $genre[4]";
echo "<br>";
$Album4 = "$genre[4]";
}
echo "<br>";

echo $query = "
INSERT INTO `tbl_alben` (`alb_interpret`, `alb_name1`, `alb_name2`, `alb_name3`, `alb_name4`, `alb_genre`)

VALUES ( '$Interpret2', '$Album1', '$Album2', '$Album3', '$Album4', '$Genre_db');

";
echo "<br>";

//echo $query = qry_ins_cat($file);
send_sql($dbname, $query);
unset($Album1);
unset($Album2);
unset($Album3);
unset($Album4);
}
}
?>

ich nutze eine Ordnerstruktur mit bis zu 4 Unterordner.
Ohne das unset hat er mir wenn kein wert vorhanden ist immer den letzten in die leeren Felder geschrieben :(.

was sagen die cracks dazu?

Ernest
11.09.2005, 20:32:42
ok, das sonderzeichenproblem scheint gelöst.
Komischerweise zeigt ein find in der bash jeden Ordner nur 1x an, der das php script wie gesagt jeden mehrmals

ups peinlich, die 2te for schleife wird garnicht genutzt :(.
Nun ists fast perfekt, es gibt noch den fall das nur $Interpret2 alleine vorkommt, ohne jegliches album, der Hauptordner ebent, kann man im query sagen das wenn "album1-4 = 0" er nix eitnragen soll?
Komischerweise geht das hier nicht.

$array = array("$Album1", "$Album2", "$Album3", "$Album4");
if(count_chars($array) != '0')
{

xabbuh
11.09.2005, 21:12:27
$array = array("$Album1", "$Album2", "$Album3", "$Album4");
if(count_chars($array) != '0') {


Das funktioniert nicht, da du hier vier Elemente angibst. Wenn eine der Variablen leer sind, wird einfach ein leeres Array-Element angelegt.