rechnen mit php und sql

Moin Hackerboad-Gemeinde,
ich hab mal wieder n Problem.
Und zwar will ich für die Hörer meines Radios eine Chart-Seite (top 100 oda so) machen, wo sie selber vorschläge einbringen können.

Das ganze funktioniert so:
ich gebe in ein Formular den Interpreten und den Titel ein. Dieser wird dann mit einer Datenbank abgeglichen. Wenn dieser schon vorhanden ist, dann wird in der spalte "vote" der Datenbank bei diesem EIntrag die Zahl um eins erhöht. Is ja ne ganz simple rechenaufgabe... ($var++). Is dieser Titel noch nich vorhanden, wird ein neuer eintrag erstellt und die Zahl bei Vote wird auf 1 gesetzt (=1 voter).

wenn ich mir die Charts anschaue, kann ich auch per link wählen ob mir der gefällt.. dementsprechen wird dann auch $var++ oder $var-- eingesetzt und dann mit "UPDATE ... WHERE ..." der eintrag bearbeitet.

Des mit dem Link funktioniert auch super, aber des mit dem eingeben irgend wie nich... er erkennt zwar, dass ein eintrag vorhanden is, und erstellt keinen neuen, aber er setzt vote nicht +1 (also $var++).

hier mal der betroffene Ausschnitt:

PHP:
[...]



if ($_REQUEST['action']== "edit") {
  if(isset($_POST['action'])) {
  $titel = $_POST['interpret']." - ".$_POST['titel'];
    $charts=$DB->query("SELECT * FROM ".$db_tab['charts']." WHERE titel='".$titel."' LIMIT 1");
    }
  
  if(isset($_POST['send']))  {
    $charts=$DB->query("SELECT * FROM ".$db_tab['charts']." WHERE titel='".$titel."' LIMIT 1");
    $vote=$charts['vote'];
    $if = mysql_num_rows($charts);
    $vote2 = $vote++;
    if ($if > 0) {
      $DB->query("UPDATE ".$db_tab['charts']." SET vote='".$vote2."' WHERE titel='".$titel."'");
    }
    else {
      $DB->query("INSERT INTO ".$db_tab['charts']." (titel, vote) VALUES ('".$titel."','1')");
     }
   }
   
 eval ("\$site_body.= \"".getTemplate("charts_edit","")."\";");
}
elseif ($_REQUEST['action']=="show") {
 $charts = $DB->query("SELECT * FROM ".$db_tab['charts']." ORDER BY 'vote' DESC");  

  for($i = 1, $Export = ""; $i < mysql_num_rows($charts)+1;$i++)
    {
     
   
    
      $platz = $i;
      $titel = $charts['titel'];
    
      eval ("\$charts_row.= \"".getTemplate("charts_row","")."\";");
    
    }
  eval ("\$site_body.= \"".getTemplate("charts1","")."\";");
  
}

[...]

vielleicht findet ihr den fehler.

Gruß Adi
 
ohne jetzt auf deinen speziellen fehler einzugehen(habsch grad irgenwdie nich den nerv zu!), würd ich dir noch raten, statt auslesen des counts und anschliesend wieder einfügen das ganze so realisieren:

Code:
UPDATE Table SET col = col + 1 WHERE irgendwas = dies und jenes!

damit sparst du die nen query ;)
 
den query brauch ich ja sowieso, um zu schauen, ob der eintrag schon vorhanden is (mach ich ja mit mysql_num_rows() ) ;)

werd ich ma versuchen... danke für deine schnelle antwort :)

EDIT: aba is richtig ^^ ein query is überflüssig is mir garned aufgefallen
 
wieso, brauchste nicht, entweder der update query bringt bei mysql_affected_rows 1 oder null zurück.
wenn das null is, machste nen insert.

da haste die ganze problematik auf 2 querys reduziert! ;)
 
und wenn du einen SELECT-Query machst, wo du nur 1 Feld brauchst, dann ist es wesentlich Datenbank-schonender, wenn du
Code:
SELECT `vote` FROM `".$db_tab['charts']."` WHERE `foo`='bar'
nutzt, anstatt deinem
Code:
SELECT * FROM ...
 
hmm die idee is gut... da ich noch relativ neu in php bin, hab ich mich mit mysql_affected_rows auseinander gesetzt...

@beavisbee: es werden eh nur 2 daten zurückgegeben und der * war hald für mich weniger schreibarbeit ^^ *lach*

aba wenn mehr zurückgegeben wird und ich so ne abfrage mach, is es wirklich schonender, da hast du recht ;) da verwend ich den * auch ned, auser ich brauch ihn wirklich *g*

greets adi
 
Zurück
Oben