Fehler bei Übermittlugn an die MySQL Datenbank mit PHP

philishake

javascript enthusiast
Hi Leutz.

Ich habe ne Datenbank mit dem TABLE vmap. wenn ich mit folgendem Script was hinzufügen möchte macht er das nicht.

Code:
$again =1;
while($again == 1)
{
	$x = mt_rand(1,25);
	$y = mt_rand(1,25);
	$sql = @mysql_query("SELECT * FROM vmap");
	while($row = @mysql_fetch_array($sql))	
	{
		if($row[1] == $x && $row[2] == $y) 
		{
			$again = 1;
		}
		if($row[1] != $x OR $row[2] != $y)
		{
			$again = 0;
		}
	}
}
echo "Koordinaten: X = $x / Y = $y";
$sql = "UPDATE vmap SET x='$x' WHERE username = '$nick'";
mysql_query($sql) OR die(mysql_error());
 
ich meinte eigentlich, was Du in der while - Schleife vorhast,
naja, ich gehe davon aus, dass Du in der Tabelle vmap überprüfen willst, ob
schon $x und $y existieren und erst dann die Werte in die Tabelle einträgst.

vielleicht wäre dieser Lösungsweg besser:

PHP:
$again =1;
while($again == 1)
{
	$x = mt_rand(1,25);
	$y = mt_rand(1,25);
	$sql = @mysql_query("SELECT * FROM vmap WHERE SpalteX = '$x' AND SpalteY = '$y' ");
	$exist = mysql_num_rows($sql);
	if($exist)
		$again = 1;
	else
		$again = 0;
}
echo "Koordinaten: X = $x / Y = $y";
$sql = "UPDATE vmap SET x='$x' WHERE username = '$nick'";
mysql_query($sql) OR die(mysql_error());

So läuft das Skript auch schneller durch, weil nicht immer alle Datensätze der Tabelle vmap abgerufen werden.

Ich hoffe das hilft Dir weiter.
 
Zuletzt bearbeitet:
$again nimmt immer den Wert entsprechend der letzten Ergebniszeile an.
Es gibt keine Fehlermeldung, weil es entweder keinen Fehler gibt oder weil Du die Fehlermeldungen mit @ unterdrückst.

Einfacher wäre es, wenn Du die Bedingung direkt ins Query aufnimmst:
PHP:
$again =true;
//nur weil ich mir nicht sicher bin, ob 
//bei PHP im Block deklarierte Variablen
//auch außerhalb des Blocks sichtbar sind:
$x=0;
$y=0;
while($again) {
    $x = mt_rand(1,25);
    $y = mt_rand(1,25);
    $sql = mysql_query("SELECT x,y FROM vmap WHERE x=$x AND y=$y");
    $again = (mysql_num_rows($sql)>0);
}
echo "Koordinaten: X = $x / Y = $y";
$sql = "UPDATE vmap SET x='$x' WHERE username = '$nick'";
mysql_query($sql) OR die(mysql_error());
Du setzt übrigends y nicht in Deinem Update. Ich weiß nicht, ob das so gewollt ist.

Gruß hpvw

EDIT: Alternativ könnte eine do-while-Schleife hier Sinn machen:
PHP:
do {
    $x = mt_rand(1,25);
    $y = mt_rand(1,25);
    $sql = mysql_query("SELECT x,y FROM vmap WHERE x=$x AND y=$y");
} while (mysql_num_rows($sql)>0);
echo "Koordinaten: X = $x / Y = $y";
$sql = "UPDATE vmap SET x='$x' WHERE username = '$nick'";
mysql_query($sql) OR die(mysql_error());
 
Zuletzt bearbeitet:
Alos mit der Variante:

Code:
$again =1; 
while($again == 1) 
{ 
    $x = mt_rand(1,25); 
    $y = mt_rand(1,25); 
    $sql = @mysql_query("SELECT * FROM vmap WHERE x = '$x' AND x = '$y' "); 
                $exist = mysql_num_rows($sql); 
                if($exist) 
                    $again = 1; 
                else 
                    $again = 0; 
} 
echo "Koordinaten: X = $x / Y = $y"; 
$sql = "UPDATE vmap SET x='$x' y='$y' WHERE username = '$nick'"; 
mysql_query($sql) OR die(mysql_error());

kommt folgender fehler...
You have an error in your SQL syntax near 'y='11'
der kommt bei x aber nicht.

jetz probier ich mal deine hpvw

EDIT:
probiert, aber er addet die variablen nicht in die datenbank...
 
Zuletzt bearbeitet:
jetzt kommen keine fehler mehr aber er addet immernoch nicht die x und y werte zur datenbank, langsam dreh ich durhc, ist doch alles richtig was wir machen ode r?

Code:
do { 
    $x = mt_rand(1,25); 
    $y = mt_rand(1,25); 
    $sql = mysql_query("SELECT x,y FROM vmap WHERE x=$x AND y=$y"); 
} while (mysql_num_rows($sql)>0); 
echo "Koordinaten: X = $x / Y = $y"; 
$sql = "UPDATE vmap SET x='$x',y='$y' WHERE username = '$nick'"; 
mysql_query($sql) OR die(mysql_error());
 

Neue Beiträge

Zurück