UPDATE verhindern falls Daten vorhanden

nelke

Grünschnabel
Hallo,

Ich habe ein Problem das ich im MySQL Feld kein Update durchführen möchte falls schon Datenvorhanden sind.

Denn es soll die Daten im Datenbank speichern und auch eine Datei erstellen die nicht überschrieben werden soll.

Danach kommt noch eine Email funktion das die Datei mitsenden soll nur die Gefahr ist da das immer wieder eine neue Datei erstellt wird und immer wieder ein Email versendet wird.


PHP:
if(isset($_GET['up']))
{
  if(strlen($_GET['up'])==71)
  {
    db_conn();
    $raw = explode(":",$_GET['up']);
	$request = mysql_query("SELECT status FROM ".$database_table." WHERE status ='Pending' ORDER BY id DESC LIMIT 0,1");
	$rstatus = mysql_fetch_array($request);
	if(!isset($rstatus['imei']))
		{
			$sql = "UPDATE ".$database_table." SET status='".$raw[1]."',upl_time='".time()."' WHERE hash='".$raw[0]."' LIMIT 1";
				if(mysql_query($sql))
				{
				print "ACK";
				$result = mysql_query("SELECT * FROM ".$database_table." WHERE status !='Pending' ORDER BY id DESC LIMIT 0,1");
				if(!$result) echo "err".mysql_error();
				$file="result/$row[imei].cod";
					if(!file_exists($file))
					{
						$row = mysql_fetch_array($result);
						$file="result/$row[imei].cod";
						$fp = fopen("$file", "w+");
						$text = "[IMEI]\n$row[imei]";
						$text = stripslashes($text);
						fputs($fp,$text);
						fclose($fp);
						mysql_close($sql);
					}
				}
		}
		else
		{
		print "NACK";
		}
		
}
exit;
}
 
Du fragst ab, ob die Spalte gefüllt ist. Wenn nicht, werden andere Spalten mit Werten versorgt, die eigentliche Spalte imei wird aber nicht mit Werten versorgt. Demzufolge müsstest du in dein Update noch die Spalte imei mit aufnehmen. Aber das kann ja nicht die Lösung des Problems sein, so trivial?
 
Ne, völlig anders ;-)

Er selektiert nur die Spalte 'status' und nicht 'imei', damit gibts die Spalte im Ergebnis gar nicht. Die Prüfung wäre korrekt, wenn es so aussehen würde:

PHP:
    $request = mysql_query("SELECT imei FROM ".$database_table." WHERE status ='Pending' ORDER BY id DESC LIMIT 0,1");
    $rstatus = mysql_fetch_array($request);
    if(!isset($rstatus['imei']))

Das ändert aber nichts an der Tatsache, das bei einem erneuten Aufruf des Scripts, die Bedingung immer noch wahr wäre, weil die Spalte 'imei' schlicht und einfach nicht mit Werten befüllt wird.
 
row ist indiziert, array is indiziert und assoziativ. Aber worauf willst du hinaus? mysql_fetch_array kombiniert mysql_fetch_row und mysql_fetch_assoc.
 
Gut, dass wir das mit dem indiziert geklärt hätten. Dementsprechend müsste doch ein Aufruf von mysql_fetch_array alle Datensätze einer Abfrage zurückgeben, also ein Array mit folgendem Muster (mit der Eigenschaft FETCH_ASSOC):
Code:
Array (
  [0] => Array (
    [spalte1] => ...
    [spalte2] => ...
    [spalteN] => ...
  )
  [1] => Array (
    [spalte1] => ...
    [spalte2] => ...
    [spalteN] => ...
  )
  [n] => Array (
    [spalte1] => ...
    [spalte2] => ...
    [spalteN] => ...
  )
)
Dementsprechend braucht man einen Aufruf wie folgt: $array[0]['spalte1']
 
Nein, schau dieses Beispiel von der Manual-Seite:

PHP:
<?php
mysql_connect("localhost", "mysql_user", "mysql_password")
    or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
    printf ("ID: %s  Name: %s", $row[0], $row["name"]);
}

mysql_free_result($result);
?>


Soll heißen, das bei mysql_fetch_array() beides möglich ist, also den Index der Spalte anzusprechen sowie den Namen. An den Dimensionen ändert sich deswegen nichts.
 
Zurück