Daten vergleichen DB <--> Textdatei

Hallo,

ich hab nicht alle Posts zu deinem problem gelesen, aber wenn das Problem ist, dass die namen mehrfach im array auftauchen, versuchs mal hiermit:

PHP:
$namensarray = file('namensliste.txt'); #Pro Zeile ein Name

$sql = "SELECT name FROM namensliste";
$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_assoc($result))
{
   if(!in_array($row['name'], $namensarray))
   {
      echo "Der Name ".$row['name']." steht nicht in der Textdatei!";
      $namensarray[] = $row['name'];
   }
}

also das Neue im Skript ist lediglich
PHP:
$namensarray[] = $row['name'];

Damit existert dieser Name ja schon im Array und kommt nicht nochmal durch die IF()-Schleife.
Alternativ kannst Du auch ein array bauen, das alle Namen enthält:

PHP:
$nichtvorhandeneNamen[$row['name']] = $row['name'];

Viele Grüße,

peavey
 
Zuletzt bearbeitet:
Hallo und erstmal dank an peavey182

Leider hat sich das Problem immernoch nicht erledigt?!

Das Problem nochmal anders erklärt:
Ich habe eine txt- datei und eine DB.
In der txt- Datei ist der Ist- Zustand
In der DB der Soll- Zustand

Nun soll mein Script die Namen auswerfen/anzeigen welche nicht in der txt-Datei stehen.

Da in der txt-Datei viele Einträge abgefragt werden filtere ich diese nach Datum aus.
Das Ergenbis steht dann in einer Variable. Diese Variable soll als Vergleich mit der DB herhalten.

: peavey182

an welche Position soll dieser Eintrag?
Code:
$nichtvorhandeneNamen[$row['name']] = $row['name'];
 
Nochmals zum Verständnis meines Codes:
Das Array $namensarray enthält die Namen aus der Textdatei. Du kannst dieses Array beliebig abändern. Das sollte eingehaten werden:
1. Das was nacher in dem Array $namensarray steht, muss das gleiche sein, wie in der DB (Falls der Name in der Textdatei steht)
2. Kein Wert sollte aus dem Array verschwinden.

Wenn das so ist, sollte es keine Probleme geben.
Lass dir doch einfach mal die Variable $dasi ausgeben, nachdem du sie aus den verschiedenen Werten zusammengesetzt hast und überprüfe, ob diese Namen genauso wie in der DB geschrieben sind. (Groß-/Kleinschreibung, usw).

Wenn in der DB also z.B. "20IsteineZAHL" steht muss in der Textdatei, bzw dem abgeänderten Array genau das gleiche stehen. Also "20IsteineZAHL".
"20IsteineZahl" würde schonwieder nicht mehr funktionieren.
 
Zuletzt bearbeitet:
Das Problem mit Gorß- und Kleinschreibung habe ich strtolower abgefangen, weil ich damit auch schon einmal auf die Nase gefallen bin.

Was meinst du mit:
2. Kein Wert sollte aus dem Array verschwinden.
 
Wenn du irgendwelche Daten aus dem Array löschst, steht darin natürlich ein oder mehrere Name(n) weniger, der/die dann auch ausgegeben wird.
 
Danke nochmal

Ihr könnt mich schlagen, klöppeln was auch immer bei mir funktioniert es nicht.

Ich habe das Script nun ausgelagert um einzeln die Funktion zu testen. Ergebnis:

Mal gehts mal gehts nicht ?:confused: :confused:

Ich mir mit dem script die Date aus der DB holen lassen. Diese habe ich dann in die txt- Datei kopiert.
Script ausgeführt und dann sollte man meinen das nicht angezeigt wird.
Aber es sind alle zu sehen.

Wenn ich nun einzeln herauspicke verschwinden diese, wenn ich weitere hinzufüge sind diese dann aufeinmal wieder da .
Hier nochmal das Script mit dem ich jetzt nochmal probiert habe:
Code:
include ('./func/db_connect.tpl.inc');

$namensarray = file('namensliste.txt'); #Pro Zeile ein Name

$sql = "SELECT namehost FROM dasi";

$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_assoc($result))
{
   if(!in_array($row['namehost'], $namensarray))
   {
      echo "Der Name ".$row['namehost']." steht nicht in der Textdatei!</br>";
      $namensarray[] = $row['namehost'];
   }
}

Hier die txt-Datei:
Code:
saf04002 
wtk10054
nott10-85561
wtk10054
apl07031
sapkl01
wtk10034
wtk10054

:suspekt:
 
Hallo und guten Morgen,

ich habe das hier angesprochende Problem nochmal aufgegriffen.

Da das ganze noch nicht so funktioniert wie ich mir das vorstelle habe ich noch eine Frage dazu.
Das Script arbeitet den Vergleich im Prinzip so ab wie ich mir das vorstelle. Das Problem ist, das er nur (!) den letzten Datensatz der in dem txt-file vergleicht bzw. ausgibt.

Wie kann ich es bewerkstelligen das er jeden Datensatz der in der DB und in der txt Datei ist zu vergleichen.

Es soll so sein das wenn ein Datensatz in der DB vorhanden ist und in der txt- Datei nicht, soll eine Fehlermeldung erscheinen.


Thx
Speedyggg
 
Probiere es einmal so:

PHP:
<?php
     
    //Hier die Daten zur Datenbankverbindung!
    
    $namensarray = file('namensliste.txt'); #Pro Zeile ein Name
          
    $sql = 'SELECT
                      `namehost`
             FROM 
                      `dasi`';

    $result = mysql_query($sql) or die(mysql_error());
     
    $i=0;
    while($row = mysql_fetch_assoc($result)){
        
        $datenbank[] = trim($row['namehost']);
        $text[] = trim($namensarray[$i]);
        
        if(!in_array($datenbank[$i],$text)){
          
           echo 'Der Name '.$datenbank[$i].' ist nicht in der Textdatei!</br>';
           
        }
    $i++; 
        
    }
?>
 
Ich habs getestet und nach einer kleinen Änderung funktioniert es wie gewünscht .

SUPER!!

Vielen Dank

Speedyggg
 
Zurück