Page 1 of 1

PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-29 01:57
by bfal
Hei,

Ich habe mit folgenden Code mehrere Werte ausgelesen:
<?
db_connect($db_host, $db_user, $db_pass);
$id = db_query("select account from pop3 where kunde = '$PHP_AUTH_USER' order by number");
while ($werte = db_fetch_array($id)) {
$account = $werte["account"];
}
?>

Jetzt möchte ich folgenden Code so ändern, das er immer wieder in die Datenbank schreibt, wobei der Wert $username immer mit dem nächsten Wert aus $account geschrieben wird.

$cmd = "insert into userpref " . "(preference, value, username) values ( ".
"'$preference', '$address', '$username')";
$result= mysql_query($cmd);

(Also 1. Wert $username=1
2. Wert $username gleich=2 usw. wobei die Anzahl der Werte nicht fest ist)

Wie kann ich das bewerkstelligen.

Danke im vorraus.

mfg
Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 12:00
by bigmac
Okay,.. ich habs jetzt dreimal durchgelesen,.. und sogar länger drüber überlegt .. ;) aber erklärs mir bitte nochmal :)

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 13:30
by bfal
Hei,

ähm, okay jetzt wo ich mir das selbst durchlese.....ich versuche es mal in einfachen Worten.

Ich baue gerade für Confixx eine Erweiterung um Spamassassin zu steuern. Als Basis habe ich das PHP-SA Skript von spamassassin.org benutzt.
Jetzt kann ich ja mit folgendem Code die Pop3 Postfächer des eingeloggten Users auslesen.
<?
db_connect($db_host, $db_user, $db_pass);
$id = db_query("select account from pop3 where kunde = '$PHP_AUTH_USER' order by number");
while ($werte = db_fetch_array($id)) {
$account = $werte["account"];
}
?>


Wenn der User jetzt einen Wert im WebInterface ändert, möchte ich mit

$cmd = "insert into userpref " . "(preference, value, username) values ( ".
"'$preference', '$address', '$username')";
$result= mysql_query($cmd);


den Wert mit dem dazugehörigen Pop3 Postfach in die Datenbank schreiben. Wenn ein User jedoch mehrere Postfächer hat (web1p1, web1p2 usw.) soll er den Insert Befehl mehrmals absenden, wobei die Variable $username jeweils mit dem nächsten POP3 Postfach gefüllt wird, sodass die Einstellungen immer für alle POP3 Postfächer des jeweiligen Confixx Benutzer gelten.
Wie läßt sich das am besten machen?


So, ich hoffe ich konnte mich jetzt verständlich ausdrücken ;-)

mfg

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 13:43
by deanwickert
also ich weiß nicht. irgendwie kommt mir das ganze spanisch vor. :wink:

Wenn ich das ganze richtig verstehe stehen die postfachnamen in einem array. also kannst du da ganz doch in eine schleife einbetten.

entweder mit ner for-Schleife

Code: Select all

for ($n=0; $n<count($array); $n++) {

}
oder mit ner while-schleife

Code: Select all

while ($variable = $array[$n]) {


  $n++;
}
Ich hoffe, dass es hilft. war irgendwie zu einfach.

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 14:27
by kahler
bfal wrote:

Code: Select all

$account = $werte["account"];
Was für einen Wert nimmt denn $account an? Ich gehe Mal davon aus, dass das der Name des Postfaches ist, also web1p1, web1p2 und du aber nur die letzte Zahl haben möchtest (oder sehe ich das jetzt auch falsch)??

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 14:40
by bfal
Also ich möchte nur die Potfächer eines User auslesen (User: web1), und diese beim schreiben von Daten in die Mysql Datenbank berücksichtigen, sodas pro Postfach ein "INSERT" erzeugt wird.

Inzwischen habe ich mein Problem erkannt. Array heißt das Stichwort (Thx, @deanwickert).
Also kann ich die Werte aus "select account from pop3 where kunde = '$PHP_AUTH_USER' order by number" in ein Array schreiben?

Ich denke das würde mir schon helfen.

Danke im vorraus..

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 15:01
by kahler
bfal wrote:Also kann ich die Werte aus "select account from pop3 where kunde = '$PHP_AUTH_USER' order by number" in ein Array schreiben?
Klar, wieso nicht...

...versuchs mal hiermit:

Code: Select all

<?php
 $account = array();
 db_connect($db_host, $db_user, $db_pass); 
 $id = db_query("select account from pop3 where kunde = ".$PHP_AUTH_USER." order by number"); 
 while ($werte = db_fetch_array($id))
 { 
  $account[count ($account)] = $werte["account"]; 
 } 
?> 
Aber wieso willst du die Werte erst in ein Array schreiben, um sie gleich in der nächsten Schleife wieder einzeln aus dem Array auszulesen. Versuch doch Mal, das ganze in eins zu packen. So nach der Art:

Code: Select all

<?php
 $account = array();
 db_connect($db_host, $db_user, $db_pass); 
 $id = db_query("select account from pop3 where kunde = ".$PHP_AUTH_USER." order by number"); 
 while ($werte = db_fetch_array($id))
 { 
  $cmd = "insert into userpref (preference, value, username) values (".$preference.", ".$address.", ".$werte["account"].")"; 
  $result= mysql_query($cmd); 
 } 
?> 
Damit hättest du dir eine Schleife und ein Array gespart...

...Das mag zwar jetzt nicht besonders viel sein, aber wenn du 1000 solche Scripte auf deinem Server hast, dann kann es schon einen Unterschied machen.

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 16:12
by bfal
@kahler:

Warum einfach wenn es auch umständlich geht ;-)
Danke für den Tipp, werde ich mal probieren.

mfg

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-30 22:49
by bfal
Hei,

ich habe da noch ein Problem, wo ich einfach nicht auf die Lösung komme:
Folgender Code:
$account = array();
db_connect($db_host, $db_user, $db_pass);
$id = db_query("select account from pop3 where kunde = '$PHP_AUTH_USER' order by number");

while ($pop3konten = db_fetch_array($id))
{
// update users's rewrite_subject
if(!$rewrite_subject) { $rewrite_subject = 0; }
$cmd = "delete from userpref where username = '$pop3konten[account]' " .
"AND preference = 'rewrite_subject'";
$result = mysql_query($cmd);
$cmd = "insert into userpref (username, preference, value) " .
"VALUES ('$pop3konten[account]', 'rewrite_subject', '$rewrite_subject')";
$result = mysql_query($cmd);

// update users's report_header
if(!$report_header) { $report_header = 0; }
$cmd = "delete from userpref where username = '$pop3konten[account]' " .
"AND preference = 'report_header'";
$result = mysql_query($cmd);
$cmd = "insert into userpref (username, preference, value) " .
"VALUES ('$pop3konten[account]', 'report_header', '$report_header')";
$result = mysql_query($cmd);

// update users's defang_mime
if(!$defang_mime) { $defang_mime = 0; }
$cmd = "delete from userpref where username = '$pop3konten[account]' " .
"AND preference = 'defang_mime'";
$result = mysql_query($cmd);
$cmd = "insert into userpref (username, preference, value) " .
"VALUES ('$pop3konten[account]', 'defang_mime', '$defang_mime')";
$result = mysql_query($cmd);

// update user's use_terse_report
if(!$use_terse_report) { $use_terse_report = 0; }
$cmd = "delete from userpref where username = '$pop3konten[account]' " .
"AND preference = 'use_terse_report'";
$result = mysql_query($cmd);
$cmd = "insert into userpref (username, preference, value) " .
"VALUES ('$pop3konten[account]', 'use_terse_report', '$use_terse_report')";
$result = mysql_query($cmd);

// update users's required_hits
if(!$required_hits) { $required_hits = 5; }
$cmd = "delete from userpref where username = '$pop3konten[account]' " .
"AND preference = 'required_hits'";
$result = mysql_query($cmd);
$cmd = "insert into userpref (username, preference, value) " .
"VALUES ('$pop3konten[account]', 'required_hits', '$required_hits')";
$result = mysql_query($cmd);
}


Das Problem ist, das er für $pop3konten[account] immer ARRAY einträgt, anstatt die Werte web1p1, web1p2 usw.

Wo ist da mein Fehler?

Danke im vorraus...

mfg

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-31 14:43
by outofbound
Hi,

vorab: Ich will dich nicht beleidigen, aber bitte schreib deinen
Code etwas übersichtlicher (Einrücken z.B)... ist ja ein Krampf,
das so zu debuggen ;)

$pop3konten ist ein array (Nicht Assoziativ, sonst wäre es
db_fetch_assoc in der Schleife)...

Somit ist $pop3konten[account] = $pop3account[0], es sei
denn du hast "account" als Constante definiert... ;)

Ich gehe einfach mal davon aus, dass es funzt, wenn du

a) while ($pop3konten = db_fetch_assoc($id))

und dann noch $pop3konten["account"] verwendest ;)

Gruss,

Out

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-05-31 22:33
by bfal
Hei OutOfBound,

Im Quellcode ist es etwas übersichtlicher ;-)

ich habe den Code mal nach deinen Angaben geändert Jetzt kommt aber folgende Fehlermeldung Call to undefined function: db_fetch_assoc() in /xxxx/xxx/xxx/spamassassin.php

Was soll mir das sagen? Muß ich die Funktion noch irgendwo definieren?

mfg

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-06-01 13:50
by outofbound
Oh, verzeih mir...


bei dir heisst die Funktion wohl mysql_fetch_assoc() ;(
Das ist eine Std- Funktion von PHP... geg. falls einfach
schnell auf php.net nachschauen ;)

DB- Abstraktionen sind was tolles, aber man gewöhnt sich
so schnell dran... ;)

Gruss,

Out

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-06-01 14:41
by bfal
Supi,

es funzt :-D
Jetzt macht er das was ich will. Vielen Dank.

Gruß

Björn

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-06-02 15:30
by webalizer
Ich hätte interesse an dieser erweiterung für Confixx. Gibst Du das raus wenn es fertig ist? Bitte bitte :)

Re: PHP mehrere Werte gleichzeitig schreiben....

Posted: 2003-06-02 15:44
by bfal
Noch funktioniert nicht alles.
Aber sobald die erste Version fertig ist, veröffentliche ich es hier. :wink:

Gruß

Björn