Autor | Zpráva | ||
---|---|---|---|
neviem si poradit Profil * |
#1 · Zasláno: 1. 1. 2015, 12:16:53
Dobrý deň,
som začiatočník, čiže moja otázka možno vyznie trápne ale riešim nasledujúci problém. Pri mojej jednoduchej stránke potrebujem do databázy zapísať termín skúšky. Tabuľka vyzerá nasledovne: skuska: id_skuska (primary key) id_predmet (foreign key) datum Zapísanie predmetu mám vyriešené, problém je ale s dátumom. Chcem aby som pri tvorbe termínu skúšky vybral termín z kalendára, čiže jednoducho cez html tag <input type="date">.To by sa následne uložilo do tabuľky, na základe ktorej sa študenti budú prihlasovať na termíny. Nenapadá ma nič (keďže moje znalosti z PHP sú v plienkach) ako to spojazdniť. Viete mi poradiť? Mám to zatiaľ takto, hlási mi to chybu pri INSERT :( ... http://tinypic.com/view.php?pic=oqk1u0&s=8#.VKUsKyuG9ys |
||
lionel messi Profil |
neviem si poradit:
Vlož sem prosím normálne celý zdrojový kód (postup), klikni v prvom príspevku na upraviť a daj to sem. Uľahčíš tým ostatným hľadanie chyby. Ku kódu mám dve pripomienky: 1. Správne je if (isset($_POST['id_predmet'], $_POST['datum'])) (detail).
2. Skús v SQL dotaze vyhodiť apostrofy okolo $datum. Aký dátový typ je stĺpec datum? Vyskúšaj upraviť r. 19 takto: else {echo "Chyba". $conn->error} aby si vedel presne, aká chyba nastala (potom sem napíš, čo to vypíše). |
||
neviem si poradit Profil * |
#3 · Zasláno: 1. 1. 2015, 12:36:53 · Upravil/a: neviem si poradit
Upravovať príspevok nemôžem, nezaregistroval som sa...
Chyba ktorú vyhodí stránka je: Unknown column 'id_evidencia' in 'field list' Posielam zdrojový kód: <html> <head> <title>Zapis predmetov</title> <?php include 'moj_connect.php'; ?> </head> <body> <B>Zápis nového predmetu</B> <?php if(isset($_POST["id_predmet"]) && ($_POST["datum"])) { $id_predmet=$_POST["id_predmet"]; $datum=$_POST["datum"]; $query="INSERT INTO skuska (id_evidencia, id_predmet, datum) VALUES ( NULL , '$id_predmet','$datum')"; if($conn->query($query) === TRUE) {echo "zapisane" . $query;} else {echo "chyba" . $conn->error;} } ?> <form action="" method="post"> <select name="id_predmet"><br> <option value="" selected>vyber predmet</option> <?php $sql="select * from predmet"; $result=$conn->query($sql); if($result->num_rows > 0) { while($row=$result->fetch_assoc()) { echo '<option value="' . $row["id_predmet"] . '">' . $row["nazov"] . '</option>'; } } ?> </select> <br> <input type="date" name="datum"> <input type="submit"> </form> <p> </p> <B>Zoznam skúšok</B> <table style="width:50%" border="1"> <tr> <td>Id</td> <td>predmet</td> <td>datum</td> </tr> <?php $sql="SELECT * FROM skuska"; $result = $conn->query($sql); echo $conn->error; if($result->num_rows > 0) { while($row=$result->fetch_assoc()) { if(isset($row["id_skuska"]) && ($row["id_predmet"]) && ($row["datum"])) { $query="SELECT * FROM skuska"; echo "<tr>"; echo "<td>" . $row["id_skuska"] . "</td><td>" . $row["id_predmet"] ."</td><td>" . $row["datum"]. "</td>"; echo "</tr>"; } } } ?> </table> </body> </html> neviem si poradit: Dátový typ stĺpca dátum je: date |
||
lionel messi Profil |
neviem si poradit:
Ďakujem. Riadok 16: $query = "INSERT INTO skuska (id_skuska, id_predmet, datum) VALUES ( NULL , '$id_predmet','$datum')" Bezpečnostná poznámka: Hodilo by sa escapovať užívateľský vstup vkladaný do db. |
||
neviem si poradit Profil * |
#5 · Zasláno: 1. 1. 2015, 12:46:53
Sakra chyba nájdená presne tá evidencia :) ale v téme chcem pokračovať, prosím nemazať :P presne som vedel, že ak to tu založím chybu nájdem :D vďaka za ten $conn->error pomohlo :)
|
||
juriad Profil |
neviem si poradit:
Pokud vkládáš záznam do tabulky, nemusíš uvádět sloupce, které mají výchozí (DEFAULT) hodnotu nebo mají nastavený AUTO_INCREMENT. Stačilo by tedy jen: $query="INSERT INTO skuska (id_predmet, datum) VALUES ('$id_predmet','$datum')"; Tady se témata nemažou bez hodně dobrého důvodu (hrubé porušení pravidel či zákonů ČR). |
||
neviem si poradit Profil * |
#7 · Zasláno: 1. 1. 2015, 16:28:51
Píšem zase :) mám takýto problém:
Potrebujem si vytvoriť nasledujúcu tabuľku: Termín: id_termin (primary key) id_skuska (foreign key) id_student (foreign key). Pri vytváraní cudzích kĺúčov mi ale pri studentovi vyhodí mysql error: 16:21:46 alter table termin add constraint id_student foreign key (id_student) references student (id_student) Error Code: 1005. Can't create table 'sotak.#sql-a65_2f669' (errno: 121) 0.078 sec |
||
Alphard Profil |
#8 · Zasláno: 1. 1. 2015, 16:55:37
neviem si poradit:
„Jeden cudzí kľúč na id_student som uz vytvoril, no potrebujem to mat aj tu.“ To bude možná tím, názvy klíčů jsou globální pro celou databázi a musí být unikátní, takže přejmenovat. Jinak vysvětlení by mělo poskytnout LATEST FOREIGN KEY ERROR .
|
||
neviem si poradit Profil * |
#9 · Zasláno: 2. 1. 2015, 10:45:15
Vyšší problém vyriešený. Ďakujem. Ak by sa našla ďalšia dobrá duša, ktorá by mi pomohla s nasledovným problémom.
Mám vytvorenú nasledujúcu tabuľku: Termín: id_termin (primary key) id_skuska (foreign key) id_student (foreign key) Chcem v nej uskutočniť to, aby sa študent mohol prihlásiť na vypísaný termín skúšky. Prihlásenie funguje v pohode, mám len menší problém so zobrazením danej tabuľky. Chcem aby sa mi v tabuľke zobrazoval názov skúšky a nie jej ID. Rovnako mi zobrazovalo aj študenta, čiže nie jeho meno ale ID, no to som vyriešil pomocou nasledujúceho selectu: $sql="SELECT termin.id_termin AS 'id', id_skuska ,student.priezvisko as 'priezvisko' FROM termin INNER JOIN student ON student.id_student = termin.id_student"; Skúška: ID_skuska (primary key) ID_predmet (foreign key) A teda, ak by som sa chcel odkázať na názov predmetu, musím sa nejako ten select spraviť tak, aby sa odkázal až do tretej tabuľky (Predmet) v ktorej je už definovaný názov predmetu. Asi to je len primitívne ale nenapadá ma nič zatiaľ. Nejaké nápady? |
||
tiso Profil |
#10 · Zasláno: 2. 1. 2015, 11:00:37
SELECT termin.id_termin AS 'id', predmet.nazov, student.priezvisko as 'priezvisko' FROM termin INNER JOIN student ON student.id_student = termin.id_student INNER JOIN skuska ON skuska.ID_skuska = termin.id_skuska INNER JOIN predmet ON predmet.ID_predmet = skuska.ID_predmet Zvýraznené názvy si uprav podľa tej tabuľky predmet. |
||
neviem si poradit Profil * |
#11 · Zasláno: 2. 1. 2015, 14:56:06
Ďakujem veľmi pekne.
A snáď posledná vec, ktorá je tam asi najpotrebnejšia. Potrebujem nastaviť obmedzenie, ktoré zabráni študentovi aby sa prihlásil na skúšku, resp. predmet 2 krát (na ten istý). <B>Prihlasenie studenta na termin</B> <?php if(isset($_POST["id_skuska"]) && ($_POST["id_student"])) { $id_skuska=$_POST["id_skuska"]; $id_student=$_POST["id_student"]; $query="INSERT INTO termin (id_termin, id_skuska, id_student) VALUES ( NULL , '$id_skuska', '$id_student')"; if($conn->query($query) === TRUE) {echo "zapisane" . $query;} else {echo "Chyba". $conn->error;} } ?> <form action="" method="post"> <select name="id_skuska"><br> <option value="" selected>vyber skusku</option> <?php $sql="select * from skuska"; $result=$conn->query($sql); if($result->num_rows > 0) { while($row=$result->fetch_assoc()) { echo '<option value="' . $row["id_skuska"] . '">' . $row["id_skuska"]. '</option>'; } } ?> </select> <select name="id_student"><br> <option value="" selected>vyber studenta</option> <?php $sql="select * from student"; $result=$conn->query($sql); if($result->num_rows > 0) { while($row=$result->fetch_assoc()) { echo '<option value="' . $row["id_student"] . '">' . $row["meno"] . ' ' . $row["priezvisko"] . '</option>'; } } ?> </select> <br> <input type="submit"> </form> |
||
Fisir Profil |
#12 · Zasláno: 2. 1. 2015, 15:17:36
Reaguji na neviema si poradita:
Kontroluj, jestli už je student na zkoušce zapsaný, když ne, zapiš ho, když ano, zobraz chybovou hlášku. |
||
neviem si poradit Profil * |
#13 · Zasláno: 2. 1. 2015, 16:50:03
Vyriešené, ďakujem. Ďalej:
Aký select zvoliť aby mi pri výbere z ponuky predmetov (na stránke) v tabuľke zobrazilo len tých študentov, ktorý sú prihlásený na daný predmet (vybraný z ponuky). Tj z tabuľky: Evidencia: id_evidencia id_student id_predmet Mám vyhľadať len tých študentov, ktorý majú zapísaný daný predmet. Ďakujem za radu. |
||
neviem si poradit Profil * |
#14 · Zasláno: 3. 1. 2015, 14:17:33
Vyriešil som to takto:
select * from evidencia where id_predmet = {$_POST['id_predmet']} SELECT evidencia.id_evidencia AS 'id', student.meno AS 'meno', student.priezvisko AS 'priezvisko', predmet.nazov AS 'predmet' FROM evidencia where id_predmet = {$_POST['id_predmet']} INNER JOIN student ON student.id_student = evidencia.id_student INNER JOIN predmet ON predmet.id_predmet = evidencia.id_predmet |
||
juriad Profil |
#15 · Zasláno: 3. 1. 2015, 14:24:51
neviem si poradit:
WHERE musí být až na konci za všemi JOINy. |
||
neviem si poradit Profil * |
#16 · Zasláno: 3. 1. 2015, 14:27:07 · Upravil/a: neviem si poradit
Skúšal som to aj takto, chyba ktorú mi hlási potom je:
Column 'id_predmet' in where clause is ambiguous... neviem si poradit: <?php if(isset($_POST["id_predmet"])) { $id_predmet=$_POST["id_predmet"]; $sql="SELECT evidencia.id_evidencia AS 'id', student.meno AS 'meno', student.priezvisko AS 'priezvisko', predmet.nazov AS 'predmet' FROM evidencia INNER JOIN student ON student.id_student = evidencia.id_student INNER JOIN predmet ON predmet.id_predmet = evidencia.id_predmet where id_predmet = {$_POST['id_predmet']}"; $result = $conn->query($sql); echo $conn->error; } if($result->num_rows > 0) if(isset($_POST["id_predmet"])) { while($row=$result->fetch_assoc()) { if(isset($row["id"]) && ($row["meno"])&& ($row["priezvisko"])&& ($row["predmet"])) { $query="select * from evidencia where id_predmet = {$_POST['id_predmet']}"; echo "<tr>"; echo "<td>" . $row["id"] . "</td><td>" . $row["meno"] . "</td><td>" . $row["priezvisko"] . "</td><td>" . $row["predmet"] . "</td>"; echo "</tr>"; } } } ?> |
||
juriad Profil |
#17 · Zasláno: 3. 1. 2015, 14:45:04
neviem si poradit:
sloupce id_predmet máš v několika tabulkách, musíš uvést kvalifikovaný název:
WHERE predmet.id_predmet = ... |
||
neviem si poradit Profil * |
#18 · Zasláno: 3. 1. 2015, 15:49:57
Tak keď som to mal bez toho dlhého selectu, teda len
select * from evidencia where id_predmet = {$_POST['id_predmet']} šlo to bez problémov. Zmenil som to ako si poradil. Teraz je to síce bez erroru, ale tabuľka nevypíše žiadne dáta.
|
||
juriad Profil |
#19 · Zasláno: 4. 1. 2015, 13:16:51
neviem si poradit:
Ta chybová hláška Column 'id_predmet' in where clause is ambiguous... řiká, že sloupec 'id_predmet' v klauzuli WHERE není jednoznačný (tedy je kolize jmen sloupců - stejný sloupec existuje v několika tabulkách). Zkus položit ten dotaz v PhpMyAdminu nebo jiném nástroji, tam ho odladit a až pak jej použít v PHP. Ta podmínka na 22. řádku je nesmyslná, odstraň ji (tedy 22., 23. a 29. řádek). Zkus si vypsat počet řádků před 17. řádkem: echo $result->num_rows; V případě, že $_POST["id_predmet"] neexistuje, tak proměnná $result nebude na 17. řádku definovaná.
Co když $_POST["id_predmet"] bude obsahovat něco nepěkného, třeba "0 OR 1=1"?
|
||
Časová prodleva: 10 let
|
0