WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 02.09.2002, 18:35   #1
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard 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?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 02.09.2002, 20:07   #2
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 02.09.2002, 23:20   #3
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

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.
____________________________________
www.sagmueller.net

Freedom - use it or lose it (Lawrence Lessig)

Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss.
sagi ist offline   Mit Zitat antworten
Alt 02.09.2002, 23:21   #4
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

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.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 03.09.2002, 03:54   #5
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

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?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 03.09.2002, 04:44   #6
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard noch ein paar fehler

die ich leider nicht mehr ausbessern konnte (zeit abgelaufen ), 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
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 03.09.2002, 15:49   #7
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

Tja, selber ne Funktion bauen?

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

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 03.09.2002, 16:31   #8
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

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

~
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.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:30 Uhr.


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