+ Antworten
Ergebnis 1 bis 11 von 11

Thema: Userdaten Update wenn vorhanden oder Insert wenn nicht vorhanden

  1. #1
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146

    Userdaten Update wenn vorhanden oder Insert wenn nicht vorhanden

    Ich möchte Userdaten festhalten und in einer Statistik auswerten.

    Dazu habe ich mir folgendes Script überlegt das mir z.B. die Browser ausliest die ich über den HTTP_USER_AGENT erhalte.

    Jetz möchte ich den Browser noch in eine Tabelle eintragen, dabei soll er prüfen ob der Browser bereits in der Tabelle steht und dann den Wert bei Hits um 1 erhöhen, wenn der Browser nicht in der Tabelle ist soll der Browser eingetragen werden.

    Das Echo habe ich nur zu Test zwecken eingebaut.

    Muss ich die Abfragen für Insert bzw. Update nach jeder if Abfrage einfügen oder reicht es wenn ich das einmal mache.

    Wie muss diese dann aussehen.

    Die Tabelle besteht aus folgenden Spalten:
    ID | Browser | Hits



    PHP-Code:
            if (preg_match("=Mozilla ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Mozilla&nbsp".$agent_br[1];
            echo 
    "Ihr Browser ist: ".$bs."<br><hr>";
        }
        
            elseif(
    preg_match("=MSIE ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Internet&nbspExplorer&nbsp".$agent_br[1];
            echo 
    "Ihr Browser ist: ".$bs."<br><hr>";
        }
        
            elseif(
    preg_match("=Netscape ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Netscape&nbsp".$agent_br[1];
            echo 
    "Ihr Browser ist: ".$bs."<br><hr>";
        }
        
            elseif(
    preg_match("=Opera ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Opera&nbsp".$agent_br[1];
            echo 
    "Ihr Browser ist: ".$bs."<br><hr>";
        }
        
            elseif(
    preg_match("=Konqueror ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Konqueror&nbsp".$agent_br[1];
            echo 
    "Ihr Browser ist: ".$bs."<br><hr>";
        }    
        
            else
        {
            
            
    $bs "unbekannt".$agent_br[1];
            echo 
    ".$bs.<br><hr>";
        } 
    MFG Maffy

  2. #2
    Registered User cartman2710 macht alles soweit korrekt Avatar von cartman2710
    Registriert seit
    Oct 2003
    Ort
    Ennepetal
    Beiträge
    34
    Hi,

    den select kannst du bestimmt selbst zusammenstellen.

    1. select nach allen "ifs". Die variable $bs hat dann auch nur einen Wert.
    2. Abfragen ob Wert $bs in Tabelle: Wenn Ergebnis gleich null, dann insert, wenn ergebnis gleich 1, dann update.

    Probiers mal. Wenn das nicht klappt, schicke ich die gerne den code.

    Gruß,

    cartman

  3. #3
    Registered User cartman2710 macht alles soweit korrekt Avatar von cartman2710
    Registriert seit
    Oct 2003
    Ort
    Ennepetal
    Beiträge
    34
    noch eine kleine hilfe-stellung:

    $sql="SELECT * FROM tabelle WHERE browser='$bs'";
    .
    .
    $ergebnisse = mysql_num_rows($result);

    if ($ergebnisse = 0) {
    $sql="INSERT INTO tabelle...";
    }
    else {
    $hits=$row[hits]+1;
    $sql="UPDATE tabelle SET ... ";
    }

  4. #4
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146
    Gut, damit kann ich schon was Anfang.

    Ich werds mal Probieren.

  5. #5
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Um einen Query zu sparen, könntest du REPLACE nutzen: http://www.mysql.com/doc/de/REPLACE.html

    Einfach im ersten Query, den original-zähl-Wert ziehen und dem Replace-Query +1 mitgeben.

    Gruss
    Jan

  6. #6
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146
    Ich habe mir jetzt folgende Funktion für das überprüfen geschrieben. Kann das so hinhauen?

    PHP-Code:
    function checkdata()
        {

    // Wenn der Browser nicht vorhanden ist dann Eintragen ansonsten die Anzahl um 1 erhöhen
        
        
    $query " SELECT * FROM  tut_statbs WHERE browser='$bs' ";
        
    $ergebniss mysql_num_rows($query);
        
        if(
    $ergebniss 0)     $query.= " INSERT INTO tut_statbs (id,browser,hits) VALUES('', '$bs', '1')") OR DIE("_LINE_")"; 
                            $query .= " 
    UPDATE tut_statbs SET hits '$row[hits]+1' WHERE browser '$bs' "; 

    // Wenn Betriebssystem nicht vorhanden ist dann Eintragen ansonsten die Anzahl um 1 erhöhen
        
        $query = " 
    SELECT FROM  tut_statos WHERE system='$os' ";
        $ergebniss = mysql_num_rows($query);
        
        if($ergebniss = 0)     $query.= " 
    INSERT INTO tut_statos (id,system,hitsVALUES('''$os''1')") OR DIE("_LINE_")"
                            
    $query .= " UPDATE tut_statos SET hits = '$row[hits]+1' WHERE system= '$os' "
        
        } 

  7. #7
    Registered User cartman2710 macht alles soweit korrekt Avatar von cartman2710
    Registriert seit
    Oct 2003
    Ort
    Ennepetal
    Beiträge
    34
    Hi,

    Im Prinzip schon (hab es selber nicht getestet). Anbei einige Anmerkungen:


    1. Das Ergebnis wird bei dir immer "0" sein. --> bei den if-Abfragen immer 2 Gleichheitszeichen setzen: if($ergebniss == 0)

    2. mit "else" arbeiten: if($ergebniss = 0){...} else {...}

    3. Du definierst gloabl eine Variable "$query". In deinen if-Abfragen bleibt diese bestehen, da du ihn mit ".=" dran hängst. bitte den Punkt vor dem Gleichheitszeichen weglassen.

    4. Du hast den Inhalt der Zeile noch nicht ausgelesen (z.B für die Variable $row[hits]): $row = mysql_fetch_array($result);

    Alles wird gut.

  8. #8
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146
    Ich habe mir das so überlegt, habs aber auch noch nicht getestet.

    PHP-Code:

    if (preg_match("=Mozilla ([0-9]{1,2}).[0-9]{1,2}=","$agent"$agent_br))
        {
            
    $bs "Mozilla&nbsp".$agent_br[1];

    // Führt die Anweisungen in der Funktion checkdata aus
            
    checkdata();
        }
    .
    .


  9. #9
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146
    Ich habe das Script jetzt soweit das er mir die Daten überprüft und die Daten einträgt. Nur das hochzählen funktioniert noch nicht.

    Hier ist mal der Link zur Statistik: Link zur Testseite
    PHP-Code:
        elseif (preg_match("=Windows 95=""$agent"$agent_os))
        {
            
    $os "Windows&nbsp;95".$agent_os[1];
            echo 
    "Ihr Betriebssystem ist: ".$os."\n";
            
            
    $sql mysql_fetch_row(mysql_query("SELECT * FROM tut_statos WHERE system like '$os'"));
            
            if(
    $sql == 0)
            
            { 
                
    mysql_query ("INSERT INTO tut_statos (id,system,hits) VALUES('', '$os', '1')"); 
            } 
            else 
            { 
                
    $data mysql_fetch_array($sql); 
                
    $data['hits']++; 
                
                
    mysql_query ("UPDATE tut_statos SET hits = '$data[hits]' WHERE system like '$os' ");
            }
        } 

  10. #10
    Registered User cartman2710 macht alles soweit korrekt Avatar von cartman2710
    Registriert seit
    Oct 2003
    Ort
    Ennepetal
    Beiträge
    34

    Wink

    Hi,

    bitte prüf mal deinen sql-String und dein Hochzählen.

    $data = mysql_fetch_array($sql); // ($sql ist oben schon anders definiert, nämlich mit "mysql_fetch_row(mysql_query("SELECT.... )"


    $data['hits']++; // Versuchs mal mit $data['hits']=$data['hits']+1;


    Bald klappt es dann! Versprochen!

    Gruß,

  11. #11
    TP-Senior maffy macht alles soweit korrekt
    Registriert seit
    Oct 2002
    Ort
    Steinach
    Beiträge
    146
    So, nun klappt es aber wirklich:

    Das Hinzufügen klappt wenn der Browser net vorhanden ist und auch das Hochzählen wenn der Browser bereits vorhanden ist.

    PHP-Code:
        elseif (preg_match("=Windows 98=""$agent"$agent_os))
        {
            
    $os "Windows&nbsp;98".$agent_os[1];
            echo 
    "Ihr Betriebssystem ist: ".$os."\n";
            
            
    $sql mysql_fetch_row(mysql_query("SELECT * FROM tut_statos WHERE system like '$os'"));
            
            if(
    $sql == 0)

            { 
                
    mysql_query ("INSERT INTO tut_statos (id,system,hits) VALUES('', '$os', '1')"); 
            } 
            else 
            { 
                
    $query mysql_query("SELECT * FROM tut_statos WHERE system like '$os'");
                
    $data mysql_fetch_array($query); 
                
    $data['hits']++; 
                
                
    mysql_query ("UPDATE tut_statos SET hits = '$data[hits]' WHERE system like '$os'  ");
            }
        } 
    Geändert von maffy (12.02.2004 um 14:53 Uhr)

+ Antworten

Aktive Benutzer

Aktive Benutzer

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

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51