Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie zapytania mysql
Forum PHP.pl > Forum > PHP
Pinki18
Dzień Dobry.

Mam takie zapytanie:

Kod
$q = "INSERT INTO awizo (
IDFirmy,Kierowca,
$reszta
CzasStart) VALUES (
'$IDFirmy','$Kierowca',
\"$reszta2\"
'$CzasStart')";



Chciałbym, aby tworzyło się ono dynamicznie o zmienne $reszta i $reszta2

Zrobiłem coś takiego:
Kod
$reszta   = '';
$reszta2 = '';

$KierowcaTelefon = '604123123';
$NrRejestracyjny = 'WE12312';

if (!empty($KierowcaTelefon)) { $reszta = 'KierowcaTelefon,'; $reszta2 = '$KierowcaTelefon,';} else { $reszta = ''; $reszta2 = ''; };
if (!empty($NrRejestracyjny)) { $reszta = 'NrRejestracyjny,';  $reszta2 = '$NrRejestracyjny,';} else { $reszta = ''; $reszta2 = ''; };


Zmienna $reszta generuje się dobrze i poprawnie dodawana jest do zapytania. Problem jest ze zmienną $reszta2. Po wywołaniu zapytania mam:

Kod
INSERT INTO awizo (
IDFirmy,Kierowca,
KierowcaTelefon,NrRejestracyjny,
CzasStart
) VALUES (
'3','Adam',
"$KierowcaTelefon,$NrRejestracyjny"
'2016-03-18 18:00:00')



Jak to powinno wyglądać, aby poprawnie wstawiał wyniki zmiennych $KierowcaTelefon, $NrRejestracyjny do zapytania.
viking
Podstawy php.
'' - zwraca ciąg bez parsowania.
"" - przetwarza
Pinki18
Cytat(viking @ 18.03.2016, 09:55:04 ) *
Podstawy php.
'' - zwraca ciąg bez parsowania.
"" - przetwarza


Masz rację, już poprawiłem i działa.
Myślałem, że to będzie coś innego, bo wczoraj próbowałem i mi nie szło.

Kod
$q = "INSERT INTO awizo (
IDFirmy,Kierowca,
$reszta
CzasStart) VALUES (
'$IDFirmy','$Kierowca',
$reszta2
'$CzasStart')";


$reszta   = '';
$reszta2 = '';

$KierowcaTelefon = '604123123';
$NrRejestracyjny = 'WE12312';

if (!empty($KierowcaTelefon)) { $reszta = 'KierowcaTelefon,'; $reszta2 = "'KierowcaTelefon',";} else { $reszta = ''; $reszta2 = ''; };
if (!empty($NrRejestracyjny)) { $reszta = 'NrRejestracyjny,';  $reszta2 = "'NrRejestracyjny',";} else { $reszta = ''; $reszta2 = ''; };
Salvation
Przypisujesz na sztywno
  1. $KierowcaTelefon = '604123123';
  2. $NrRejestracyjny = 'WE12312';

A później sprawdzasz czy te zmienne NIE są puste - a wiadomo, że nie będą, więc po co w ogóle ten warunek?
Pinki18
Cytat(Salvation @ 18.03.2016, 10:48:15 ) *
Przypisujesz na sztywno
  1. $KierowcaTelefon = '604123123';
  2. $NrRejestracyjny = 'WE12312';

A później sprawdzasz czy te zmienne NIE są puste - a wiadomo, że nie będą, więc po co w ogóle ten warunek?


To tylko dla przykładu smile.gif
Zmienne pobierane są przez $_POST
viking
Pamiętaj żeby to zabezpieczyć najlepiej przez prepared statements.
Salvation
A po co w tych wartościach, które będziesz INSERTował jest przecinek? No i wg mnie zapytanie powinno wyglądać tak:
  1. $sql = "INSERT INTO `awizo` (`IDFirmy`, `Kierowca`, `$reszta`, `CzasStart`) VALUES ('$IDFirmy', '$Kierowca', '$reszta2', '$CzasStart')";

No i to jest niczym nie zabezpieczone, polecam skorzystać z PDO.
Pinki18
Cytat(Salvation @ 18.03.2016, 12:03:11 ) *
A po co w tych wartościach, które będziesz INSERTował jest przecinek? No i wg mnie zapytanie powinno wyglądać tak:
  1. $sql = "INSERT INTO `awizo` (`IDFirmy`, `Kierowca`, `$reszta`, `CzasStart`) VALUES ('$IDFirmy', '$Kierowca', '$reszta2', '$CzasStart')";

No i to jest niczym nie zabezpieczone, polecam skorzystać z PDO.


Dane z post mam tak:
Kod
$KierowcaTelefon  = strip_tags($_POST['KierowcaTelefon']);


Zrobiłem to jak wyżej, aby skracał zapytanie jeśli jakaś zmienna jest pusta. W bazie pola mam ustawione domyślnie jako NULL.

Próbowałem wcześniej tak:
Kod
$KierowcaTelefon  = strip_tags($_POST['KierowcaTelefon']);
$NrRejestracyjny  = strip_tags($_POST['NrRejestracyjny']);

if (empty($KierowcaTelefon)) { $KierowcaTelefon = NULL; };
if (empty($NrRejestracyjny)) { $NrRejestracyjny = NULL; };

$q = "INSERT INTO awizo (
IDFirmy,Kierowca,KierowcaTelefon,NrRejestracyjny,CzasStart)
VALUES (
'$IDFirmy','$Kierowca','$KierowcaTelefon','$KierowcaTelefon','$CzasStart')";


Ale wstawia do bazy NULL jako teks a nie definiuje tego pola jako NULL.
Próbowałem też tak:
Kod
'$IDFirmy','$Kierowca',$KierowcaTelefon,$KierowcaTelefon,'$CzasStart')";


ale głupieje jak są spacje.
Salvation
Jak są puste, to po prostu nie podawaj ich w zapytaniu, wtedy będziesz miał wartość NULL z MySQL.

Popatrzyłem na kod (ten pierwszy) jeszcze raz. I zauważyłem pewny błąd składniowy. Konkretnie to ten fragment kodu:
  1. if (!empty($KierowcaTelefon)) { $reszta = 'KierowcaTelefon,'; $reszta2 = '$KierowcaTelefon,';} else { $reszta = ''; $reszta2 = ''; };
  2. if (!empty($NrRejestracyjny)) { $reszta = 'NrRejestracyjny,'; $reszta2 = '$NrRejestracyjny,';} else { $reszta = ''; $reszta2 = ''; };

Skoro potrzebujesz ten przecinek tam, to powinien on wyglądać tak:
  1. if(!empty($KierowcaTelefon)){ $reszta = 'KierowcaTelefon,'; $reszta2 = $KierowcaTelefon .','; } else{ $reszta = ''; $reszta2 = ''; }
  2. if(!empty($NrRejestracyjny)){ $reszta = 'NrRejestracyjny,'; $reszta2 = $NrRejestracyjny .','; } else{ $reszta = ''; $reszta2 = ''; }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.