WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   php - problem mit str_rot13() und auslesen aus mysql-db (http://www.wcm.at/forum/showthread.php?t=68584)

RaistlinMajere 02.09.2002 18:35

php - problem mit str_rot13() und auslesen aus mysql-db
 
ich verwende zur pseudoverschlüsselung meiner daten die funktion str_rot13(), welche mir die daten verschlüsselt in die db schreibt, von wo ich sie über php wieder entschlüsselt im browser anzeigen kann. soweit, so gut.

nur mein problem liegt jetzt darin, daß ich die ausgegebenen daten natürlich sortieren möchte, nur wenn ich das so mache

Code:

$sql = "SELECT * FROM " . $db . " ORDER BY " . $ordnen;
$abfrage = mysql_query($sql, $verbindung);
$anzahl = mysql_num_rows($abfrage);

if($anzahl>0) {
  while($row = mysql_fetch_object($abfrage)) {
    echo str_rot13($row->anteil1);  // entschlüsseltes anzeigen der db-einträge
    echo str_rot13($row->anteil2);
    ...
  }
}

werden mir die verschlüsselten einträge sortiert und dann erst entschlüsselt, was also dann aber in der entschlüsselten ansicht erst recht nicht sortiert ist!

weiß jemand einen lösung zu diesem problem?

käptn 02.09.2002 20:07

Ungetestet, aber vielleicht lässt sich was draus machen:

PHP-Code:

$sql "SELECT * FROM " $db;
$abfrage mysql_query($sql);

if(
mysql_num_rows($abfrage)) {
  while(
$row mysql_fetch_assoc($abfrage)) {
   
$first[]    = str_rot13($row['teil1']);
   
$second[]    = str_rot13($row['teil2']);
  }
}

$my_temp array_flip($first);
ksort($my_temp);

foreach (
$my_temp as $k)
{
    
$my_first[]    = $first[$k];
    
$my_second[]    = $second[$k];


HTH

~

sagi 02.09.2002 23:20

1) Daten auslesen
2) Daten entschlüsseln
3) Daten in eine tem. DB schreiben
4) Daten sortiert auslesen
5) Temp. DB leeren
6) Daten ausgeben

mfg

c.

RaistlinMajere 02.09.2002 23:21

hm, der grundgedanke ist klar, die sortierung wird nicht während dem auslesen durch sql vorgenommen, sondern durch php und sortierung eines arrays. daraus läßt sich was machen, ja, danke für den tipp. :)

RaistlinMajere 03.09.2002 03:54

Zitat:

Original geschrieben von käptn
Ungetestet, aber vielleicht lässt sich was draus machen:

PHP-Code:

$sql "SELECT * FROM " $db;
$abfrage mysql_query($sql);

if(
mysql_num_rows($abfrage)) {
  while(
$row mysql_fetch_assoc($abfrage)) {
   
$first[]    = str_rot13($row['teil1']);
   
$second[]    = str_rot13($row['teil2']);
  }
}

$my_temp array_flip($first);
ksort($my_temp);

foreach (
$my_temp as $k)
{
    
$my_first[]    = $first[$k];
    
$my_second[]    = $second[$k];


HTH

~

funzt von der idee her an sich ganz gut (bis auf ein paar kleine fehler, die ich im code unten ausgebessert und dokumentiert habe), nur ist es nicht unbedingt nötig, die keys zu sortieren (funzt aber auch), es ginge auch gleich über eine sortierung der arrayinhalte selbst und dann einem folgenden flip, also so wie folgt.

PHP-Code:

$sql "SELECT * FROM " $db;
$abfrage mysql_query($sql$verbindung); // ohne angabe einer db-verbindung wird ein query kaum funktionieren, ist einfach ein nötiger parameter
$anzahl mysql_num_rows($abfrage); // jetzt brauche ich diese variable, für die angabe der größe der arrays
$teil1 = array($anzahl); // müssen definiert werden, um mit einem laufindex durchlaufen werden zu können, so wie in der ursprungsfunktion gehts nicht
$teil2 = array($anzahl);
$index 0;

if(
$anzahl>0) {
  while(
$row mysql_fetch_object($abfrage)) {
   
$first[] = str_rot13($row->teil1]);
   
$second[] = str_rot13($row->teil2]);
   
$index++;
  }
}

asort($first);
$my_temp array_flip($first);
// hier ginge auch ksort($my_temp) anstatt asort($first)

foreach ($my_temp as $k)
{
    
$my_first[]    = $first[$k];
    
$my_second[]    = $second[$k];


ein einziges problem gibt es allerdings noch, und zwar bei beiden versionen. weder ksort() noch asort() sind in der lage, korrekt zu sortieren, wenn sich in dem zu sortierenden array doppelte einträge befinden, da wird dann einfach der letzte genommen und die vorher gefundenen ignoriert. gibt es vllt. eine intelligentere suchfunktion oder kann man dem sonst wie beikommen?

RaistlinMajere 03.09.2002 04:44

noch ein paar fehler
 
die ich leider nicht mehr ausbessern konnte (zeit abgelaufen :mad: ), das folgende sollte aber jetzt passen:
PHP-Code:

$sql "SELECT * FROM " $db;
$abfrage mysql_query($sql$verbindung); // ohne angabe einer db-verbindung wird ein query kaum funktionieren, ist einfach ein nötiger parameter
$anzahl mysql_num_rows($abfrage); // jetzt brauche ich diese variable, für die angabe der größe der arrays
$first = array($anzahl); // müssen definiert werden, um mit einem laufindex durchlaufen werden zu können, so wie in der ursprungsfunktion gehts nicht
$second = array($anzahl);
$index 0// leider nötig, habs versucht wie in der ursprungsversion, funzte, aber nicht ganz reibungslos

if($anzahl>0) {
  while(
$row mysql_fetch_object($abfrage)) {
   
$first[$index] = str_rot13($row->teil1);
   
$second[$index] = str_rot13($row->teil2);
   
$index++;
  }
}

asort($first);
$my_temp array_flip($first);
// hier ginge auch ksort($my_temp) anstatt asort($first)

foreach ($my_temp as $k)
{
    
$my_first[]    = $first[$k];
    
$my_second[]    = $second[$k];


bleibt nur noch die problematik mit den doppelten einträgen :(

käptn 03.09.2002 15:49

Tja, selber ne Funktion bauen? :D

Und wegen den Arrays und Indizes: bei mir funkt das automatische erweitern mit array[] problemlos.

~

RaistlinMajere 03.09.2002 16:31

Zitat:

Original geschrieben von käptn
Tja, selber ne Funktion bauen? :D

~

hab die while-schleife etwas abgeändert:

PHP-Code:


if($anzahl>0) {
  while(
$row mysql_fetch_object($abfrage)) {
    
$first[$index] = str_rot13($row->teil1);
    
$second[$index] = str_rot13($row->teil2);
 
    for(
$i=0$i<$index$i++) {
      if(
$first[$index] == $first[$i]) {
        
$first[$index] .= "";
      }
    }

    
$index++;
  }


das zusätzliche leerzeichen im zu sortierenden array fällt in der darstellung ja nicht weiter auf, sorgt aber dafür, daß die strings nicht gleich sind und somit beide bei der sortierung berücksichtigt werden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag