Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

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


Olekk

Pytanie

Opublikowano

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,

    });
}
}

 

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

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 ;)

Opublikowano
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,

    });
}

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...