sql UPDATE mit php

Die Scriptsprache PHP fĂĽr die Gestaltung von dynamischen Websites.

sql UPDATE mit php

Beitragvon herrhund » Mi 07 Mär, 2007 18:17

Hi!
Ich hab ein kleines Problem weil ich mit php eigentlich nicht viel am Hut habe, also...
Ich will aus meiner Datenbank wo die "USer agents" meine Besucher eingetragen werden die "Unknown" einträge auf 0 setzen...
Leider funktioniert das irgendwie nicht
ich hab es (u.a) so versucht:
Code: Alles auswählen
$query = "UPDATE ff_stats_agents  SET hits = 0 WHERE agent = 'Unknown' ";
$database->setQuery( $query );   

Stimmt da mit der Syntax irgendwas nicht?
Ich hab einen kleinen Screenshot meiner als html exportierten DB mal angehängt
Bild
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56

Beitragvon hellbringer » Mi 07 Mär, 2007 19:11

paste bitte ein paar zeilen von einem sql export der table. hinter diesem "screenshot von html von datenbank" kann alles mögliche stecken.

welche klasse hat das object $database? und was genau macht die methode setQuery? von php ist die jedenfalls nicht.
hellbringer
Profi-User
Profi-User
 
Beiträge: 1619
Registriert: Di 04 Mai, 2004 19:35

Beitragvon herrhund » Mi 07 Mär, 2007 21:46

Ich hoffe du meinst mit dem SQL export sowas hier:
Code: Alles auswählen
# Table structure for table `feuerwehr_stats_agents`
#
DROP table IF EXISTS feuerwehr_stats_agents;
CREATE TABLE `feuerwehr_stats_agents` (
  `agent` varchar(255) NOT NULL default '',
  `type` tinyint(1) unsigned NOT NULL default '0',
  `hits` int(11) unsigned NOT NULL default '1'
) TYPE=MyISAM;
#
# Dumping data for table `feuerwehr_stats_agents`
#
INSERT INTO feuerwehr_stats_agents VALUES ('Mozilla 5.0',0,30356);
INSERT INTO feuerwehr_stats_agents VALUES ('Unknown',1,30590);



Und wegen dem $database usw. weiss ich leider auch nicht genau was da drinnen steckt, das wird anscheinend von irgendwo includet ...
Es handelt sich nämlich um Joomla...
auf jeden Fall steht im Script ein paar Zeilen nach meinen:
Code: Alles auswählen
$query = "SELECT sum(hits) AS count FROM #__stats_agents WHERE type='1'";
$database->setQuery( $query );
$hits = $database->loadResult();

Deshalb hab ich gedacht ich werde mit meinen Variablen nicht ganz falsch liegen....
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56

Beitragvon mo » Mi 07 Mär, 2007 21:53

fĂĽge mal die zeile:
$database->loadResult();
ans ende deines scripts an, vllt gehts dann...

ist aber nur ne vermutung
LINEA7/XPIRIO ADSL 2048/512 FLAT
mo
Board-Mitglied
Board-Mitglied
 
Beiträge: 185
Registriert: Do 06 Jan, 2005 16:45

Beitragvon herrhund » Mi 07 Mär, 2007 22:01

Resultat:
Code: Alles auswählen
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in ...../includes/database.php on line 401

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in ....../includes/database.php on line 404


aber stimmt die syntax meiner sql update zeile? wegen den ganzen '..' und ".." usw. ?
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56

Beitragvon herrhund » Mi 07 Mär, 2007 22:07

Falls es hilft:
Hier noch so eine Update Anweisung aus einer anderen Joomla Komponente...

Code: Alles auswählen
$query = "UPDATE #__content_rating"
            . "\n SET rating_count = rating_count + 1, rating_sum = rating_sum + $user_rating, lastip = '$currip'"
            . "\n WHERE content_id = $cid"
            ;
            $database->setQuery( $query );
            $database->query() or die( $database->stderr() );
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56

Beitragvon mo » Mi 07 Mär, 2007 22:08

ok, ja letzteres hilft hier weiter...
probier mal statt oben genannter zeile diese hier:
$database->query() or die( $database->stderr() );
LINEA7/XPIRIO ADSL 2048/512 FLAT
mo
Board-Mitglied
Board-Mitglied
 
Beiträge: 185
Registriert: Do 06 Jan, 2005 16:45

Beitragvon herrhund » Mi 07 Mär, 2007 22:17

uii, danke, funktioniert perfekt :))))
Wäre es jetzt auch noch möglich den Wert vorher auszulesen, abzuspeichern, dann den Wert unter "hits" von "Mozilla 5.0" in der selben Tabelle auch auszulesen und den "hits" Wert den ich vor dem Löschen bei "unknown" ausgelesen habe davon zu subtrahieren?
Danke schon mal :)

//edit:
Danke, habs selber hingekriegt.... Schaut bitte mal ob es hier einen Denkfehler gibt:

Code: Alles auswählen
$query = "SELECT sum(hits) AS count FROM #__stats_agents WHERE agent='Unknown' AND type='1'";
$database->setQuery( $query );
$hits = $database->loadResult();


$query = "UPDATE #__stats_agents  SET hits = '$hits' WHERE agent = 'Mozilla 5.0' AND type='' ";
$database->setQuery( $query );

$database->query() or die( $database->stderr() );






$query = "UPDATE #__stats_agents  SET hits = 0 WHERE agent = 'Unknown' AND type='1' ";
$database->setQuery( $query );

$database->query() or die( $database->stderr() );
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56

Beitragvon mo » Mi 07 Mär, 2007 22:36

$qry="select sum(hits) from ff_stats_agents where agent='Unknown'";
$database->setQuery($qry);
$hits_uk = $database->loadResult();
$qry="select sum(hits) from ff_stats_agents where agent='Mozilla 5.0'";
$database->setQuery($qry);
$hits_mz = $database->loadResult();
$query = "UPDATE ff_stats_agents SET hits = 0 WHERE agent = 'Unknown' ";
$database->setQuery( $query );
$database->query() or die( $database->stderr() );
echo $hits_mz-$hits_uk;

abziehen tuts, es schreibt den wert aber nciht in die datenbank... (wĂĽrd auch schlecht gehen, da du die browser komischerweise mehrfach in der datenbank hast (und ich mich frage, was das eigetnlich bringen soll..))
LINEA7/XPIRIO ADSL 2048/512 FLAT
mo
Board-Mitglied
Board-Mitglied
 
Beiträge: 185
Registriert: Do 06 Jan, 2005 16:45

Beitragvon mo » Mi 07 Mär, 2007 22:41

dein dazueditierter code macht irgendwie nicht ganz das was du willst glaub ich *g*.
zudem sollte man zahlenspalten nicht mit werten in ' ' vergleichen*), das geht schief...

*)zuweisen auch net..
LINEA7/XPIRIO ADSL 2048/512 FLAT
mo
Board-Mitglied
Board-Mitglied
 
Beiträge: 185
Registriert: Do 06 Jan, 2005 16:45

Beitragvon herrhund » Mi 07 Mär, 2007 22:52

Okay.... ich hab den Mozilla 5.0 jetzt nur mehr einmal in der DB...
jetzt siehts bei mir so aus:

Code: Alles auswählen
$query = "SELECT sum(hits) AS count FROM #__stats_agents WHERE agent='Unknown' AND type='1'";
$database->setQuery( $query );
$uk_hits = $database->loadResult();

$query = "SELECT sum(hits) AS count FROM #__stats_agents WHERE agent='Mozilla 5.0' AND type='0'";
$database->setQuery( $query );
$mz_hits = $database->loadResult();

   $differenz = $mz_hits + $uk_hits;




$query = "UPDATE #__stats_agents  SET hits = '$differenz' WHERE agent = 'Mozilla 5.0' AND type='' ";
$database->setQuery( $query );

$database->query() or die( $database->stderr() );






$query = "UPDATE #__stats_agents  SET hits = 0 WHERE agent = 'Unknown' AND type='1' ";
$database->setQuery( $query );

$database->query() or die( $database->stderr() );


sollte doch eigentlich funktionieren...
(Das mit dem #_ anstatt ff_ ist ĂĽbrigens gewollt^^
Bild
herrhund
Board-User Level 1
Board-User Level 1
 
Beiträge: 619
Registriert: Do 17 Feb, 2005 12:56


ZurĂĽck zu PHP

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 1 Gast