| Autor | Zpráva | ||
|---|---|---|---|
| table Profil * |
#1 · Zasláno: 8. 5. 2013, 21:15:09
Ahojte,
mam v db sloupec zapas, odehrano a id. odesilam do nej data pomoci formulare. Stejné id muze obsahovat nekolik radku. Nyni oc mi jde. potreboval bych aby po odeslani formulare projel skript tabulku nasel stejne id skontroloval sloupec zapas, pokud v nem budou nejake údaje pricetl k nim data z formulare, pokud zadna nebudou zapise je. do sloupce odehrano by se mel udaj vzdy prepsat. Zapisuji se do obou sloupcu jen ciselne udaje. Jelikoz o PHP toho moc nevim tak bych vás chtel poprosit jestli by nebyl nekdo tak hodny a nenapsal mi to, pokud je vubec mozne takto formular zpravovat. Dekuji vsem. |
||
| Zechy Profil |
#2 · Zasláno: 8. 5. 2013, 22:53:51
Bud můžeš nejdřív použít SQL SELECT kdy ve where zadáš podmínku, jaké ID má najít, pokud mysql_num_rows nakonec vrátí nulu, provedeš akci, kterou potřebuješ. A nebo by to měl zvládat MERGE v SQL, kterej zjistí, zda záznam již existuje a pokud ano, tak jej přepíše, pokud ne, tak jej vloží do tabulky.
|
||
| table Profil * |
#3 · Zasláno: 9. 5. 2013, 05:36:46
pro me spanelska vesnice
|
||
| table Profil * |
#4 · Zasláno: 9. 5. 2013, 09:50:26
Napsal jsem toto ale nefunguje mi to
$confid=intval($_POST['confid']);
$zap=$_POST['zap'];
$odehrano=$_POST['odehrano'];
// tu se dívám do databáze jeslti daný udaj už v databázi existuje.
$exist_zapas = mysql_result(mysql_query("SELECT COUNT(*) FROM sportsdb_teams WHERE zap='$zap' AND confid='$confid' "), 0);
//neexistuje -> potom ho vytvoříme pomocí insert
if($exist_zapas==0){
if ($zap != "zap" && $zap)
{
$import2="INSERT INTO sportsdb_teams (zap,odehrano) VALUES ('$zap', '$odehrano') WHERE confid='$confid'";
mysql_query($import2) or die(mysql_error());
}
}
//existuje -> potom ho aktualizujeme pomocí update
else {
if ($zap != "zap" && $zap )
{
$import="UPDATE sportsdb_teams SET zap=zap+'$zap',odehrano='$odehrano' WHERE confid='$confid'";
mysql_query($import) or die(mysql_error());
}
}
print "Limit zápasů v pořádku zapsán. Limit je $zap zápasů<br /><br /><a href=\"" . $_SERVER['PHP_SELF'] . "?action=mainview&conf=$confid\">Back</a>\n";Jak jsem psal jsem začátečník a ještě skoro nic neumím :D Píše mi to tuto 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 'WHERE confid='12'' at line 1 |
||
| juriad Profil |
#5 · Zasláno: 9. 5. 2013, 09:55:52
$import2="INSERT INTO sportsdb_teams (zap, odehrano, confid) VALUES ('$zap', '$odehrano', '$confid')"; |
||
| table Profil * |
#6 · Zasláno: 9. 5. 2013, 09:59:12
Děkuji za radu.
Tak už to chybu neháže ale do databáze to nic nezapíše, ikdyž to ukáže že to bylo v pořádku zapsané :-( |
||
| Joker Profil |
#7 · Zasláno: 9. 5. 2013, 10:11:00
table:
Jestli dotaz spočívá v tomhle: vložit záznam do databáze, ale pokud daný záznam (stejné IDčko) už v databázi je, tak jenom přičíst, tak k tomu slouží konstrukce INSERT … ON DUPLICATE KEY UPDATE …
Jestli dotaz spočívá v tomhle: pokud v daném sloupci je nějaká hodnota tak přičíst, pokud je NULL, vložit tam to číslo, asi bych v první řadě zvážil, jestli by nebylo lepší tomu sloupci dát NOT NULL a jako výchozí hodnotu použít 0. |
||
| table Profil * |
#8 · Zasláno: 9. 5. 2013, 10:14:43
Vyřešil jsem to takto jednoduše, nevím jestli je to tak správně ale funguje to:
<?php ob_start(); $confid=intval($_POST['confid']); $zap=$_POST['zap']; $zap2=$_POST['zap']; $odehrano=$_POST['odehrano']; $query="UPDATE sportsdb_teams SET zap = zap+'$zap',zap2 = '$zap2', odehrano = '$odehrano' WHERE confid=$confid "; $result = mysql_query($query); print "Limit zápasů v pořádku zapsán. Limit je $zap zápasů<br /><br /><a href=\"" . $_SERVER['PHP_SELF'] . "?action=mainview&conf=$confid\">Back</a>\n"; ob_end_flush(); ?> |
||
| juriad Profil |
#9 · Zasláno: 9. 5. 2013, 10:18:36
Joker:
tak k tomu slouží konstrukce INSERT … ON DUPLICATE KEY UPDATE … Jenže on z neznámého důvodu má těch řádků se stejným confid víc a tedy confid nemůže být klíč. asi bych v první řadě zvážil, jestli by nebylo lepší tomu sloupci dát NOT NULL a jako výchozí hodnotu použít 0. Ano to by bylo lepší. Vůbec nejlepší by bylo, aby table vysvětlil, co se snaží namodelovat a podle toho navrhnout lepší databázové schéma. |
||
|
Časová prodleva: 12 let
|
|||
0