Subtraktion in Tabelle

sulospace

searcher
21 April 2006
1.721
115
PHP:
mysql_select_db($dbname);	
$sql = "SELECT
          *
        FROM
          ava_users WHERE username='$username'";
		  $result = mysql_query($sql);
		    while($row = mysql_fetch_row ($result)){
		  $punkte=$row[21];
		  }
		  if($punkte==0){}else{
		    $result2=" UPDATE ava_users SET punkte='$punkte' - '1' WHERE username='$username'" ;
		 $result3=mysql_query($result2) or die(mysql_error().'<hr />'. $indb .'<hr />');
		 
		 }

Ich habe bei diesem Script das Problem das mehr wie "1" abgezogen wird.
Der User $username ist auch nur einmal vorhanden.Trotzdem wird manchmal 6 und manchmal 9 abgezogen?!?

Woran liegt das?

P.s.: Ich weiß,vieleicht etws umständlich programmiert.
 
Man sollte halt Zahlen als Zahlen nutzen und nicht als Strings.

EDIT: Und außerdem sollte man verstehen, was ' bedeutet. Man kann es nämlich auch sehr falsch einsetzen.
 
PHP:
  $result = mysql_query($sql);echo mysql_error();
		    while($row = mysql_fetch_row ($result)){
		  $punkte=$row[21];
		  
		$punkte--;
		
		  }
		  if($punkte==0){}else{
		    $result2=" UPDATE ava_users SET punkte='$punkte'  WHERE username='$username'" ;

Hab das Feld als Int angelegt, ich kriegs nicht hin...
 
ausm kopf jetzt

PHP:
$sql = "SELECT SPALTENNAME FROM ava_users WHERE username='$username'";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
$punkte=$row->SPALTENNAME;
}
if($punkte!=0)
{
$punkte = $punkte - 1;
$result2=" UPDATE ava_users SET punkte= $punkte WHERE username='$username'" ;
$result3=mysql_query($result2) or die(mysql_error().'<hr />'. $indb .'<hr />');
}
//SPALTENNAME durch den Namen der Spalte in der db ersetzten
nicht gerade ellegant (man kann in mysql auch if verwenden und damit das ganze in einem query lösen aber hab den syntax dazu nicht im kopf und sitzt hier am laptop wo googlen keinen spaß macht und auch noch die großschreibtaste kaputt ist) aber sollte funktionieren

mfg

chris
 
Zuletzt bearbeitet:
wieso nicht so?:

Code:
"UPDATE ava_users SET punkte=punkte-1 WHERE username='$username' and punkte>0"
 
Ehm darf man fragen wozu die while da ist, da kommt doch nur ein result_object oder bin ich doof? Und wenn die while doch richtig ist, dann müsste doch die if-Bedingung mit in die while oder?
 
Die Lösung von Chrisi01 geht nicht, da wird auch mehr als 1 abgzogen.

...bei dem zweitem Vorschlag leider auch...
 
hi

also bei mir hat er immer +4 gerechnet...

aber ohne den ganzen Code kann man dir da kaum helfen schau mal ob du eine Schleife hast die 4x durch läuft... Oder zeig uns den Code

mfg

Chris
 
PHP:
<?php include('header.php'); ?>
<div class="title">
	<?php include (  './includes/modules/content_title.php'  ); // Include the cat title ?>
  <?  $dbhost = 
$xdate=date("d-M-Y");
$username=$user['username'];
$result2="INSERT INTO ava_game_stats (id,date,userid,gameid)VALUES('','$xdate','$username','$id')";
$result3=mysql_query($result2) or die(mysql_error().'<hr />'. $indb .'<hr />');

$mydate = date("d-M-Y", time()-(30*24*60*60));

$sql = "SELECT
          *
        FROM
          ava_game_stats WHERE date='$mydate'";

$result = mysql_query($sql);echo mysql_error();

?>
    <?
    


$sql = "SELECT
          *
        FROM
          ava_games where id='$id'";

$result = mysql_query($sql);echo mysql_error();
	
while($row = mysql_fetch_row ($result)){
$xx1date=$row[17];
}
if ($xx1dat==""){$xx1date="leider keine Information vorhanden";}

?>
</div>

<div class="game_container">
	<div class="game_options">
		<div class="game_options_column1">
			<?php echo GAME_RATING;?>:
		</div> 
		<div class="game_options_column2">
			<?php echo $game['rating_image'];?>
		</div> 
		<div class="game_options_column1">
			 <?php echo GAME_YOUR_RATING;?>: 
		</div>
		<div class="game_options_column2">
			<?php echo $game['new_rating_form'];?>
		</div> 
		
		<div class="button2">
			<?php echo $game['fav_game'];?>
		</div>
		<div class="button2">
			<a href="<?php echo $game['full_screen_url'];?>"><?php echo GAME_FULL_SCREEN;?></a>
		</div>
		<?php if($user['admin'] == 1) {?>
		<div class="button3">
			<?php echo $game['admin_options'];?>
		</div>
		<?php } ?>
	</div>
	<?php include (  './includes/view_game/game.inc.php'  ); // Include the flash game ?>
</div>

<div class="leaderboard">
	<?php advert('leaderboard'); ?>
</div>

<div class="game_info_container">
	<div class="game_info_header">
		<?php echo GAME_INFO;?>
	</div>
	
	<div class="gi_column1">
		<img src="<?php echo $game['image_url'];?>" width="70" height="70" alt="Game thumbnail" /><br />
		<?php echo $game['plays'];?> <?php echo GAME_PLAYS;?>
	</div>
	
	<div class="gi_column2">
		<?php 
		echo"<div class=game_info_content>Spiel eingetragen am: ".$xx1date."</div>";
		echo '<div class="game_info_content"><strong>'.GAME_DESCRIPTION.':</strong> '.$game['description'].'</div>';
		if ($game['instructions'] != '') {
			echo '<div class="game_info_content"><strong>'.GAME_INSTRUCTIONS.':</strong> '.$game['instructions'].'</div>';
		}
		if ($setting['add_to_site'] == 1) {
			echo '<div class="game_info_content"><strong>'.GAME_EMBED.':<br /></strong>';
			include (  './includes/view_game/embed_game.inc.php'  ); // Include comments
			echo '</div>'; 
		}
		?>
	</div>
	
	<br style="clear:both" />
</div>

<div class="game_column1">

	<div class="new_comment_container">
		<div class="game_info_header">
			<?php echo GAME_COMMENTS;?>
		</div>
		<div class="comments_container">
			<?php include (  './includes/forms/add_comment_form.php'  ); // Include comments ?>
			<?php include (  './includes/view_game/game_comments.inc.php'  ); // Include comments ?>
<? include("/home/www/web3/html/webcounter/index.php");?>
		</div>
	</div>
</div>

<div class="game_column2">
	<div class="game_info_header">
		<?php echo GAME_MORE_GAMES;?>
	</div>
	<?php include (  './includes/view_game/random_games.inc.php'  ); // Include comments ?>
</div>

<?php include('footer.php'); ?><script type="text/javascript" src="https://www.sponsorads.de/script.php?s=122049"></script>


<? ###########################################

$username=$_COOKIE['ava_username'];





	$sql = "SELECT punkte FROM ava_users WHERE username='$username'";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
$punkte=$row->punkte;
}
$punkte = $punkte - 1;
if($punkte!=0)
{
$result2=
		
"UPDATE ava_users SET punkte='$punkte' WHERE username='$username'";
$result3=mysql_query($result2) or die(mysql_error().'<hr />'. $indb .'<hr />');
}
		 
	
		  
		
		 
		 ?>

Von mir ist nur der untere Teil.
 
Du hast auch immer noch einen String in der letzten Anweisung drin, und nimm außerdem besser den Query von Bububoomt:

PHP:
<? ###########################################

$username=$_COOKIE['ava_username'];

$sql = "UPDATE ava_users 
        SET punkte=punkte-1
        WHERE username = '$username' 
        AND punkte > 0'";

mysql_query($sql);
      
?>

Allerdings solltest du die Zeile mit dem Cookie ändern, sonst kann sich jeder als der entsprechende Benutzer ausgeben. Versuch mal, ob

PHP:
$username = $user['ava_username'];

auch funktioniert, so ähnlich wird das jedenfalls im oberen Teil der Seite angewendet.
 
Also, egal wie ich es mache es wird immer zuviel abgezogen!!
Bzw. wenn ich ein "+" reinmache werden immer 2-4 addiert.

Hab den Teil jetzt auch nach dem Footer ganz am Ende reingesetzt.
 
Setzt mal folgendes unter Deinen bisherigen Code:
PHP:
if(session_id() == '') {
  session_start();
}
if(!isset($_SESSION['count']) || isset($_GET['reset_count'])) {
  $_SESSION['count'] = 0;
}
echo 'Dies ist der ' . (int) ++$_SESSION['count'] . '. Seitenaufruf';
dann rufst Du eine beliebige Url auf wo der Code drinsteht, mit dem Anhang "?reset_count", dadurch erfährst Du ob die Seite mehrmals geladen wird. Anders kann ich es mir nicht erklären warum nicht das richtige addiert werden sollte.

Ps. Debuggen nennt man sowas, net immer schreien, ah Hilfe des geht net oder so, auch mal logisch versuchen das Grundproblem zu finden. Ne einfache Klasse dazu findest Du hier
 
Zuletzt bearbeitet:
ich zeig dir mal eben was vllt. hast du das gleiche Problem:

PHP:
<?
mysql_connect("localhost","LALALA","LALALA");
mysql_select_db("LALA");
$abfrage = "SELECT id, email, text, betreff FROM LALA LIMIT 1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$id = $row->id;
  $loeschen = "DELETE FROM LALA WHERE id = $id";
  $loesch = mysql_query($loeschen);
echo mysql_affected_rows();

$zahler++;
}
echo $zahler;
?>
Es wurden immer 3 Datensätze aus der db gelöscht obwohl sowohl mysql_affected_rows() als auch $zahler 1 gesagt hat. Ich konnte mir es lange nicht erklären aber gerade kam ich drauf.

Das Script liegt auf meinen VServer. Die Domain ist aber umgeleitet von united-domains.de per URL Hiding weitergeleitet. Da ich so natürlich auch ein Problem habe die Client IP raus zubekommen war das die einzige Idee die ich noch hatte was daran schuld sein kann. Als ich das Script direkt per IP vom VServer aufgerufen habe ging es wunderbar und es wurde immer nur 1 Datensatz gelöscht. Irgendwie pfuscht da united-domains mit rein und ruft die URL 3x auf warum auch immer. Die ganze Zeit während ich das Problem gesucht hab musste ich an den Thread denken :ugly:

mfg

Chris
 
Ich hab keine Weiterleitung.

Bin noch dabei das Problem zu suchen, scheint aber am Script zu liegen, da das Problem auch andere User haben die dieses Script benutzen.
Nichtmal der Script-Schreiber weiß ne Lösung.