Příjem dat přes POST a uložení do DB – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Příjem dat přes POST a uložení do DB – PHP – Fórum – Programujte.comPříjem dat přes POST a uložení do DB – PHP – Fórum – Programujte.com

 

Pavelv0
Stálý člen
11. 4. 2023   #1
-
0
-

Ahoj, hledám vhodný způsob, jak přijmout 80 proměnných přijatých přes HTTP POST a uložit je do MySQL.

Přijímaná proměnná má název Uc1, Uc2,... stejně tak se jmenují proměnné v databázi. Momentálně zpracovávám 5 hodnot stylem:

 $Uc1 = mysqli_real_escape_string($link, $_POST['Uc1']);
 $Uc2 = mysqli_real_escape_string($link, $_POST['Uc2']);
 $Uc3 = mysqli_real_escape_string($link, $_POST['Uc3']);
 $Uc4 = mysqli_real_escape_string($link, $_POST['Uc4']);
 $Uc5 = mysqli_real_escape_string($link, $_POST['Uc5']);


 $result = mysqli_query($link,"
     INSERT INTO charger_data (Uc1, Uc2, Uc3, Uc4, Uc5)
     SELECT '$Uc1','$Uc2','$Uc3','$Uc4','$Uc5'"

Pokud by to něčemu pomohlo, jsem schopen změnit formát příchozích dat, ale POST metoda to být musí.

Nahlásit jako SPAM
IP: 185.99.177.–
Kit+15
Guru
11. 4. 2023   #2
-
0
-

#1 Pavelv
Použij prepared statements a zbavíš se tak prvních 5 řádek.

Nahlásit jako SPAM
IP: 213.175.51.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
12. 4. 2023   #3
-
0
-

   

// https://www.php.net/…atements.php

Example #3 Less round trips using multi-INSERT SQL

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");

$values = [1, 2, 3, 4];

$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?), (?), (?), (?)");
$stmt->bind_param('iiii', ...$values);
$stmt->execute();

a ty uc muzes dat jako pole
 

<input type=checkbox name="uc[]" value=1>
<input type=checkbox name="uc[]" value=1>

//$_POST['uc'] = array() // $values = [1, 2, 3, 4]; je take array

Akorat, ze to u checkboxu teda neodesila nezaskrtle, takze by se 
to muselo asi resit jinak. Ale, u textu by to melo projit.

<input type=text name="uc[]" value=1>
<input type=text name="uc[]" value=1>
Nahlásit jako SPAM
IP: 2001:718:2601:258:f834:d86b:40e9:1095...–
peter
~ Anonymní uživatel
4014 příspěvků
12. 4. 2023   #4
-
0
-

Ale, jako, ani tve reseni neni spatne. Tak tam bude 20 radku. Hlavne, ze se v kodu vyznas, i v html.
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:f834:d86b:40e9:1095...–
Pavelv0
Stálý člen
12. 4. 2023   #5
-
0
-

Ahoj, díky za reakce, prepared statements vyzkouším, pochopil jsem správně, že tam musím napsat počet otazníků jako počet přijímaných proměnných? A když jich bude 80,.... to nelze řešit nějak efektivněji, když proměnné jsou názvy číselné řady? Například zadefinuji základ "Uc", potom délku 80 a to je vše, o zbytek se postará nějaký generátor.... jedná se o sběr dat z nějakého zařízení, co posílá data přes HTTP POST

Nahlásit jako SPAM
IP: 185.99.177.–
Kit+15
Guru
12. 4. 2023   #6
-
0
-

#5 Pavelv
Lze to řešit efektivněji, když ta tabulka nebude mít 80 sloupců, ale max 10. Tu tabulku určitě bude vhodné normalizovat.

Samozřejmě se ty otazníky dají vygenerovat podle počtu proměnných v $_POST. Je však třeba vyfiltrovat jen ty žádoucí a doplnit chybějící, aby ten SQL dotaz nepadal. Jsou to jen 3 řádky navíc.

Nahlásit jako SPAM
IP: 195.113.155.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
14. 4. 2023   #7
-
0
-

Otazkou je, jak ta data z tabulky dal vyuzivas. jestli treba nemas lepcejsi nacist celou tabulku. Pak by celou radu slo zapsat jako jeden string. Ale, pokud to pouzivas hodnoty v sql, tak to moc nejde resit.
Doplneni otazniku do dotazu je to nejmensi. Bud to tam dat rucne, nebo automaticky doplnit strin pres str_repeat, treba

php.net/str-repeat

Example #1 str_repeat() example
<?php
echo str_repeat("-=", 10);
?>

Ale, muzes dotaz skladat i pomoci toho escape, cyklem.

Ja treba resil nedavno podobny problem (1-2 roky zpet) a rozhodl jsem se tabulku ulozit jako string. Jednalo se o tabulku financovani prilozenou k formulari. Tabulka byla dynamicka, moznost pridat oddeleni a nejaka dalsi deleni. Tabulka slouzila jen ke cteni nebo editaci.Narazil jsem trochu na problem s limitem stringu, byl nutny jeden sql prikaz. jinak mi vse funguje. Tabulku nacitam jako celek pro zobrazeni nebo editaci. Jinak se s jejimi udaji nijak nepracuje, zadne serazovani nebo tak.

Neco jineho je, treba, kdyz mas tabulku s pripojenim inet zasuvek na budove. Tam je treba 10-20 udaju a vetsina z nich se filtruje. Tusim to zatim delaji kluci v excelu. Prislo jim to jednodussi nez se drbat s programem nebo to sdilet pres ofice365 nebo google-sheet, kdyz jsou to vicemene tajne informace. Treba, minimalne nechceme, aby kazdy vedel, na jakem kabelu, budove jsou jake kamery :) Cili, duvera v nejaky jiny software je velice nizka.

Nahlásit jako SPAM
IP: 2001:718:2601:258:c559:ed3e:99ba:49c8...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý