Denkanstoß - DB-Tabelle Organisation

Hallo,
das Problem ist ja (für mich), vor dem UPDATE muss ja ein INSERT gemacht werden.
Das heißt ja , ich müsste ja Wissen ob eine Zeile mit dem Datum schon vorhanden ist nur Weiß ich nicht wie ich diese Abfrage (ist Zeile mit Datum schon da) mache.

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in TEST_sql_Liste.php on line 47 Nicht vorhanden

PHP:
$datum_mysql = "2013-03-18";
 
 $sql = "SELECT DATUM FROM FROM FW_SendLog_Time WHERE DATUM ='$datum_mysql'";
 $result = mysql_query($sql);
 if (mysql_fetch_array($result))                // <--------- ZEILE 47
 	echo "Vorhanden";
 else
 	echo "Nicht vorhanden";

...habs gefunden.

PHP:
 $datum_mysql = "2013-03-18";

$sql = "SELECT DATUM FROM FW_SendLog_Time WHERE DATUM ='".$datum_mysql."';";  
$result = mysql_query($sql) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
  echo ("Vorhanden"); 
} else { 
  echo ("Nicht vorhanden"); 
}

...so,
jetzt habe ich ein Problem mit dem UPDATE:
Beim UPDATE wird ein vorhandener Eintrag entfernt dafür aber an anderer Stelle einer eingefügt.

EDIT: ich glaube ich weiß warum die Einträge verschwinden.
Beim UPDATE werden alle Werte neu überschrieben. Da ja der Inhalt der "$_SESSION['schicht']" in die passende Variable geschrieben wird, sind die anderen natürlich leer.

Das nervt ja, machste eins dann folgt das nächste...

Wie kann ich denn jetzt den Inhalt der schon gespeicherten Daten vor dem UPDATE sichern?



PHP:
	$stempel = date("Y-m-d H:i:s",time());
	
	if("FW3.1" == ($_SESSION['schicht'])) { $schicht_01 = mysql_real_escape_string($_SESSION['schicht']); }
	if("FW3.2" == ($_SESSION['schicht'])) { $schicht_02 = mysql_real_escape_string($_SESSION['schicht']); }
	if("PP1.1" == ($_SESSION['schicht'])) { $schicht_03 = mysql_real_escape_string($_SESSION['schicht']); }
	if("PP1.2" == ($_SESSION['schicht'])) { $schicht_04 = mysql_real_escape_string($_SESSION['schicht']); }
	if("PP2.2" == ($_SESSION['schicht'])) { $schicht_05 = mysql_real_escape_string($_SESSION['schicht']); }


// INSERT oder UPDATE FW_SendLog_Time
$sql = "SELECT DATUM FROM FW_SendLog_Time WHERE DATUM ='".$_SESSION['DATUM_mysql']."';";  
$result = mysql_query($sql) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
  echo ("Vorhanden");
  // Update
  
	$sql = "
    		UPDATE 
        		FW_SendLog_Time 
        	SET 
        		SCHICHT_01 = '".$schicht_01."',
    			SCHICHT_02 = '".$schicht_02."',
    			SCHICHT_03 = '".$schicht_03."',
    			SCHICHT_04 = '".$schicht_04."',
    			SCHICHT_05 = '".$schicht_05."',
    			SCHICHT_06 = '".$schicht_06."',
    			VERSENDET = 'JA' 
        	WHERE 
        		DATUM = '".$_SESSION['DATUM_mysql']."';"; 
        
        $ergebnis = mysql_query( $sql, $conID ) OR die(mysql_error()); 
    
if(! $ergebnis )
{
  die('Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden: ' . mysql_error());  	
}
 
} else { 
  echo ("Nicht vorhanden");
  // INSERT

	$sql = "
		INSERT INTO `FW_SendLog_Time` (
    		`DATUM`, 
    		`SCHICHT_01`,
    		`SCHICHT_02`,
    		`SCHICHT_03`,
    		`SCHICHT_04`,
    		`SCHICHT_05`,
    		`SCHICHT_06`,
    		`SCHICHT_07`,
    		`SCHICHT_08`,
    		`SCHICHT_09`,
    		`SCHICHT_10`,
       		`ERSTELLT`,
    		`VERSENDET`,
    		`STEMPEL` )
		VALUES(
    		'{$_SESSION['DATUM_mysql']}',
    		'{$schicht_01}',
    		'{$schicht_02}',
    		'{$schicht_03}',
    		'{$schicht_04}',
    		'{$schicht_05}',
    		'',
    		'',
    		'',
    		'',
    		'',
    		'',
    		'JA',
    		'{$stempel}'
    		)";
                    
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query( $sql );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
        echo "Der Datensatz wurde hinzugefügt!";
    }
    else
    {
        echo "Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!";        
    } 
}
 
Einfachste Lösung: Du datest nur die Spalten ab, bei denen sich wirklich was ändert. Du bist der Lösun schon ziemlich nahe und hast einiges selbst raus gefunden. Gratuliere.
 
Soooo,
es funktioniert!:):):):):)

Ich habe es jetzt so gelöst:
Feldname als Variable, wenn entsprechender Schichtname vorhanden dann weise entsprechenden Feldnamen zu.

Gibt es Einwände?

Gruß

PHP:
	if("FW3.1" == ($_SESSION['schicht'])) { $FELD_SCHICHT = "SCHICHT_01"; }
	if("FW3.2" == ($_SESSION['schicht'])) { $FELD_SCHICHT = "SCHICHT_02"; }
	if("PP1.1" == ($_SESSION['schicht'])) { $FELD_SCHICHT = "SCHICHT_03"; }
	if("PP1.2" == ($_SESSION['schicht'])) { $FELD_SCHICHT = "SCHICHT_04"; }
	if("PP2.2" == ($_SESSION['schicht'])) { $FELD_SCHICHT = "SCHICHT_05"; }

// INSERT oder UPDATE FW_SendLog_Time
	$sql = "SELECT DATUM FROM FW_SendLog_Time WHERE DATUM ='".$_SESSION['DATUM_mysql']."';";  
	$result = mysql_query($sql) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
  echo ("Vorhanden");
  // Update
  
	$sql = "
    		UPDATE 
        		FW_SendLog_Time 
        	SET 
        		$FELD_SCHICHT = '".mysql_real_escape_string($_SESSION['schicht'])."',
    			VERSENDET = 'JA' 
        	WHERE 
        		DATUM = '".$_SESSION['DATUM_mysql']."';"; 
        
        $ergebnis = mysql_query( $sql, $conID ) OR die(mysql_error()); 
    
if(! $ergebnis )
{
  die('Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden: ' . mysql_error());  	
}
 
} else { 
  echo ("Nicht vorhanden");
  // INSERT

	$sql = "
		INSERT INTO `FW_SendLog_Time` (
    		`DATUM`, 
    		$FELD_SCHICHT,
       		`ERSTELLT`,
    		`VERSENDET`,
    		`STEMPEL` )
		VALUES(
    		'{$_SESSION['DATUM_mysql']}',
    		'{".mysql_real_escape_string($_SESSION['schicht'])."}',
    		'',
    		'JA',
    		'{$stempel}'
    		)";
                    
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query( $sql );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
        $Ausgabe = "Der Datensatz wurde hinzugefügt!";
    }
    else
    {
        $Ausgabe = "Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!";        
    } 
}
 
Nur eine kleine: verwende mysql_real_escape_string() für Variablen, die du in ein SQL-Statement übernehmen willst. Vertraue niemals Variablen!
 
Nur eine kleine: verwende mysql_real_escape_string() für Variablen, die du in ein SQL-Statement übernehmen willst. Vertraue niemals Variablen!

...auch beim Datum?
So?

PHP:
// INSERT oder UPDATE FW_SendLog_Time
	$sql = "SELECT DATUM FROM FW_SendLog_Time WHERE DATUM ='".$_SESSION['DATUM_mysql']."';";  
	$result = mysql_query($sql) or die(mysql_error()); 

if (mysql_num_rows($result) > 0) { 
  echo ("Vorhanden");
  // Update
  
	$sql = "
    		UPDATE 
        		FW_SendLog_Time 
        	SET 
        		$FELD_SCHICHT = '".mysql_real_escape_string($_SESSION['schicht'])."',
    			VERSENDET = 'JA' 
        	WHERE 
        		DATUM = '".mysql_real_escape_string($_SESSION['DATUM_mysql'])."';"; 
        
        $ergebnis = mysql_query( $sql, $conID ) OR die(mysql_error()); 
    
if(! $ergebnis )
{
  die('Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden: ' . mysql_error());  	
}
 
} else { 
  echo ("Nicht vorhanden");
  // INSERT

	$sql = "
		INSERT INTO `FW_SendLog_Time` (
    		`DATUM`, 
    		$FELD_SCHICHT,
       		`ERSTELLT`,
    		`VERSENDET`,
    		`STEMPEL` )
		VALUES(
    		'{".mysql_real_escape_string($_SESSION['DATUM_mysql'])."}',
    		'{".mysql_real_escape_string($_SESSION['schicht'])."}',
    		'',
    		'JA',
    		'{".mysql_real_escape_string($stempel)."}'
    		)";
                    
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query( $sql );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
        $Ausgabe = "Der Datensatz wurde hinzugefügt!";
    }
    else
    {
        $Ausgabe = "Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!";        
    } 
}
 
Zuletzt bearbeitet:
Zurück