Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Wyrażenia regularne
sasiadstar
post 28.02.2017, 07:06:54
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 19.06.2015

Ostrzeżenie: (0%)
-----


Witam serdecznie i na wstępie proszę kogoś o pomoc bo nie daje rady z tymi wyrażeniami sobie rady.
Mam taki skryp
CODE
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dataTemp_=str_replace(",","','",$tablicaTemp);//formatuje kod na zrozumialy dla SQL
//...Jakiś kod
//.....
$sql = "INSERT INTO $nazwaTabeli ($tablicaTemp_)


str_replace bardzo ładnie mi przerabia tablice na dane wejsciowe do bazy danych ale....

orginal
"WEBER,"P329,P330,P331","HN8E ",1,KG,B22,C,0.161,F,0.028,H,0.028,,,,,,,2014-03-28"


kod wyjsciowy wygląda tak
'WEBER','"P329','P330','P331"','"HN8E"','1','KG','B22','C','0.161','F','0.028','H','0.028','','','','','','','2014-03-28';
czyli prawie bo "P329,P330,P331" to wyrażenie nie może być rozbite i powinno wyglądać dak
'"P329,P330,P331"'
Kombinowałem na lewo i prawo z tymi wyrażeniami regularnymi ale nijak mi to nie wychodzi.
Go to the top of the page
+Quote Post
Tomplus
post 28.02.2017, 07:30:27
Post #2





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Czy 2, 3 i 4 wartość po przecinku jest zawsze stała? Jeżeli tak, to zamiast wyrażeń regularnych usuń " a potem rozbij linię.

  1. $tablicaTemp = str_replace('"', '', $tablicaTemp);
  2. $tablicaExpl = explode(',',$tablicaTemp);
  3.  
  4. $tablicaExpl[1] = "'{$tablicaExpl[1]}','{$tablicaExpl[2]}','{$tablicaExpl[3]}'";
  5. unset($tablicaExpl[2],$tablicaExpl[3]);
  6. foreach ($listaKolumn as $value) {
  7.  
  8. //$listaKolumn, stworzenie listy do zapytania, uwaga na przecinek na końcu
  9. //$bindQuote, stworzenie odpowiedniej liczby zmiennych do wprowadzenia // ?, ?, ?,...
  10. }
  11. $dbh->prepare("INSERT INTO tablica ($listaKolumn) VALUES ($bindQuote)")
  12. foreach ($tablicaExpl as $value) {
  13. $stmt->bind_param("i", $value);
  14. }



Tak z palca na szybko.
Go to the top of the page
+Quote Post
sasiadstar
post 28.02.2017, 10:40:16
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 19.06.2015

Ostrzeżenie: (0%)
-----


No własnie nie może być
"WEBER,"P329,P330,P331",..."
"WEBER,"P329,P3301",...."
"WEBER,"P329",...."
albo jeszcze więcej wartości ale zawsze są w cudzysłowie bo mają być w jednej komórce.
Ciąg zawsze znajduje się na drugim miejscu.
Chodzi mi własnie o takie wyrażenie rozbij na tablice tam gdzie są przecinki ale pomiń przecinki jeśli napotkasz je w cudzysłowie

Zrobiłem coś takiego co działa ale kod wygląda jak goła d**a mojej teściowej.

CODE
$split=explode('"',$orgin);//pobiera ciag "P329,P330,P331"
$tablicaTemp = preg_replace('/".*,?1"/','@', $orgin);//zamienia tymczasowo "P329,P330,P331" na @
$split2=str_replace(',',"','",$tablicaTemp);//dodaje cudzysłowy
$wynik="'".str_replace('@',$split[1],$split2)."'";//zamienia z powrotem @ na "P329,P330,P331"

Teraz bez względu ile tych P*** w cudzysłowie będzie zawsze pobierze je poprawnie.

Ten post edytował sasiadstar 28.02.2017, 10:43:05
Go to the top of the page
+Quote Post
nospor
post 28.02.2017, 10:47:41
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To co tutaj masz to wyglada na zwykle wiersz csv. Uzyj wiec poprostu
http://php.net/manual/en/function.str-getcsv.php
otrzymasz w wyniku tablice elementow a potem rob co ci sie zywnie podoba majac juz tablice bedzie to banalne, np implode()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sasiadstar
post 28.02.2017, 11:32:04
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 19.06.2015

Ostrzeżenie: (0%)
-----



facepalmxd.gif
O dzięki ci wielki człowieku.
DZIAŁA!!!!
Teraz to już z górki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:13