Vlozenie casu do MySQL databazy – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vlozenie casu do MySQL databazy – PHP – Fórum – Programujte.comVlozenie casu do MySQL databazy – PHP – Fórum – Programujte.com

 

Peter1250
Newbie
2. 5. 2015   #1
-
0
-

Caute, mam webovu aplikaciu v PHP.

V tadatabaze mam jeden stlpec typu TIME a cas v nom je v nasledujucom tvare HH:mm:ss.

Normalne ho vkladam cez input typu time , kde si vyklikam cas HH:mm a do databazy vkladam cez insert $_POST[cas] s polu s inymi stlpcami... Ale v databaze sa uklada ako HH:mm:ss

V aplikaci mam taku funkciu, ze nemusi pouzivatel vyklikavat vsetky moznosti, ale pomocou jedneho kliku vlozi to iste co naposledy...

Takze ja si selectnem cely ten riadok a insertnem vsetky parametre do db. Lenze tu nastava problem s tym casom.

Po selecte mam $vysledok = mysqli_fetch_assoc($vys);

a ked si vypisem echo $vysledok[cas]; tak mi vypise napr. 21:00:00

Insert pise error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':00:00,'1','2015-05-02')' at line 1

Toto  ':00:00' by mal byt ten cas.

Ale neviem preco to pise takto :00:00

Malo by to vyt 20:00:00. Kde je tych 21?

Ked si ten Insert vlozim v aplikaci v PC heidiSQL, tam to ide dobre.

Ale v PHP to nefunguje.

Neviete kde moze byt chyba?

Dakujem

Nahlásit jako SPAM
IP: 178.143.123.–
Kit+15
Guru
2. 5. 2015   #2
-
0
-

#1 Peter125
Asi jsi zapomněl na apostrofy. Tohle mi funguje: 

INSERT INTO udalost VALUES ('21:00');

V PHP to pak vypadá následovně: 

<?php
$cas = $_POST['cas'];
$stmt = mysqli_prepare('INSERT INTO udalost VALUES (?)');
mysqli_stmt_bind_param($stmt, 's', $cas);
mysqli_stmt_execute($stmt);

Ještě lépe to však vypadá objektově: 

<?php
$cas = $_POST['cas'];
$stmt = $mysqli->prepare('INSERT INTO udalost VALUES (?)');
$stmt->bind_param('s', $cas);
$stmt->execute();

A ještě lépe v PDO: 

<?php
$stmt = $pdo->prepare('INSERT INTO udalost VALUES (?)');
$stmt->execute(array($_POST['cas']));
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Peter1250
Newbie
3. 5. 2015   #3
-
0
-

Insert vyzrá takto:

$sql=mysqli_query($link, "INSERT INTO Tabulka(cas, id, date) VALUES ($x[cas],'$_SESSION[id]','$date')");
        $result=mysqli_query($link,$sql);    

Takze tie apostrofy sem $x[cas] nedavam. S tym to nejde.

Nefunguje ani to, ked si dam napr do premennej cas $cas='20:10:00'; a v inserte to dam takto:

$sql=mysqli_query($link, "INSERT INTO Tabulka(cas, id, date) VALUES ($cas,'$_SESSION[id]','$date')");

Toto vypise tu istu chybu

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':10:00,'1','2015-05-03')' at line 1

Nahlásit jako SPAM
IP: 178.143.123.–
Kit+15
Guru
3. 5. 2015   #4
-
0
-

#3 Peter125
Stále ti tam chybí ty apostrofy a stále tam máš SQL injection.

Proč nemáš datum a čas v jednom sloupci?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Peter1250
Newbie
3. 5. 2015   #5
-
0
-

Už to ide, dal som tam '$x[cas]', ale je zaujmave , ze ostatne hodnoty v tom inserte nemám v uvodzovkach, iba tie posledne 3.

Dakujem za pomoc ;)

Nahlásit jako SPAM
IP: 178.143.122.–
Kit+15
Guru
3. 5. 2015   #6
-
0
-

#5 Peter125
Však čísla do apostrofů nepatří.

Teď ještě spravit to SQL injection.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:4d5:f...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Peter1250
Newbie
4. 5. 2015   #7
-
0
-

Ten sql injection sa osotruje len ked pouzivatel nieco zadava do inputu, nie?

Toto sa to len selectuje z db a vklada spät.

Alebo sa mylim?

Nahlásit jako SPAM
IP: 178.143.97.–
Kit+15
Guru
4. 5. 2015   #8
-
0
-

#7 Peter125
V tom případě nedělej SELECT a INSERT jako dva dotazy, ale jako jeden INSERT se SELECTem uvnitř. Bude to rychlejší a spolehlivější.

V původním příspěvku máš $_POST[cas], což nejsou data z databáze, ale od uživatele, která je nutné ošetřit.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 4 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ý