| 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: 12 let
|
|||
0