• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

brauche hilfe bei ifs

Status
Für weitere Antworten geschlossen.

Joda1994

Neues Mitglied
Moinsen, ich hab mir ma son script erstellt, wo man sich dropdownlisten erstellen kann (kennen wir doch irgendwoher oda xD.) jedenfalls hab ich da jez ein prob:
HTML:
$bau1 = 1;
	$kosten1 = mysql_query("SELECT SUM(`werte`) FROM `werte`") or die (mysql_error());
				while ($row = mysql_fetch_row($kosten1))
				echo $row[0] . "<br />"; 
function berechnung()
{
	$abzug = $kosten1 - 3000;
		echo "Die Liste wird jetzt erstellt.";
	mysql_query("DELETE FROM `werte` (`werte`)");
	mysql_query("INSERT INTO `werte` (`werte`) VALUES (
							 '" . addslashes($berechnung1) . "')")
	or die(mysql_error());
	mysql_query("INSERT INTO `listen` (`anzahl`) VALUES (
							 '" . addslashes($bau1) . "')")
	or die(mysql_error());
}

        if ($row[0]<3000) {
                echo "Du hast nicht genug cash.";
        } else {
                echo "Die Liste wird erstellt.";
                berechnung();
        }
so also der code funktioniert jez eig bis auf die ifs. zum überprüfen hab ich oben $row[0] ausgeben lassen. bei mir ist das 3306. aber die ifs meinen, das ich nich genug cash hätte (also das der wert kleiner als 3000 ist). wo ist da der fehler??
 
//Edit: falsch gelesen... *brille putz*
Hast du möglicherweise 2 einträge in deiner Tabelle und der zweite ist leer?

Wenn ja dann überschreibst du mit deiner While schleife den Wert also schreib lieber

PHP:
$row = mysql_fetch_row($kosten1);

also ohne das while ;)

dann empfehle ich dir noch mysql_fetch_assoc zu benutzen und das element einfach beim namen zu nennen ist nur unwesentlich langsamer also fast nicht der rede wert ;)
 
2 einträge??? da sind tausende drin. und davon soll halt die summe ausgelesen werden. das while kann ich aber trotzdem mal weglassen. und was is denn der unterschied zu mysql_fetch_assoc??
das element einfach beim namen zu nennen ist nur unwesentlich langsamer also fast nicht der rede wert
die andern meinten immer, ich sollte das so machen. schnüff:grin:
 
mysql_fetch...

_row: 0.339648962021s
_assoc: 0.365229129791s

bei 100.000 datensätzen (von)

nebenbei fällt mir gerade noch auf das du in deiner funktion die variable $kosten verwendest...

woher bekommt die denn ihren wert? ;)

Kleiner tipp

PHP:
... mysql_query("SELECT SUM(`werte`) as wert FROM `werte`") ...
// ...
function berechnung($kosten)
// ...
echo "Die Liste wird erstellt.";
berechnung($row['wert']); // bzw
 
lol
100.000 datensätze. denkst du ich werde da je soviel reinpacken??? xD achja, $kosten1 2. zeile, oda meinste ohne die 1 am ende?
 
nein ich meine nur das du in deiner funktion nicht auf die variable $kosten1 zugreifen kannst ;) *gg* xD
 
kann man variablen, die man in einer funktion benutzt, nich auch schon vorher definieren??? oda müssen die erst in der func definiert werden???
 
du kannst in einer funktion nur auf variablen von außerhalb eingehen, wenn du sie mit global vorher markierst also

PHP:
// geht nicht
$variable = 'hallo';
function test()
{
    echo $variable;
}

// geht
$variable = 'hallo';
function test()
{
    global $variable;
    echo $variable;
}

ich empfehle aber sie über eine referenz, oder komplett mitzugeben also

PHP:
$var = 'verändert';
$var2 = 'nicht verändert';
function test(&$ausgabe, $noch_ne_ausgabe)
{
    $ausgabe .= ' hallo';
    $noch_ne_ausgabe .= ' hallo';
    echo $ausgabe;
}
test($var, $var2);
echo "<br />".$var."<br />".$var2;
 
jo gut werd ich mir merken. werds morgen ma testen, hab jez kein bock nochma auf xp zu booten. öhm is das jez mit der referenz wegen der übersichtlichkeit oder hat das andere gründe? ich glaub ich hau mich jez auch ma ins bett. good night.
 
die ausgabe des letztes scriptes währe

Code:
verändert hallonichtverändert hallo <- ausgabe der funktion
verändert hallo <- ausgabe der variable $var
nicht verändert <- ausgabe der variable $var2
 
PHP:
$var = 'verändert';
$var2 = 'nicht verändert';
function test(&$ausgabe, $noch_ne_ausgabe)
{
    $ausgabe .= ' hallo';
    $noch_ne_ausgabe .= ' hallo';
    echo $ausgabe;
}
test($var, $var2);
echo "<br />".$var."<br />".$var2;

warum kapier ich das nich?? also $ausgabe wird in der func "hallo" zugewiesen. aber da es ne referenz is wird später $var zugewiesen also "verändert". welchen wert hat ausgabe denn letzentlich?
 
die ausgabe des letztes scriptes währe

Code:
verändert hallonichtverändert hallo <- ausgabe der funktion
verändert hallo <- ausgabe der variable $var
nicht verändert <- ausgabe der variable $var2
in der func wird doch nur $ausgabe ausgegeben, aber nicht beide. wäre die ausgabe der func dann nicht verändert hallo? und $var2 nicht verändert hallo
 
^hast recht wird nur das erste ausgegeben habs auf die schnelle hingeschrieben und nciht gesehen das ich was vergessen hab ;) (noch lange kein grund für einen doppelpost ;) )

also wenn du eine variable als referenz übergibst z.b. so

PHP:
$a = 'test';
$b = &$a;

Dann ist $b nicht 'test' sondern ein verweis auf $a also wenn du nun schreiben würdest

PHP:
$b = 'bla';
echo $a;

währe die ausgabe nicht 'test' wie es in $a eigentlich stehen sollte sondern 'bla'...

nun verstanden? ^^
 
noch lange kein grund für einen doppelpost
hab nich gesehen, dass es zwei seiten waren. deshalb hab ich nochma gepostet weil ich dachte, dass der erste nich angekommen wär. ich glaub ich hab das jez auch verstanden. ich überarbeite jez ma den code und gucke ob er funzt.
 
hi, ich bins nochma. wollte keinen neuen thread machen. hab schon wieda so ein problem:
PHP:
<?php function login()
{
	$username = mysql_query("SELECT `name` FROM `users` WHERE `name`='" . $_POST["username"] . "'") or die(mysql_error());
	while ($row = mysql_fetch_assoc($username))
	$password = mysql_query("SELECT `password` FROM `users` WHERE `name`='" . $_POST["username"] . "'") or die(mysql_error());
	while ($row = mysql_fetch_assoc($password))
	if ($_POST["username"] == $row["name"] AND $_POST["password"] == $row["password"])
	{
		echo "Du hast dich erfolgreich eingeloggt.";
		mysql_query("UPDATE users SET login ='1' or die(mysql_error()");
	}
	else
	{
		echo "Benutzername oder Passwort ist falsch.";
	}
} ?>
diesma sind auch alle variable in der function definiert(glaub ich jedenfalls :mrgreen:). aba iwie klappt das nich. pls helft p.s.: hier nochma das formular:
PHP:
<?php function loginform()
{
	?>
<div>
<form action="login.php" method="post">
<div>Benutzername: <input type="text" name="username" /><br />
Passwort: <input type="password" name="password" /><br />
<input type="submit" value="Einloggen" name="login" /></div>
</form>
</div>
	<?php
} ?>
 
kümmer dich erstmal darum das du mysql_real_escape_string benutzt.

in funktionen benutzt man in der regel keine Ausgabe.

funktionen geben entweder
einen boolischen wert (true/false),
eine Instanz der eigenen Klasse (this),
eine Instanz einer Klasse (return new xyz),
einen resourcenlink (eher selten),
oder einen geforderten wert zurück.

ausgaben sind in funktionen unpraktisch, dafür werden andere funktionen benutzt, oder gar ein template system.
 
$_POST und $_GET sind wie $_SESSION und $_COOKIE globale variablen die auch in deiner Funktion verfügbar sein müssten...
 
@freak131: meinste das mit dem echo??? da kommt eh noch was anderes hin. das is jez nur zur überprüfung ob es klappt oda nich.
 
PHP:
mysql_query("UPDATE users SET login ='1' or die(mysql_error()");

äh... or die(... bla); in nem query? xD und dann auch noch ne schließende klammer vergessen? xD

PHP:
mysql_query("UPDATE users SET login ='1' HIER HAST DU NE WHERE CLAUSE VERGESSEN SONST IST ÜBERALL LOGIN AUF 1") or die(mysql_error());
 
Oh... *rotwerd*. ich werd das auch ma so machen, dass die func weiterleitet. dann wird auf der anderen seite der login-wert ausgegeben. ma gucken obs funzt. dann kann freak131 nix mehr sagen xD
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben