Autor Zpráva
neviem si poradit
Profil *
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 *
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 *
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 *
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
Čo s tým? Jeden cudzí kľúč na id_student som uz vytvoril, no potrebujem to mat aj tu.
Alphard
Profil
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 *
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";
Ako vidno, pri id_skuska som nevedel čo dať, keďže tabuľka skuska vyzerá nasledovne:
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
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 *
Ď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
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 *
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 *
Vyriešil som to takto:
select *  from evidencia where id_predmet = {$_POST['id_predmet']}
Posledný problém ktorý mám je prevod ID cisel na Meno, priezvisko. Hlási mi to syntax chybu, aký presne má byť zápis? Vie mi niekto poradiť?
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
neviem si poradit:
WHERE musí být až na konci za všemi JOINy.
neviem si poradit
Profil *
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
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 *
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
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"?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0