| Autor | Zpráva | ||
|---|---|---|---|
| Nuimi Profil |
#1 · Zasláno: 23. 4. 2015, 10:04:51
Nevite nekdo kde je chyba
<form class="form1" action="inf.php" method="post">
<table>
<tr>
<td>Tvé uživatelské jméno je:</td>
<td><?php echo( $_SESSION['username'])?></td>
</tr>
<tr>
<td>Upravit e-mail:</td>
<td><input type="text" placeholder="Zadej nový email" name="email_n"/></td>
</tr>
<tr>
<td>Upravit věk:</td>
<td><input type="number" placeholder="Zadej svůj věk" name="vek_n" /></td>
</tr>
<tr>
<td>Upravit datum narození:</td>
<td><input type="date" name="datum_n" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Upravit" class="button" /></td>
</tr>
</table>
</form>
<?php
$email_n = $_POST['email_n'];
$vek_n = $_POST['vek_n'];
$datum_n = $_POST['datum_n'];
if(isset($email_n))
{
$update1 = "UPDATE inf SET email= '".$email_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update1) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
} |
||
| petr 6 Profil |
#2 · Zasláno: 23. 4. 2015, 10:12:50
Pravděpodobně mimo uvedený kód. Viz http://www.it-joker.cz/Pocitace-weby/67-Nefunguje-to--aneb-jak-napsat-dotaz.html#bod5
- Co chcete, aby to dělalo? - Co to dělá ve skutečnosti? |
||
| Nuimi Profil |
#3 · Zasláno: 23. 4. 2015, 10:19:16
no nedělá to nic
a chci aby mi to updatovatlo záznamy které mám v databázi, ale jen ty které zadá |
||
| petr 6 Profil |
#4 · Zasláno: 23. 4. 2015, 10:25:41
Nuimi:
„no nedělá to nic“ Před odesláním? Po odeslání? Vypíše prázdnou stránku? Vypíše alert z else větve? Vypíše nějakou chybovou hlášku? |
||
| mimochodec Profil |
#5 · Zasláno: 23. 4. 2015, 10:31:39
Nuimi:
Nauč se základy ladění. Na klíčová místa, kde se kód nějak větví, tzn. hlavně kolem podmínek, si vkládej echo "něco" nebo echo $promenna a uvidíš, kudy kód probíhá. Uvidíš, že "nedělá to nic" není pravda. |
||
| Nuimi Profil |
#6 · Zasláno: 23. 4. 2015, 11:42:44
No ono to nic nedela ve smyslu ze to pouze refresne stranku a nic se nedeje, ale dekuju. Zkusim ty echa a uvidime
|
||
| petr 6 Profil |
#7 · Zasláno: 23. 4. 2015, 12:08:15
A máš v proměnné
$db to, co tam má být?
|
||
| Nuimi Profil |
#8 · Zasláno: 23. 4. 2015, 12:12:32
jj to mam mam ji akorat includnutou
|
||
| Nuimi Profil |
#9 · Zasláno: 23. 4. 2015, 21:02:36
Prisel jsem s inovaci update
<?php
$email_n = $_POST['email_n'];
$vek_n = $_POST['vek_n'];
$datum_n = $_POST['datum_n'];
$tvejmeno_n = $_POST['tvejmeno_n'];
$prijmeni_n = $_POST['prijmeni_n'];
if(isset($tvejmeno_n))
{
$update1 = "UPDATE inf SET tvejmeno= '". $tvejmeno_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update1) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
}
else if(isset($prijmeni_n))
{
$update2 = "UPDATE inf SET prijmeni= '". $prijmeni_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update2) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
}
else if(isset($email_n))
{
$update3 = "UPDATE inf SET email= '".$email_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update3) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
}
else if(isset($vek_n))
{
$update4 = "UPDATE inf SET vek= '". $vek_n."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update4) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
}
else if(isset($datum_n))
{
$update5 = "UPDATE inf SET datum= '". $datum_n ."' WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db -> query($update5) === TRUE)
{
echo('<script> alert ("Řádek byl upraven")</script>');
}
else
{
echo('<script> alert ("Řádek nebyl upraven")</script>');
}
}
?> |
||
| MONTYCEK Profil |
#10 · Zasláno: 23. 4. 2015, 22:19:13
Nuimi:
A to má upravit všechny řádky, tak jak jdou po sobě? |
||
| Nuimi Profil |
#11 · Zasláno: 23. 4. 2015, 22:32:40
Nn, vždy jen ten co zadáš
|
||
| juriad Profil |
Nuimi:
Uvědomuješ si, že ty else if způsobí, že se provede maximálně jeden dotaz?
Přitom to lze napsat mnohem lépe. Když pominu ty chyby jako escapování a ošetření vstupů. <?php
$sets = array();
if (isset($_POST['tvejmeno_n']) && strlen(trim($_POST['tvejmeno_n']))) {
$sets[] = "tvejmeno = '" . trim($_POST['tvejmeno_n']) . "'";
}
if (isset($_POST['prijmeni_n']) && strlen(trim($_POST['prijmeni_n']))) {
$sets[] = "prijmeni = '" . trim($_POST['prijmeni_n']) . "'";
}
if (isset($_POST['email_n']) && strlen(trim($_POST['email_n']))) {
$sets[] = "email = '" . trim($_POST['email_n']) . "'";
}
if (isset($_POST['vek_n']) && strlen(trim($_POST['vek_n']))) {
$sets[] = "vek = " . intval(trim($_POST['vek_n']));
}
if (isset($_POST['datum_n']) && strlen(trim($_POST['datum_n']))) {
$sets[] = "datum = '" . trim($_POST['datum_n']) . "'";
}
if (count($sets) == 0) {
# nic nebylo vyplněno
header("Location: index.php?msg=empty");
} else {
# tady se sestaví jeden velký UPDATE
$update = "UPDATE inf SET " . implode(', ', $sets) . " WHERE jmeno = '" . $_SESSION['username'] . "'";
if ($db->query($update) === TRUE) {
header("Location: index.php?msg=row-updated");
} else {
header("Location: index.php?msg=update-failed");
}
}Po POSTu musíš vždy přesměrovat pomocí funkce header. Zprávu si předáš parametrem, jak jsme naznačil. Tento kód je však stále chybný, protože neznám tebou použitý databázový framework. Opravena kontrola neprázdnosti. |
||
| MONTYCEK Profil |
#13 · Zasláno: 23. 4. 2015, 23:05:42
juriad:
Přesně to stejné mi došlo po tom co jsem viděl ten kód a také bych to řešil vytvořením pole těch hodnot, které je potřeba upravit. Hned se mi zdálo divné to řešit pomocí if a eleseif
|
||
| Nuimi Profil |
#14 · Zasláno: 24. 4. 2015, 06:28:33
Pomoci else if to mam proto ze chci aby se vyplnil vzdy jeden, protoze kdyz jsem to resil tak aby to bylo pro vic tak i kdyz uzivatel zadal jen jedno pole tak to updatovalo vsecha, i ty co byla prazdna
|
||
| juriad Profil |
Nuimi:
„kdyz uzivatel zadal jen jedno pole tak to updatovalo vsecha, i ty co byla prazdna“ To jsem právě vyřešil přeskládáním kódu - vygeneruje se sloupec=hodnota jen pro ty, které byly odeslány neprázdné. Měl jsem tam předtím chybu. Schválně zkus použít ten skript a za 28. řádkem si vypiš ten $update pomocí echo. A zakomentuj ty řádky 29 až 33, aby se zatím nic neprovádělo. Měl by se ti pak ukázat dotaz, který by se odeslal do databáze. A zkus psát s diakritikou. V polovině případů to neděláš. |
||
|
Časová prodleva: 11 let
|
|||
0