Edycja tylko jednego rekordu

0

cześć, posiadam taki kod, probuje od kilku dni znalezc rozwiazanie na roznych forach jak temu zapobiec ale opadłem z sił, chodzi mi o to, aby wykonywał "update" tylko i wyłącznie w miejscu gdzie zostały zmienione dane w formularzu na stronie wcześniejszej, niestety, aktualnie działa to tak, ze nadpisuje wszystkie rekordy, zamiast ominąć nie edytowane.

<?php
/*
 program sprawdza poprawność danych i zapisuje rekordy "sv" 
-- jeśli ju z istnieją - to te wczesniejsze usuwa
 */
require("../../macros/infopro.php");
require("../../MC/funkcje/pracownia_osoby.php"); 

     

            $loginCookie='';
            $loginUser='';
            $loginPwd5='';
            $loginStmp='';
            $dostep='';
            $adres = maszyna().'zest_pom/daty_przekaz.php';

            GET_LOGIN_COOKIE_PROG($loginCookie, $loginUser, $loginPwd5, $loginStmp, $adres, $dostep);

            if (!strcasecmp($dostep, 't') == 0)
               {
                 echo "<h2>Pr&#243ba w&#322amania do systemu<font color=red></font></h2>";
                 exit();
               }
     
   
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<?php
$host = "127.0.0.1";
$user="XXXXXX";
$pass="YYYYYY";
setlocale (LC_COLLATE, 'pl_PL');

$OPTIONS = array( i5_naming => DB2_I5_NAMING_ON );

$conn = db2_connect("*LOCAL", $user, $pass, $OPTIONS);
if (!$conn) {
	echo "Connection failed. SQL Err:";
	echo db2_conn_error();
	echo "<br>";
	echo db2_conn_errormsg();
    exit();
}
//print 'w 44 w zapisz_zkm GET = ';
//print_r ($_GET);
//print '<br>w 124 POST = ';
//print_r ($_POST).'<br>'; 
print '<br>';
//exit();


 if (isset($_POST['library']))
    $library=$_POST['library'];
  else {
    if (isset($_GET['library'])) {
      $library=$_GET['library'];
    }
    else {
      $library = "";
    }
  }


$svkom = $_POST['svkom'];

$ostedit = $_POST['ostedit'];
$ostedycja = $_POST['ostedycja'];

$svzal=$loginUser;
$svdat=date('Ymd');
$svkom = array();


foreach ($_POST as $key1 => $value) 
{  


	
//print_r($key1).'<br>'; 
//svkom
if ($key1 == "svkom"){	  
// print_r($value);
	              foreach ($_POST['svkom'] as $key5 => $value5){
//print '<br>w 108 $key5='.$key5.'=$value5='.$value5;
	                         $svkom[$key5] = trim($value5);
	                         $dlug = strlen($svkom[$key5]);
	                         
//print 'w 132 $dlug='.$dlug.'=<br>';	                         
	                         
                            if ($dlug>120){   
                            
                            $adres_back = 'lista_sv.php?&pusrid='.$loginUser; 
                                         
    	                    ?>
      	                    <script language="JavaScript">
      	                               window.alert('Komentarze sa za dlugie maksymalnie 120 znaków');
                                       location="<?echo $adres_back; ?>";
      	                    </script>
      	                    <?
                            }


                            $svkom[$key5] =str_replace("\r\n", " ",$svkom[$key5]);
                            $svkom[$key5]=str_replace("'", " ",$svkom[$key5]);
                            $svkom[$key5]=str_replace('"', '',$svkom[$key5]);
                            $svkom[$key5]=trim($svkom[$key5]);

						 
	      
		  }
	  }


foreach ($svkom as $key => $value) 
      {
      	
      	//print 'w 178 <br> key='.$key;	  
	 $id = explode("/",$key);
//	 print_r ($id);  
	 $svsbl =  $id[0];
	 $svdtp =  $id[1];
      	
	     //print 'w 246 $key_p='.$key_p.'=$value_p='.$value_p.'=<br>';
	     //$key_p - nr pracowni
	     //dla każdej pracowni trzeba sprawdzić czy jest rekord dla bieżąego okresu
	     $sql_sv="select count(*) from ".$library."/sv where svsbl='$svsbl' and svdtp=$svdtp";

print '<br> w 251 $sql_sv='.$sql_sv.'=<br>'.'<br>';
        $stmt_sv = db2_query($conn, $sql_sv);
        
         if (!$stmt_sv) {
         	print '<center><font size="5" color="Maroon">';
            print"Wystąpił błąd podczas odczytu bazy sv<br>";
            exit();
         } 
		 
         $row_sv = db2_fetch_array($stmt_sv);
         $jest_sv = $row_sv[0];
//print '<br>w 196 $jest_sv='.$jest_sv.'=<br>';
       
         $svkom1 = $svkom[$key];
		 $svprc1= $svprc[$key];
	  
     
         //brak zapisu dla zadania
         if ($jest_sv == 0)    {
         	if (($svprc1 > 0) or (strlen($svkom1) > 0)){
	                        $sql_sv_i="INSERT INTO ".$library."/sv VALUES($svprc1, '$svkom1', '$svzal', $svdat)"; 
 
print '<br> w 209 $sql_sv_i='.$sql_sv_i.'=<br>';                          
                                  $stmt_sv_i = db2_query($conn, $sql_sv_i);
        
             if (!$stmt_sv_i) {
                 print '<center><font size="5" color="Maroon">';
                 print"Wyst&#261pił bł&#261d podczas zapisu do bazy sv<br>";
                 exit();
             } 
         	}
     }
         //jest zapis dla zadania
         else {
         	
         	 
         		
            if (($svprc1 > 0) or (strlen($svkom1) > 0)){
			
     	    $sql_sv_u="update ".$library."/sv set  svprc= $svprc1, svkom = '$svkom1', svzal='$svzal', svdat=$svdat where svdtp=$id[1] and svsbl='$id[0]'";  
print 'w 238 $sql_sv_u='.$sql_sv_u;                            
 
			$stmt_sv_u = db2_query($conn, $sql_sv_u);
			if (!$stmt_sv_u) {
				print '<center><font size="5" color="Maroon">';
				print"Wystąpił błąd podczas modyfikacji rekordu bazy sv<br>";
				exit();
             } 
         	 }
             else {
             	$sql_sv_d="delete ".$library."/sv where svprc = ".$svprc1." and svkom = '".$svkom1."' and svzal = ".$svzal." and svsbl = ".$svsbl." and svdtp = ".$svdtp; 
//print 'w 232 $sql_sv_d='.$sql_sv_d.'=<br>';                            
                $stmt_sv_d = db2_query($conn, $sql_sv_d);
        
                if (!$stmt_sv_d) {
                     print"Wyst&#261pił bł&#261d podczas usuwania rekordu z bazy sv<br>";
                     exit();
                } 
             }
     }        
     
      }
}
exit();

$adres_powrot = 'lista_sv.php?&pusrid='.$loginUser;

//print 'w 96 $adres='.$adres.'=<br>';                        

?>
<
       <script language="JavaScript">     	        
      	       location="<?echo $adres_powrot; ?>";
         </script>
<?php



db2_close($conn);

?>


zdjęcie wyników jakie zwraca po wyświetleniu "print"

screen

EDIT: jeżeli usunę jeden "}" na koncu i dodam w linijce 136 to zmienia tylko ostatni rekord, czyli tez jest błąd

0
  1. rozdziel to na pliki html, php i js
  2. podziel php na funkcje (np wydziel kod repozytorium/DAO)

Aktualnie ten kod wyglada jak ze schylku ubieglego wieku (PHP3 ?) i nie nadaje sie do czytania.

0

a jesli chodzi o same pętle ktore są wykonywane to są one wykonywane dobrze?

jestem bardzo poczatkujacy i wiekszosc rzeczy jeszcze z ksiazek/internetu dlatego moze to byc tzw "spaghetti"

0
foreach ($svkom as $key => $value) 
			  {
				
	//print 'w 178 <br> key='.$key;	  
			 $id = explode("/",$key);
	//print_r ($id);  
			 $svsbl =  $id[0];
			 $svdtp =  $id[1];
				
	//print 'w 246 $key_p='.$key_p.'=$value_p='.$value_p.'=<br>';
	//$key_p - nr pracowni
	//dla każdej pracowni trzeba sprawdzić czy jest rekord dla bieżąego okresu
			$sql_sv="select count(*) from ".$library."/sv where svsbl='$svsbl' and svdtp=$svdtp";

	print '<br> w 251 $sql_sv='.$sql_sv.'=<br>'.'<br>';
		$stmt_sv = db2_query($conn, $sql_sv);
				
		if (!$stmt_sv) 			{
	print '<center><font size="5" color="Maroon">';
	print"Wystąpił błąd podczas odczytu bazy sv<br>";
	
								} 
				 
		$row_sv = db2_fetch_array($stmt_sv);
		$jest_sv = $row_sv[0];
	print '<br>w 196 $jest_sv='.$jest_sv.'<br>';
		
			   
		$svkom1 = $svkom[$key];
		$svprc1= $svprc[$key];
			  
			 
			if($jest_sv == 0) {	
		
					
		$sql_sv_u="update ".$library."/sv set  svprc= $svprc1, svkom = '$svkom1', svzal='$svzal', svdat=$svdat where svdtp=$svdtp and svsbl='$svsbl'";  
	print 'w 238 $sql_sv_u='.$sql_sv_u;                            
		 
		$stmt_sv_u = db2_query($conn, $sql_sv_u);
		
		if (!$stmt_sv_u) {
	print '<center><font size="5" color="Maroon">';
	print"Wystąpił błąd podczas modyfikacji rekordu bazy sv<br>";
	exit();
	
	
						 } 
						 else
	{
		//nic
	}
													}
			 }        
			 
							

exit();

Czy tyle powinno starczyc do sprawdzenia czy rekord ktory juz jest zostanie pominięty a jesli zaszly zmiany to ma wykonac update? albo co tu jest nie tak? Bo nie wykonuje tego ;/

Troche uproscilem kod, poniewaz tylko i wylacznie zmienne "svkom" i "svprc" są edytowalne, no a "svzal" pobiera z id uzytkownika ktory jest zalogowany, a "svdat" z daty dzisiejszej

1 użytkowników online, w tym zalogowanych: 0, gości: 1