Przycisk do oznaczania jako pobrane.

Przycisk do oznaczania jako pobrane.
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Dzień dobry.
W jaki sposób wymusić po kliknięciu przycisku oznaczenie rekordu w bazie danych jako pobrany ?
Dane z mysql pobieram według poniższego zapytania.

Kopiuj
<?php
								$sql = "SELECT * FROM tabela";
								$result = mysqli_query($mysqli,$sql);
								$sno = 1;
								while($wynik = mysqli_fetch_array($result)){
									$id=$wynik['id'];
									$data_dodania=$wynik['data_dodania'];
									$pobrane=$wynik['pobrane'];
								?>

Chciałbym, żeby w rekordzie pobrane było oznaczone tak - jeśli została kliknięty przycisk, a nie - jesli przycisk nie został wciśnięty ?

edytowany 2x, ostatnio: tracer87
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:25 minut
  • Lokalizacja:Poznań
  • Postów:8760
1

Może zacznijmy od tego, co to za przycisk, czy jest częścią formularza, czy sobie wisi samodzielnie? Czy jest to przycisk typu "submit" czy może "zwykły" z obsługa onclick w JavaScript? Jeśli formularz to czy przesyłany przez POST czy GET?

Co do samej zasady - musisz w jakiś sposób "odczytać" działanie/intencję przycisku. Jeśli każdy przycisk zwraca inną treść, to po prostu odczytujesz ID tego przycisku. Jeśli ten sam przycisk ma zwracać różne treści, to musisz jakoś przekazać do serwera, która treść została przesłana. Możesz to zrobić chociażby przez URL, możesz też dodać do formularza pole typu <input type="hidden">. Dałeś za mało informacji, żeby coś sensownego doradzić.

A co do fragmentu " żeby w rekordzie pobrane było oznaczone tak - jeśli została kliknięty przycisk, a nie - jesli przycisk nie został wciśnięty" - rozumiem, że skrypt ma zapamiętywać na stałe (a nie tylko w czasie swojego trwania) to, czy dana pozycja została pobrana? Jeśli tak, to najprościej jest standardowo ustalić wartość "NIE" i zmieniać ją jedynie w chwili, gdy dany przycisk zostanie wciśnięty,

Natomiast tak ogólnie - podaj więcej informacji, bo to co napisałeś jest zbyt ogólne.


T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
1

No właśnie nie do końca wiem jak chcę to rozwiązać.
Dane do bazy danych wprowadzam za pomocą formularza na podstawie 3 dostępnych pól: Data, Kod, Pobrane (domyślna wartość NIE).
Po dodaniu rekordu do bazy danych wyświetla mi się lista wszystkich rekordów z kolumnami, gdzie jedna z nich ma nazwę POBRANE i zgodnie z tym co zostało dodane do bazy danych ma wartość "NIE".
Docelowo chciałbym, aby po kliknięciu przycisku "NIE" zmieniał się na "TAK".
Dodatkowo myślałem o dodaniu funkcji przy kliknięciu w przycisk "NIE" eksportu danych do pliku excela konkretnego rekordu.
Obecnie to wygląda tak: https://zapodaj.net/6cd7d0170fa61.jpg.html

edytowany 1x, ostatnio: tracer87
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:25 minut
  • Lokalizacja:Poznań
  • Postów:8760
1

To może inaczej - wyjaśnij łopatologicznie, jakbyś opisywał problem 10-latkowi, co chcesz osiągnąć, co ma ten program/skrypt robić, do czego go potrzebujesz itp. Wtedy będzie łatwiej coś Ci doradzić, bo póki co to za mało konkretów.
I pamiętaj też, że sam fakt kliknięcia "pobierz" nie oznacza, że dana treść została pobrana. Może ktoś to kliknął,ale zamknął przeglądarkę, może w trakcie pobierania net padł itp. Wiem, że często się to nie zdarza, poza tym zależy też od rozmiaru pliku. Jeśli ma on 2kB to spoko, ale przy 60MB podany przeze mnie problem może się przydarzyć.


edytowany 1x, ostatnio: cerrato
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Chciałem napisać sobie skrypt na własne potrzeby, który będę obsługiwał wraz ze znajomym w lokalnej sieci internetowej co znaczy, że nikt inny nie będzie miał do tego dostępu.
Ogólnym założeniem skryptu jest:

  1. Dodawanie rekordów do bazy danych w 4 tabelach: id, data, kod, pobrane, za pomocą formularza z wykorzystaniem submit.
  2. Wyświetlanie listy wpisów z bazy danych ze statusem domyślnym w kolumnie POBRANE jako "NIE".
  3. Kliknięcie przycisku "NIE" zmienia jego nazwę na "TAK" i pobiera unikatowy wpis z tabel eksportując to jako format excela, maksymalnie kilka kilobajtów danych.

Próbuję to zrobić w następujący sposób:

Kopiuj
<button onclick="if (confirm('Oznaczyć jako pobrane ?')) window.location.href='edytuj.php?id=<?php echo $id;?>';"><a href="export.php?id=<?php echo $id;?>"><?php echo $pobrane;?></a></button>
edytowany 3x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Na moje to najpierw sprawdz czy plik istnieje i po jego pobraniu wykonaj akcje zapisu/podmany wartosci w tabeli. Samo klikniecie w przycisk nie gwarantuje ze plik zostanie pobrany.

T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Zdaję sobie z tego sprawę, że nie gwarantuje to pobrania plików, ale w w mojej sytuacji jest to pewne, gdyż plik będzie miał rozmiar maksymalnie kilkanaście kilobajtów i jest potrzebny do dalszej pracy. Nawet gdyby się nie pobrał to kolejne kliknięcie spowoduje jego pobranie, ale wtedy nie oznaczy go jako "TAK" bo wcześniej został już oznaczony.
Podsumowując chcę podpiąć pod 1 przycisk 2 funkcje: Oznaczenie jako pobrany - stąd komunikat i pobranie go jako plik excela.
Sam plik wykonujący eksport mam już napisany, ale niestety pobiera mi wszystkie wartości z bazy danych, a nie tylko te z określonego rekordu.
Nie potrafię zmusić go do pobrania tylko konkretnego klikniętego rekordu.

Kopiuj
<?php  
	$conn = new mysqli('localhost', 'root', '');  
	mysqli_select_db($conn, 'baza_test');  
	$setSql = "SELECT id, data_dodania, pobrane FROM tabela";  
	$setRec = mysqli_query($conn, $setSql);  
	$columnHeader = '';  
	$columnHeader = "ID" . "\t" .
	"DATA DODANIA" . "\t" .
	"POBRANE" . "\t" .
	$setData = '';   
	while ($rec = mysqli_fetch_row($setRec)) {  
		$rowData = '';  
		foreach ($rec as $value) {  
			$value = '"' . $value . '"' . "\t";  
			$rowData .= $value;  
		}  
		$setData .= trim($rowData) . "\n";  
	}   
	header("Content-type: application/octet-stream");  
	header("Content-Disposition: attachment; filename=eksport.xls");  
	header("Pragma: no-cache");  
	header("Expires: 0");  
	echo ucwords($columnHeader) . "\n" . $setData . "\n";  
?>  

Plik edytuj.php wygląda tak:

Kopiuj
<?php 
	require 'fls/566hg.php';
	
?>
<?php
	if(isset($_POST['update']))
	{
		$id = $_POST['id'];
		$data_dodania = $_POST['data_dodania'];
		$pobrane=$_POST['pobrane'];
		$kod=$_POST['kod'];
		{
			$result = mysqli_query($mysqli, "UPDATE tabela SET data_dodania='$data_dodania', pobrane='$pobrane', kod='$kod' WHERE id=$id");
			header("Location: index.php");
		}
	}
?>
<?php
	$id = $_GET['id'];
	$result = mysqli_query($mysqli, "SELECT * FROM tabela WHERE id=$id");
	while($wynik = mysqli_fetch_array($result))
	{
		$data_dodania = $wynik['data_dodania'];
		$pobrane = $wynik['pobrane'];
		$kod = $wynik['kod'];
	}
?>
<html lang="pl-PL">
	<head>
	</head>
	<body>
		<form action="edytuj.php" method="post">
			<div style="width:40%; margin: auto; padding-top: 20px;">
			<hr>
				<table cellpadding="0" cellspacing="0" border="0">
					<tr>
						<td width="15%" class="input">DATA POBRANIA</td>
						<td><input type="text" name="data_pobrania" value="<?php echo $data_pobrania;?>" class="pole"></td>
					</tr>
					<tr>
						<td width="15%" class="input">KOD</td>
						<td><input type="text" name="kod" value="<?php echo $kod;?>" class="pole"></td>
					</tr>
					<tr>
						<td width="15%" class="input">POBRANE</td>
						<td><input type="text" name="pobrane" value="NIE" class="pole"></td>
					</tr>
					<tr>
						<td>OPCJE</td>
						<td><input type="hidden" name="id" value="<?php echo $_GET['id'];?>">
					<input type="submit" name="update" class="przycisk" value="ZAPISZ ZMIANY"></td>
					</tr>
				</table>
			</form>
		</div>
	</body>
</html>
edytowany 1x, ostatnio: tracer87
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:25 minut
  • Lokalizacja:Poznań
  • Postów:8760
1

pobiera mi wszystkie wartości z bazy danych, a nie tylko te z określonego rekordu

A w jaki sposób przekazujesz do SQL informację, który rekord Cię interesuje?
Z tego co widzę, to dajesz zapytanie w postaci SELECT id, data_dodania, pobrane FROM tabela. To właśnie oznacza, że ma pobrać WSZYSTKIE wartości id, data_pobrania oraz pobrane z tabeli o nazwie tabela. Jeśli chcesz określić jakiś warunek, po którym SQL ma dokonać wyboru interesujących Cię wartości, to musisz do zapytania dodać WHERE a następnie po tym słowie określić ten warunek.

Przykładowo - zapytanie SELECT imie, nazwisko FROM pracownicy zwróci Ci wszystkich pracowników, którzy są zapisani w danej bazie. Jeśli chcesz zmniejszyć ich ilość, to musisz określić jakiś warunek, na podstawie którego zostanie wykonana selekcja. Zapytanie w postaci SELECT imie, nazwisko FRONM pracownicy WHERE miasto=Sosnowiec spowoduje przekazanie w odpowiedzi tylko tych pracowników, który mieszkają w Sosnowcu. Niedawno pisałem o tym w innym wątku, więc żeby się nie powtarzać, rzuć okiem na podane posty. Wprawdzie dotyczą innego języka, ale zasada działania z SQL jest taka sama: https://4programmers.net/Forum/1560726, https://4programmers.net/Forum/1560896 ORAZ https://4programmers.net/Forum/1560896


edytowany 3x, ostatnio: cerrato
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Jesli masz plik w ktorym czytasz cale dane to pod przycisk podstaw id i tym operuj. Potem przy pomocy id dobierzesz sie do konkretnego pliku do zassania.

edytowany 1x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Zapytania z wykorzystaniem WHERE wiem jak formułować.
Wszystkie inserty do bazy danych wykonuje poprawnie.
Pobrać dane i eksportować do bazy danych również potrafię, ale nie wiem jak zmusić pobranie konkretnego rekordu z bazy danych.
Przykład:
Dodaję do bazy danych rekordy z wartościami:
ID = ustawiony AI
DATA = domyślnie wstawia się dzisiejsza data (mogę ją edytować)
POBRANE = domyślnie wstawia się "NIE"
KOD = wpisuje wartości

Dane z bazy danych wyświetlam w kolumnach wpliku index.php:
ID = pobrany numer z bazy danych
DATA = data jaka została wpisana w pole
POBRANE = wyświetla się domyślna wartość "NIE"

Pobieranie do pliku .xls i zmiana wartości "NIE" na "TAK po kliknięciu:
Klikam przycisk "NIE" w kolumnie POBRANE i tutaj zaczyna się problem.

Po kliknięciu "NIE" pobiera się plik .xls, ale ze wszystkimi ID dodanymi do bazy danych.
Wstawianie WHERE nie przyniesie rezultatu, gdyż nie potrafię zmusić, żeby po kliknięciu w "NIE" automatycznie zaktualizaowało tabelę w bazie danych w kolumnie "POBRANE" w konkretnym ID z "NIE" na "TAK".

SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
1

Patrzyles co zwraca id ? To po pierwsze.

Po drugie nie rozumiem tego "nie potrafie zmusic zeby automatycznue zaktualizowalo w bazie danych"
Jesli masz konkretne id to dobierasz sie do tej wartosci NIE i przez UPDATE zmieniasz wartosc na TAK.

edytowany 1x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Mam konkretne "ID", ale nie wiem jak mam zaktualizować zapytanie w bazie danych przy kliknięciu przycisku,a nie przy otwieraniu pliku edycji.
Zapis wygląda tak:

Kopiuj
<a href="export.php?id=<?php echo $id;?>"><button class="przycisk3"><?php echo $pobrane;?></button></a>

Po kliknięciu przycisku plik export.php wykonuje akcje zrzutu wszystkich danych do exela, a nie tylko konkretnego ID i dodatkowo chcę żeby automatycznie zmienna <?php echo $pobrane;?> zaktualizowała wpis w bazie danych z "NIE" na "TAK"

edytowany 2x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0
Kopiuj
extract($_POST);
$sql = "UPDATE costam SET pobrane='TAK', WHERE id='$id'";  

edytowany 1x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

W którym miejscu mam wstawić zapytanie, w pliku export.php ?

SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

No jak gdzie. Tam gdzie laczysz sie z bazą.

np:

Kopiuj
extract($_GET, EXTR_OVERWRITE);
$conn = mysqli_connect($server, $user, '');
$db_selected = mysqli_select_db($conn,"nazwabazy");
if (!$db_selected) {
   exit ('Can\'t connect to Database : ' . mysqli_connect_error());
}




$sql = "UPDATE costam SET pobrano='TAK', WHERE id='$id'";

if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

mysqli_close($conn);

edytowany 5x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Nie bardzo rozumiem Twoje wskazówki, wydaje mi się, że mijamy się w tym o czym piszemy.
Do bazy łącze się w następujący sposób:

Kopiuj
<?php
	$DB_host = 'localhost';
	$DB_user = 'root';
	$DB_pass = '';
	$DB_name = 'baza_test';
	$mysqli = mysqli_connect($DB_host, $DB_user, $DB_pass, $DB_name); 
?>

W plikach mam podłączenie ustanowione w ten sposób:

Kopiuj
<?php 
	require 'cfg.php';
	}
?>

Rozumiem, żeby wywołać zmianę wpisu w tabeli pod konkretny rekord i wyeksportować to do pliku .xls muszę nadać 2 akcje w pliku wykonawczym tj. export.php
W pliku eksportu muszę dopisać dodatkową linijkę kodu

Kopiuj
extract($_POST);
$sql = "UPDATE costam SET pobrane='TAK', WHERE id='$id'";  

, która przy okazji eksportu zaktualizuje mi wpis w tabeli ?

SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Ten ostatni post moj pokazuje aktualizacje w bazie.

Kopiuj
extract($_POST);
```
zmien na $_GET albo poprostu przypisuj nowe zmienne tablicom

````php
$id = $_GET['id'];
```

To tylko dotyczy aktualizacji. To jak laczysz sie z baza nie ma znaczenia czy to zrobisz jak ja czy jak ty wazna jest sama aktualizacja.
Ta linia aktualizuje dane.
edytowany 3x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Przez głupią literówkę wysypywało mi się pobieranie, a za pierwszym Twoją wskazówką robiłem wszystko dobrze.
Po kliknięciu w przycisk automatycznie zmienia mi napis na "TAK" i aktualizuje w bazie danych rekord, dodatkowo dodałem Location header: index.php żeby nie przenosiło do innego okna.
Jednak nadal pozostaje kwestia exportu, bo jak próbuję połączyć dwa zapytania do jednego pliku, to albo działa tylko export.

Kopiuj
<?php  
$conn = new mysqli('localhost', 'root', '');  
mysqli_select_db($conn, 'baza_proby');  
$setSql = "SELECT * FROM tabela";  
$setRec = mysqli_query($conn, $setSql);  
$columnHeader = '';  
$columnHeader = "1" . "\t" .
"2" . "\t" .
"3" . "\t" .
$setData = '';   
while ($rec = mysqli_fetch_row($setRec)) {  
$rowData = '';  
foreach ($rec as $value) {  
$value = '"' . $value . '"' . "\t";  
$rowData .= $value;  
}  
$setData .= trim($rowData) . "\n";  
}  
$filename = "dzien-" . date('Y-m-d') . ".xls"; 
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=\"$filename\"");  
header("Pragma: no-cache");  
header("Expires: 0");  
echo ucwords($columnHeader) . "\n" . $setData . "\n";  
?>  

<?php
extract($_GET);
$result = mysqli_query($mysqli, "UPDATE lokalizacja SET pobrane='TAK' WHERE id=$id");
header("Location: index.php");
?>
edytowany 2x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Przyklad pobiera konkretna nazwe pliku poprzez id. Kazdy z wierszy musi zawierac id. W tym przykladzie jest tabela:

Kopiuj
`naszepliki`

i rekordy o nazwach takich samymych jak nazwy plikow do pobrania.

Kopiuj
nazwapliku

Aktualizacja rekordu na TAK

Kopiuj
pobrano

Może tabel skladac tylko z tych dwu rekordow albo wiecej jak chcesz to nie ma znaczenia. Wywal te petle bo sa niepotrzebne. W tym przykladzie beda pobierane pliki *.rar ustawione w tym samym kat. co reszta plikow.

Kopiuj
if(isset($_GET['id'])){
/*
tutaj laczenie z b.danych
**/

$db_selected = mysqli_select_db($conn, 'pobieralnia');
if (!$db_selected) {
   die ('Can\'t connect to Database : ' . mysqli_connect_error());
}

$update = "UPDATE naszepliki SET pobrano='TAK', WHERE id=" . $_GET['id'];

if (mysqli_query($conn, $update)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

$sql = 'SELECT nazwapliku FROM naszepliki WHERE id=' . $_GET['id'];

mysqli_query($conn, $sql) or die(mysqli_error($conn));
$rs_id = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($rs_id);

$plikdopobrania = $row['nazwapliku'] . '.rar';

header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=\"$plikdopobrania\"");  
header("Pragma: no-cache");  
header("Expires: 0"); 
}else{
exit('blad w przekazaniu danych');
}
edytowany 2x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Przerobiłem Twoje zapytanie, dostosowując je do moich potrzeb i działa tylko częściowo.
Po naciśnięciu przycisku eksportuje plik z wybranym rekordem, ale dodaje jako pierwszy wiersz pustą linie.
Przycisk "NIE" zmienia nazwę na "TAK" dopiero po ręcznym odświeżeniu strony F5.
Co robię nie tak ?
Do pełni szczęścia brakuje tylko automatycznego odświeżenie strony po naciśnięciu przycisku, który wtedy zmieni się na "TAK" i usunięciu 1 wiersza w excelu.

Kopiuj
<?php 
require 'cfg8.php';
?>
<?php 
extract($_GET);  
$result = mysqli_query($mysqli, "UPDATE lokalizacja SET pobrane='TAK' WHERE id='$id'");
$sql = "SELECT id, regal, ean FROM lokalizacja WHERE id='$id'";  
$result = mysqli_query($mysqli,$sql); 
$columnHeader = "ID" . "\t" .
"REGAŁ" . "\t" .
"EAN" . "\t" .
$setData = '';   
while ($rec = mysqli_fetch_row($result)) {  
	$rowData = '';  
	foreach ($rec as $value) {  
		$value = '"' . $value . '"' . "\t";  
		$rowData .= $value;  
	}  
	$setData .= trim($rowData) . "\n";  
}  
$filename = "lokalizacja-" . date('Y-m-d') . ".xls"; 
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=\"$filename\"");  
header("Pragma: no-cache");  
header("Expires: 0");  
echo ucwords($columnHeader) . "\n" . $setData . "\n";  
?>  

edytowany 1x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Jaki pierwszy wiersz i gdzie. Wez to tlumacz jak czlowiekowi. Ja nie mam szklanej kuli. Download tego nie robi. Powywalaj te wszystkie lamania wierszy. Zaloze sie ze gdzies to potem zapisujesz.

Sprawdz jeszcze raz ten przyklad co podalem. Zrob kilka plikow na nowo i sprawdz. To chyba nie tak duzo ? Problem tkwi po Twojej stronie.

edytowany 4x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Sprawdzałem Twoje zapytanie, podmieniałem na wartości, ale nie działa.

Kopiuj
<?php
if(isset($_GET['id'])){
$conn = mysqli_connect('localhost', 'root', '');

$db_selected = mysqli_select_db($conn, 'baza_proby');
if (!$db_selected) {
   die ('Can\'t connect to Database : ' . mysqli_connect_error());
}

$update = "UPDATE lokalizacja SET pobrane='TAK', WHERE id=" . $_GET['id'];

if (mysqli_query($conn, $update)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

$sql = 'SELECT id FROM lokalizacja WHERE id=' . $_GET['id'];

mysqli_query($conn, $sql) or die(mysqli_error($conn));
$rs_id = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($rs_id);

$plikdopobrania = $row['nazwapliku'] . '.rar';

header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=\"$plikdopobrania\"");  
header("Pragma: no-cache");  
header("Expires: 0"); 
}else{
exit('blad w przekazaniu danych');
}
?>

Plik jest eksportowany do formatu .rar bez żadnych treści, rekord w bazie nie jest aktualizowany.

edytowany 1x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0
tracer87 napisał(a):

Sprawdzałem Twoje zapytanie, podmieniałem na wartości, ale nie działa.

Kopiuj
<?php
if(isset($_GET['id'])){
$conn = mysqli_connect('localhost', 'root', '');

$db_selected = mysqli_select_db($conn, 'baza_proby');
if (!$db_selected) {
   die ('Can\'t connect to Database : ' . mysqli_connect_error());
}

$update = "UPDATE lokalizacja SET pobrane='TAK', WHERE id=" . $_GET['id'];

if (mysqli_query($conn, $update)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

$sql = 'SELECT id FROM lokalizacja WHERE id=' . $_GET['id'];

mysqli_query($conn, $sql) or die(mysqli_error($conn));
$rs_id = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($rs_id);

$plikdopobrania = $row['nazwapliku'] . '.rar';

header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename=\"$plikdopobrania\"");  
header("Pragma: no-cache");  
header("Expires: 0"); 
}else{
exit('blad w przekazaniu danych');
}
?>

Plik jest eksportowany do formatu .rar bez żadnych treści, rekord w bazie nie jest aktualizowany.

No widzisz a u mnie dziala. Tak mozemy do nastepnego miesiaca

T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

To w takim razie nie wiem w którym miejscu jest błąd i jak mam to bardziej dokładnie wytłumaczyć.
Zadałem konkretne pytanie do którego otrzymałem odpowiedź, potrzebuję jedynie jeszcze informacji w jaki sposób mam wymusić automatyczne przeładowanie strony po wykonaniu dwóch czynności przez plik export.php.
Mój plik eksportowy po zastosowaniu Twojej wskazówki wykonuje moje założenie z tym, że nie odświeża stron i trzeba wykonać to ręcznie.
Pusty wiersz o którym pisałem jest w pliku wynikowym .xls i wygląda tak:
Pusty wiersz
Plik eksportuje konkretne ID z bazy danych przy pomocy

Kopiuj
<a href="ex.php?id=<?php echo $id;?>"><?php echo $pobrane;?></a>
edytowany 3x, ostatnio: tracer87
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
1

https://www.w3schools.com/jsref/met_loc_reload.asp
Albo po prostu po wykonaniu zapytan przekieruj na plik z linkami.

Raz piszesz ze nie dziala, pozniej ze dziala. Zdecyduj sie.
Zanim sciagniesz plik to jest bez tego pustego wiersza? Przyklad nie ingeruje w zawartosc sciaganego pliku.

edytowany 5x, ostatnio: szybka_parowka
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Jesli masz linki z targetem do innej strony jako nowa (_blank) to mozesz samo odswiezanie tych statusow (tej calej strony z linkami) zrobic na przykladzie gdzie nie trzeba przeladowywac tylko samo sie to bedzie roboic w tle. Do tego bedziesz musial zrobic dwa pliki:

Kopiuj
refresh.js

i

Kopiuj
index.php / lub dowonla nazwa

Zawartosc pliku refresh.js

Kopiuj
var show_links_status = setInterval(
      function ()
      {
         $('#load').load('plik.php').fadeIn("slow");   // plik.php to umowna nazwa pliku z linkami
      }, 2000);

Plik index.php lub jakikolwiek inny

Kopiuj
<script src="refresh.js"></script>
<div id="load"> </div> // obowiazkowa spacja pomiedzy <div> i </div>

Teraz wybierasz plik index.php i tyle. Samo sie bedzie odswiezalo.
Natomiast jesli masz linki, ktore odwoluja sie do pliku gdzie przetwazane sa dane w postaci <a href"asd.php">fdfd</a> to ten przyklad bez targeta _blank jest bez sensu bo zeby to jakos mialo rece i nogo to albo to co w/w albo header i powrot do pliku z linkami. Jelsi to drugie to juz bedziesz widzial zmiany wiec nie potrzebny jest ten przyklad wtedy. To tylko jest ok jesli masz linki do nowego okna. Ktos inny / inna osoba ktora bedzie przegladac pliik z linkami bedzie mogla widziec zmiane bez odswiezania.

w ogóle to ten przyklad o ktorym mowisz ze nie dziala to jak ma dzialac skoro pobierasz ID z tabeli a potem dajesz to z tego co ja dalem. Jak ma to dzialac.

edytowany 3x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Dzięki za pomoc, ogarnąłem to przez window.open na pliku wykonanym, efekt otwiera okno pobiera plik, zamyka i odświeża.
Mam jeszcze jedno pytanie, a mianowicie nie działa mi zmiana koloru w zależności od wartości, stosując taki kod klasa jest pomijana i wyświetla się tylko tekst.

Kopiuj
<?php if($pobrane = 'TAK'): ?> class='tak" <?php endif; ?>>
        <?php echo $pobrane;?>
SP
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:52
0

Nie dziala bo nie moze dzialac. W warunku przypisujesz zmiennej $pobrane wartosc TAK a nie sprawdzasz czy zm. $pobrane ma wartosc TAK.

Kopiuj
<?php
if($pobrane == "tak"){
// klasa dla tak
}else{
// klasa jak nie tak
}
?>
edytowany 3x, ostatnio: szybka_parowka
T8
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:33
0

Dzięki, był else ale nie wkleiłem, dodałem klasy i uruchomiłem w echo regulując zmienną $pobrane odpowiednimi kolorami. Przeczytałem manual wcześniej, ale źle wpisałem klasy. Dzięki za pomoc.
Temat można zamknąć.

edytowany 1x, ostatnio: tracer87
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)