Skocz do zawartości
  • 0

Rekordy w bazie danych nie aktualizuja sie za kazdym razem??


Olekk
 Udostępnij

Pytanie

Witam, mam mały problem i nie moge  znalesc przyczyny ;/

Mam plik php odpowiedzialny za aktualizacje rekordow;

 

<?php
$d=time();

require_once('dbconn.php');
$data = json_decode(stripslashes($_POST['data']));

if ($_POST['usun'] == "0" ) {
$sqlIncomplete = "UPDATE listitems SET place = '' WHERE 1";
$result = mysqli_query($conn, $sqlIncomplete);
$sqlIncomplete1 = "INSERT INTO `logi`(`name`,`action`,`time`) VALUES ('test','Aktualizacja listy pracownikow','".date("Y-m-d G:i", $d)."')";
mysqli_query($conn,$sqlIncomplete1);
}
echo $_POST['misc']."<br>";
     $sqlIncomplete = "UPDATE listitems SET place = '".str_replace('id','',$_POST['misc'])."'  WHERE id IN ('".str_replace('id', '',implode("','",$data)). "')";
	 
	 echo $sqlIncomplete."<br>";
$result = mysqli_query($conn, $sqlIncomplete);
echo mysqli_error($conn);
mysqli_close($conn);
?>

Zapytanie wysyłam przez jquery, i za kazdym razem dochodzi do pliku php w odpowiedniej postaci, czyli:

UPDATE listitems SET place = '47' WHERE id IN ('2','3','4','5','9','10','13','14')

Zapytania do pliku php sa wysyłane w petli(dla kazdej tabeli osobno), przy wyslaniu pierwszego zapytania czyszcze wszystkie rekordy z kolumny place, a nastepnie na nowo je przypisuje.

Jednak co 2-3 zapis nie aktualizuje nowych danych w bazie, mimo ze zapytanie jest poprawne.

Bledu zadnego tez nie zwraca..

Do testow uzywam xamppa.

Tutaj funkcja js dla jasnosci:

function save() {
	var place = ['id47','id48','id50'];
	
	for(var o = 0, element1; element1 = place[o]; o++){
	var people = [];
var nodesArray =  document.querySelectorAll(".miejsce > #"+place[o]+" > div");
dataString = nodesArray; 
for (var i = 0, element; element = dataString[i]; i++) {
	console.log(i);
  people.push(dataString[i].id);
}
if(o >=1) { $us1=2;}
var jsonString = JSON.stringify(people);
   $.ajax({
        type: "POST",
        url: "script.php",
        data: {data : jsonString,
		       misc : place[o],
			   usun : o
		}, 
        cache: false,

    });
}
}

 

Odnośnik do komentarza
Udostępnij na innych stronach

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

1. Dziwnie sprawdzasz warunek for, sprawdzasz poprzez przypisywanie

for(var o = 0, element1; element1 = place[o]; o++)
//zamień na:
for( o=0 ; o<place.length; o++ )

2. Masz sprzeczny kod, używasz:

$sqlIncomplete  = "UPDATE listitems SET place = '' WHERE 1";

nie wiadomo po co, skoro niżej nie ma żadnego "else" lub też zakończenia skryptu, tak więc ten kod zawsze się wykona:

$sqlIncomplete = "UPDATE listitems SET place = '".str_replace('id','',$_POST['misc'])."'  WHERE id IN ('".str_replace('id', '',implode("','",$data)). "')";

co zawsze bez względu czy "$_POST['usun']" jest równe zeru czy nie. Jak już to zostaw same logi

//Sprzeczny dlatego, że i tak wszystko zostanie nadpisane

 

 

3. Używasz jeszcze tej zmiennej poza funkcją save()? Jeśli nie to po co ona tu jest?

if(o >=1) { $us1=2;}

 

 

4. Po co dublujesz zmienne skoro nigdzie ich potem nie modyfikujesz

var nodesArray =  document.querySelectorAll(".miejsce > #"+place[o]+" > div");
    dataString = nodesArray; 

samo nodesArray wystarczy

 

 

 

 

 

Powiem Ci tak miałem analizować kod ale po pierwsze wcięcia w kodzie są tak chaotyczne że musiałem najpierw wszystko przekopiować do edytora i je ręcznie porobić, po drugie brakuje mi też z Twojej strony testów, w pliku PHP masz "logi", tzn wyświetla Ci się jakie dokładnie zapytanie użyłeś, powinieneś dać np taką informację:

Cytat

Dla pierwszego zapytania ajaxa zostało wykonane polecenie:

UPDATE listitems SET place = 47  WHERE id IN ('11,12,13')

Wykonało się poprawnie, następnie zostało wykonane:

UPDATE listitems SET place = 48  WHERE id IN ('21,22,23,24,25,26,27,28,29')

Również dane zostały zaktualizowane, na samym końcu wysyłane jest zapytanie:

UPDATE listitems SET place = 50 WHERE id IN ('34,35')

Jednak nie aktualizuje ono żadnych rekordów w bazie

 

 

 

Od siebie na koniec jeszcze dodam, jeżeli nie jesteś pewien użyj tego wygenerowanego polecenia SQL bezpośrednio z poziomu phpmyadmin.

 

 

 

 

 

PS jeżeli coś pominąłem albo zrobiłem błąd oznacz mnie to poprawię ;) Pisane na szybko tak więc mogłem coś przeoczyć. I pls, na następny raz zrób chociaż porządne wcięcia w kodzie jak coś wklejasz ;)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
15 godzin temu, Latreso napisał:

1. Dziwnie sprawdzasz warunek for, sprawdzasz poprzez przypisywanie

for(var o = 0, element1; element1 = place[o]; o++)
//zamień na:
for( o=0 ; o<place.length; o++ )

2. Masz sprzeczny kod, używasz:

$sqlIncomplete  = "UPDATE listitems SET place = '' WHERE 1";

nie wiadomo po co, skoro niżej nie ma żadnego "else" lub też zakończenia skryptu, tak więc ten kod zawsze się wykona:

$sqlIncomplete = "UPDATE listitems SET place = '".str_replace('id','',$_POST['misc'])."'  WHERE id IN ('".str_replace('id', '',implode("','",$data)). "')";

co zawsze bez względu czy "$_POST['usun']" jest równe zeru czy nie. Jak już to zostaw same logi

//Sprzeczny dlatego, że i tak wszystko zostanie nadpisane

 

 

3. Używasz jeszcze tej zmiennej poza funkcją save()? Jeśli nie to po co ona tu jest?

if(o >=1) { $us1=2;}

 

 

4. Po co dublujesz zmienne skoro nigdzie ich potem nie modyfikujesz

var nodesArray =  document.querySelectorAll(".miejsce > #"+place[o]+" > div");
    dataString = nodesArray; 

samo nodesArray wystarczy

 

 

 

 

 

Powiem Ci tak miałem analizować kod ale po pierwsze wcięcia w kodzie są tak chaotyczne że musiałem najpierw wszystko przekopiować do edytora i je ręcznie porobić, po drugie brakuje mi też z Twojej strony testów, w pliku PHP masz "logi", tzn wyświetla Ci się jakie dokładnie zapytanie użyłeś, powinieneś dać np taką informację:

 

 

 

Od siebie na koniec jeszcze dodam, jeżeli nie jesteś pewien użyj tego wygenerowanego polecenia SQL bezpośrednio z poziomu phpmyadmin.

 

 

 

 

 

PS jeżeli coś pominąłem albo zrobiłem błąd oznacz mnie to poprawię ;) Pisane na szybko tak więc mogłem coś przeoczyć. I pls, na następny raz zrób chociaż porządne wcięcia w kodzie jak coś wklejasz ;)

W pkt 1-2 chyba doszedles do tego ze to dziala, bo widze ze przekresliles tekst ;)

Pkt 3-4 zostało po wczesniejszych modyfikacjach kodu.

Jezeli chodzi o sql to analizowałem te zapytania chyba w kazdy mozliwy sposob..

Zapytania z logow wklejalem bezposrednio w phpmyadmin i są 'niby' w 100% poprawne..

Problem jest taki ze przykladowo wywołam funkcje zapisz, odswieze strone i wszystko jest ok.

Wywołuje znowu funkcje zapisz, sprawdzam zapytania, sa w 100% identyczne, ale po odswiezeniu strony nagle okazuje sie ze do place=48 nie zostało nic przypisane..

Siedze juz nad tym pare godzin i nadal nie mam bladego pojecia co tu jest nie tak..

Co do marginesow to nastepnym razem wstawie ;)

 

@Latreso

Wygląda na to ze uporałem się z problemem, jednak nadal nie znam jego przyczyny, i to mnie boli ;/

Wywaliłem funkcje w php odpowiedzialną za wyczyszczenie rekordów z kolumny place przy pierwszym wywołaniu, i zastąpiłem ją funkcją js która to odczytuje id które nie zostało wybrane, a następnie przypisuje im wartość 0 w kolumnie place;

var people = [];
var dataString =  document.querySelectorAll(".left > button"); 
for (var i = 0, element; element = dataString[i]; i++) {
	if(dataString[i].style.visibility != "hidden"){
	people.push(dataString[i].id);
	}
}
if(people.length > 0){
	var jsonString = JSON.stringify(people);
		$.ajax({
        	type: "POST",
        	url: "script.php",
        	data: {data : jsonString,
					misc : 0,
			   		usun : o
		}, 
        cache: false,

    });
}

 

Edytowane przez Olekk
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum Rekordy w bazie danych nie aktualizuja sie za kazdym razem??   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...