Autor | Zpráva | ||
---|---|---|---|
Honzik84 Profil * |
#1 · Zasláno: 11. 4. 2015, 10:45:53 · Upravil/a: Honzik84
Ahoj, potřeboval bych poradit, mám, resp. budu mít databázi lidí v sql, kde bude mít pole Den, Mesic a Rok a já bych potřeboval, jen aby mi to v daném roce vypisovalo jen lidi, kteří slaví kulatiny (5 a 0), někdo nějaký nápad? Děkuji.
pro upřesnění ,a by mi to vypisovalo jen lidi, kteří v daném roce slaví kulatiny, ale aby to vždy vypisovalo ty kulatiny (to je i příští rok .....) |
||
juriad Profil |
#2 · Zasláno: 11. 4. 2015, 10:50:10
Honzik84:
Co znamená v daném roce? Jako že v období od 1.1.2015 do 31.12.2015 budou mít oslavu kulatých narozenin? Jakmile budeš vědět, kolik jim bylo/je/bude (viz výše), kulaté poznáš podle zbytku po dělení 5: WHERE MOD(vek, 5) = 0 |
||
juriad Profil |
Takže to budou lidé, kterým bude 31.12. kulatý počet let.
Věk tedy bude: YEAR(NOW()) - YEAR(narozeni) Pro cachování dotazů je vhodnější tu první část ( YEAR(NOW()) ) vypočítat v PHP.
|
||
Honzik84 Profil * |
#4 · Zasláno: 11. 4. 2015, 12:57:31
To je přesně to co jsem potřeboval, velice děkuji.
|
||
Honzik84 Profil * |
#5 · Zasláno: 11. 4. 2015, 19:25:04
Ještě jednu věc, jak to udělat
Protože já v SQL nemám proměnnou věk, v tuhle chvíli to mám takhle <?php $srchQ = "SELECT * FROM jubilant ORDER BY Rok, Mesic DESC"; $srch = MySQL_Query($srchQ); $rows = MySQL_Num_Rows($srch); if ($rows !== 0): ?> <table width="1200px" border="1xp solid black;"> <?php for ($i=0;$i<$rows;$i++): $zaznam = MySQL_Fetch_Assoc($srch); ?> <tr><td><b><?php echo $zaznam['Jmeno'] ?> <?php echo $zaznam['Prijmeni'] ?></b></td><td><?php echo $zaznam['Den'] ?>. <?php echo $zaznam['Mesic'] ?>. <?php echo $zaznam['Rok'] ?></td><td><i><?php echo $zaznam['Odvetvi'] ?></i></td><td><?php echo $zaznam['Adresa'] ?></td><td><?php echo $zaznam['Email'] ?></td><td><?php echo $zaznam['Popis'] ?></td></tr> <?php endfor; ?> </table> <br><br> <?php endif; ?> |
||
juriad Profil |
#6 · Zasláno: 11. 4. 2015, 19:31:03
Honzik84:
Proč máš datum narození jako tři různé sloupce? Správně bys měl mIt jeden sloupec typu DATETIME. Ale budiž: $srch = mysql_query(" SELECT * FROM jubilant WHERE MOD(" . date("Y") . " - Rok, 5) = 0 ORDER BY Rok, Mesic DESC"); |
||
Honzik84 Profil * |
#7 · Zasláno: 12. 4. 2015, 12:43:08
Ahoj, nefunguje, hlásí to chybu Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /data/web/virtuals/16062/virtual/www/subdom/jubilanti/index.php on line 32
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <?php $spojenie = mysql_connect('wm38.wedos.net', 'XXX', 'XXX'); if (!$spojenie) { die('Nemozem sa pripojit na databazu: ' .mysql_error()); } mysql_query('set names utf8'); mysql_query('SET COLLATION_CONNECTION=utf8'); $vybratie = MySQL_Select_Db("d17162_jubi"); if (!$vybratie) { die('Nemozem sa spojit s databazou: ' .mysql_error()); } ?> <h1><center> Jubilanti</center> </h1> <?php $srch = mysql_query("SELECT * FROM jubilant WHERE MOD(" . date("Y") . " - Rok, 5) = 0 ORDER BY Rok, Mesic DESC"); $srch = MySQL_Query($srchQ); $rows = MySQL_Num_Rows($srch); if ($rows !== 0): ?> <table width="1200px" border="1xp solid black;"> <?php for ($i=0;$i<$rows;$i++): $zaznam = MySQL_Fetch_Assoc($srch); ?> <tr><td><b><?php echo $zaznam['Jmeno'] ?> <?php echo $zaznam['Prijmeni'] ?></b></td><td><?php echo $zaznam['Den'] ?>. <?php echo $zaznam['Mesic'] ?>. <?php echo $zaznam['Rok'] ?></td><td><i><?php echo $zaznam['Odvetvi'] ?></i></td><td><?php echo $zaznam['Adresa'] ?></td><td><?php echo $zaznam['Email'] ?></td><td><?php echo $zaznam['Popis'] ?></td></tr> <?php endfor; ?> </table> <br><br> <?php endif; ?> |
||
Keeehi Profil |
#8 · Zasláno: 12. 4. 2015, 13:26:37
Řádek 30 tam je navíc. Nemusí to s tou chybou souviset ale třeba ano.
|
||
juriad Profil |
#9 · Zasláno: 12. 4. 2015, 13:35:48
Honzik84:
Ohledně toho erroru, mě PHP (ve verzi 5.6.7) nehlásí žádnou syntaktickou chybu. |
||
Honzik84 Profil * |
#10 · Zasláno: 12. 4. 2015, 13:44:59
Super Funguje
|
||
Honzik 84 Profil * |
#11 · Zasláno: 14. 4. 2015, 13:51:39 · Upravil/a: Honzik 84
A ještě jedna věc, mám tedy nějakou funkční databázi, kde mi funguje přidávání, mazání a ještě bych chtěl vyřešit editaci, vytvořil jsem tam odkaz ve stylu
...edit.php?akce=10 , kde ID je řádek, auto increment jak to teď mám udělat? resp. jak z databáze vytáhnu jen údaje s tím jedním konkrétním ID? Uvažoval jsem že bych použil tuto konstrukci? Jestli je to teda možné. <p> Jméno: <input type="text" name="jmeno" value="<?php echo $zaznam['Prijmeni'] ?>" size="30"class="formik" /> </p> <?php $srch = mysql_query("SELECT * FROM jubilant WHERE ID = '. $_GET['akce']"); $rows = MySQL_Num_Rows($srch); if ($rows !== 0): ?> <?php for ($i=0;$i<$rows;$i++): $zaznam = MySQL_Fetch_Assoc($srch); ?> ?> <h1>Editace jubilanta</h1> <form method="post" enctype="multipart/form-data" action="odeslat2.php"> <p> Jméno: <input type="text" name="jmeno" value="<?php echo $zaznam['Prijmeni'] ?>" size="30"class="formik" /> </p> |
||
Honzik84 Profil * |
#12 · Zasláno: 14. 4. 2015, 20:51:56
Nikdo neví? Děkuji
Nebo jak udělat editaci přes ID? |
||
juriad Profil |
#13 · Zasláno: 14. 4. 2015, 20:58:26
Máš chybně ten SQL dotaz:
$srch = mysql_query("SELECT * FROM jubilant WHERE ID = ". $_GET['akce']); A nejspíš ti chybí v tom formuláři ID, abys poznal, kterého edituješ. <input type="hidden" name="akce" value="<?php echo $_GET['akce']; ?>"> |
||
Honzik 84 Profil * |
#14 · Zasláno: 15. 4. 2015, 10:18:30
Ještě dotaz k té editaci, resp. jak by měl znít ten sql dotaz, přes POST? Nějak takhle?
$query = 'UPDATE jubilant SET Jmeno = mysql_real_escape_string($_POST['jmeno']) |
||
juriad Profil |
#15 · Zasláno: 15. 4. 2015, 11:06:55
Dávej si pozor na uvozovky/apostrofy. Nezapomínej na to, že SQL dotaz je pořád jen obyčejný řetězec.
$query = "UPDATE jubilant SET Jmeno = '" . mysql_real_escape_string($_POST['jmeno']) . "' WHERE ID = " . (int) $_POST['akce']; Tu podmínku WHERE tam musíš nějakou mít, jinak bys změnil jméno každému. |
||
Honzik 84 Profil * |
#16 · Zasláno: 15. 4. 2015, 11:40:35
Tak jsem to upravil dle rady a hází mi to chybu
Parse error: syntax error, unexpected '"' in /data/web/virtuals/16062/virtual/www/subdom/jubilanti/odeslat2.php on line 18 $query = 'UPDATE jubilant SET Jmeno = '" . mysql_real_escape_string($_POST['jmeno']) . "' SET Prijmeni = '" . mysql_real_escape_string($_POST['prijmeni']) . "' SET Den = '" . mysql_real_escape_string($_POST['den']) . "' SET Mesic = '" . mysql_real_escape_string($_POST['mesic']) . "' SET Rok = '" . mysql_real_escape_string($_POST['rok']) . "' SET Odvetvi = '" . mysql_real_escape_string($_POST['odvetvi']) . "' SET Tel = '" . mysql_real_escape_string($_POST['tel']) . "' SET Email = '" . mysql_real_escape_string($_POST['email']) . "' SET Popis = '" . mysql_real_escape_string($_POST['popis']) . "' WHERE ID = '. $_POST['akce']; |
||
juriad Profil |
#17 · Zasláno: 15. 4. 2015, 11:46:06
Hm, proč to asi celé ukazuje červeně jako řetězec? Protože to celé máš v apostrofech. Já jsem záměrně použil uvozovky, protože je to zvykem a je zvykem obalovat řetězce uvnitř SQL apostrofy.
$query = "UPDATE jubilant SET Jmeno = '" . mysql_real_escape_string($_POST['jmeno']) . "' SET Prijmeni = '" . mysql_real_escape_string($_POST['prijmeni']) . "' SET Den = '" . mysql_real_escape_string($_POST['den']) . "' SET Mesic = '" . mysql_real_escape_string($_POST['mesic']) . "' SET Rok = '" . mysql_real_escape_string($_POST['rok']) . "' SET Odvetvi = '" . mysql_real_escape_string($_POST['odvetvi']) . "' SET Tel = '" . mysql_real_escape_string($_POST['tel']) . "' SET Email = '" . mysql_real_escape_string($_POST['email']) . "' SET Popis = '" . mysql_real_escape_string($_POST['popis']) . "' WHERE ID = ". $_POST['akce']; Případně to tvé s apostrofy, ale uznej sám, že se ti to nelíbí: $query = 'UPDATE jubilant SET Jmeno = \'' . mysql_real_escape_string($_POST['jmeno']) . '\' SET Prijmeni = \'' . mysql_real_escape_string($_POST['prijmeni']) . '\' SET Den = \'' . mysql_real_escape_string($_POST['den']) . '\' SET Mesic = \'' . mysql_real_escape_string($_POST['mesic']) . '\' SET Rok = \'' . mysql_real_escape_string($_POST['rok']) . '\' SET Odvetvi = \'' . mysql_real_escape_string($_POST['odvetvi']) . '\' SET Tel = \'' . mysql_real_escape_string($_POST['tel']) . '\' SET Email = \'' . mysql_real_escape_string($_POST['email']) . '\' SET Popis = \'' . mysql_real_escape_string($_POST['popis']) . '\' WHERE ID = '. $_POST['akce']; |
||
juriad Profil |
#18 · Zasláno: 15. 4. 2015, 11:50:40
juriad:
A věci, které nejsou řetězce, ale jsou to čísla (Den, Mesic, Rok) nevkládej do DB jako řetězce, ale jako čísla. A musíš se postarat o nezávadnost čísel přetypováním na čísla. |
||
Honzik 84 Profil * |
#19 · Zasláno: 15. 4. 2015, 12:05:09
Nechce mi to editovat, nevím kde je chyba:
<?php mysql_connect('wm38.wedos.net', 'xxx', 'xxx');//database connection mysql_select_db("d17162_jubi"); mysql_query('set names utf8'); $query = "UPDATE jubilant SET Jmeno = '" . mysql_real_escape_string($_POST['jmeno']) . "' SET Prijmeni = '" . mysql_real_escape_string($_POST['prijmeni']) . "' SET Den = '" . mysql_real_escape_string($_POST['den']) . "' SET Mesic = '" . mysql_real_escape_string($_POST['mesic']) . "' SET Rok = '" . mysql_real_escape_string($_POST['rok']) . "' SET Odvetvi = '" . mysql_real_escape_string($_POST['odvetvi']) . "' SET Tel = '" . mysql_real_escape_string($_POST['tel']) . "' SET Email = '" . mysql_real_escape_string($_POST['email']) . "' SET Popis = '" . mysql_real_escape_string($_POST['popis']) . "' WHERE ID = ". $_POST['akce']; mysql_query($query); ?> |
||
juriad Profil |
#20 · Zasláno: 15. 4. 2015, 12:55:29
Vypiš si ten $query (pomocí echa) a zkus ten dotaz spustit ručně v PHPMyAdminu (nebo Admineru).
|
||
Honzik 84 Profil * |
#21 · Zasláno: 15. 4. 2015, 13:48:21 · Upravil/a: Honzik 84
#1064 - 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 'SET Prijmeni = 'Tester5' SET Den = '10' SET Mesic = '10' SET Rok = '2015' SET Od' at line 1
UPDATE jubilant SET Jmeno = 'TESTovač' SET Prijmeni = 'Tester5' SET Den = '10' SET Mesic = '10' SET Rok = '2015' SET Odvetvi = 'test' SET Tel = 'test' SET Email = 'test' SET Popis = 'test test' WHERE ID = 95 Chyba objevena a napravena - Má být jen jednou set a pak mi tam chyběla čárka - již funguje $query = "UPDATE jubilant SET Jmeno = '" . mysql_real_escape_string($_POST['jmeno']) . "', Prijmeni = '" . mysql_real_escape_string($_POST['prijmeni']) . "', Den = '" . mysql_real_escape_string($_POST['den']) . "', Mesic = '" . mysql_real_escape_string($_POST['mesic']) . "', Rok = '" . mysql_real_escape_string($_POST['rok']) . "', Odvetvi = '" . mysql_real_escape_string($_POST['odvetvi']) . "', Tel = '" . mysql_real_escape_string($_POST['tel']) . "', Email = '" . mysql_real_escape_string($_POST['email']) . "', Popis = '" . mysql_real_escape_string($_POST['popis']) . "' WHERE ID = ". $_POST['akce']; |
||
Časová prodleva: 10 let
|
0