Malte: Problem mit Script

Hi,

wie die meisten von euch wahrscheinlich schon wissen, programmiere ich gerade ein kleines Forum.
Jetzt bin ich gerade dabei ein Script zuschreiben, dass den Usern die Ränge zuordnet, wenn sie eine bestimmte Anzahl von Posts haben.
Das sieht so aus:

  
<?php  
error_reporting(E_ALL);  
  
$sql1 = "SELECT posts FROM user WHERE id ='".$_SESSION["user_id"]."' AND username =  
  
'".$_SESSION["user_username"]."' AND password = '".$_SESSION["user_password"]."'";  
$result = mysql_query($sql1) OR die(mysql_error());  
while($rang = mysql_fetch_array($result)){  
$user_posts = $rang["posts"];  
}  
  
//In der DB steht einmal wieviele posts man haben muss um  
//den nächsten Rand zu erreichen und, wie der Rang heißt.  
  
$sql2 = "SELECT posts, name FROM raenge";  
$result = mysql_query($sql2) OR die(mysql_error());  
while($raenge = mysql_fetch_array($result)){  
$forum_posts[] = $raenge["posts"];  
$forum_name[] = $raenge["name"];  
}  
  
for ($i = 0; $i < count ($forum_posts); $i++) {  
  
if($user_posts >= $forum_posts[$i])  
{  
$user_rang = $forum_name[$i];  
}  
  
$sql3 = "UPDATE user SET rang = '".$user_rang."' WHERE id ='".$_SESSION["user_id"]."' AND  
  
username = '".$_SESSION["user_username"]."' AND password =  
  
'".$_SESSION["user_password"]."'";  
 mysql_query($sql3) OR die(mysql_error()  

Das klappt auch alles gut. Aber bis jetzt ist es nur so, dass man den Rang nur zugeordnet bekommt, wenn man genau die Anzahl der posts hat wie sie in der DB stehten.

Jetzt würde ich gerne wissen, wie ich mein Script umschreiben muss, damit ich den Rang auch bekomme, wenn ich eine bestimmt Anzhal an Posts besitzte aber nicht genau wie in der DB sondern sogar schon 5 mehr oder so.

Ich meine es so:

1. Rang = 50 Posts
2. Rang = 150 Posts

Bis jetzt macht mein Script den Rang zuweisen nur, wenn man genau die Posts hat. Ich will es aber auch so wenn er zum Beispiel nur 75 Posts hat das er den neuen Rang bekommt.

Kann mir da einer von euch helfen?

Danke

  1. Hallo!

    Warum willst du die Ränge in der DB erfassen, warum berechnest du diese nicht erst bei der Anzeige?

    Gruß aus Iserlohn

    Martin

    1. Hi,

      weil ich es so gemacht habe, dass der Admin die Ränge jederzeit ändern kann und auch die Anzahl der Posts, wenn es sich ändert.

      Malte

  2. Hi!

    Siehe Kommentare...

      
      
    $sql2 = "SELECT posts, name FROM raenge";  
    $result = mysql_query($sql2) OR die(mysql_error());  
    while($raenge = mysql_fetch_array($result)){  
    $forum_posts[] = $raenge["posts"];  
    $forum_name[] = $raenge["name"];  
    }  
    //die Daten werden unsortiert abgefragt, wie sieht print_r($raenge) aus?  
      
    for ($i = 0; $i < count ($forum_posts); $i++) {  
    if($user_posts >= $forum_posts[$i])  
    {  
    $user_rang = $forum_name[$i];  
    }  
    //da du hier >= verwendest, müsste das eigentlich so wie gewünscht funktionieren. Ich gehe davon aus, dass es an der mangelden Sortierung von $forum_posts liegt.  
      
    mysql_query($sql3) OR die(mysql_error()  
    //hier fehlt eine schließende Klammer  
    
    > 
    
    

    Gruß aus Iserlohn

    Martin

    1. Wie kann ich Daten sotieren?

      1. Hi!

        Wie kann ich Daten sotieren?

        Entweder schon im SQL-Teil, Stichwort ORDER BY, oder aber via PHP, siehe hier sort() und verwandte.

        Gruß aus Iserlohn

        Martin

        1. Also dann zum Beispiel so:

            
          $sql2 = "SELECT posts FROM raenge ORDER BY posts DESC";  
          
          

          Und dann müsste es auch so klappten:

            
          for($i = 0; i < count($forum_posts); i++)  
          {  
          if($user_posts >= $forum_posts[$i])  
          {  
          $user_rang = $forum_name[$i];  
          }  
          }  
          
          

          oder was?

          1. Hi!

            $sql2 = "SELECT posts FROM raenge ORDER BY posts DESC";

              
            DESC - absteigende Sortierung, also höchste zuerst. Nimm ASC, das passt zum Rest.  
              
            Und was hat eigentlich gegen einen Versuch gesprochen? ;-)  
              
            Gruß aus [Iserlohn](http://www.iserlohn.de/)  
              
            Martin
            
            -- 
            Selfcode: [ie:{ fl:( br:^ va:) ls:# fo:| rl:( n4:( ss:| de:> js:) ch:? sh:( mo:| zu:)](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%5E+va%3A%29+ls%3A%23+fo%3A%7C+rl%3A%28+n4%3A%28+ss%3A%7C+de%3A%3E+js%3A%29+ch%3A%3F+sh%3A%28+mo%3A%7C+zu%3A%29)
            
  3. echo $begrüßung;

    Bis jetzt macht mein Script den Rang zuweisen nur, wenn man genau die Posts hat. Ich will es aber auch so wenn er zum Beispiel nur 75 Posts hat das er den neuen Rang bekommt.

    Was ergaben deine Debug-Versuche? Stimmt an irgendeiner Stelle deine Variableninhalte nicht mit den von dir erwarteten Werten überein? Wenn ja, an welcher?

    echo "$verabschiedung $name";

    1. Also alle Variablen stimmen mit den Daten aus der Db überein. Also ich wüsste nicht woran es liegen könnte