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