NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: php

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Juklicekcz
Člen
Avatar
Juklicekcz:30.1.2018 16:34

Zdravím, mohli by mi prosím někdoporadit, z nějakého důvodu mi v tomto scriptu nefunguje bind_param().

<?php
include"php.php";
$pripojeni = pripojeni();
$dotaz=$pripojeni->prepare("SELECT `Nick` FROM `zadost`");
$dotaz->execute();
$dotaz->bind_result($Nick);
$dotaz->store_result();
if($dotaz->num_rows()>0){
    echo"<table>";
    echo"<tr><th>jmeno</th><th>potvrdit</th></tr>";
    while($radek=$dotaz->fetch()){
        echo"<tr><td>$Nick</td><td><form method=POST><input type=hidden name=2 value=2><input type=hidden name=nick value=$Nick><input type=submit name=odeslat value=odeslat></td></tr>";
    }
    echo"</table>";

}
if(isset($_POST["odeslat"])){
    $pripojeni=pripojeni();
    $dotaz=$pripojeni->prepare("UPDATE `uzivatel` SET `Opravneni`= ? WHERE `Nick`=$_POST[nick]");
    $dotaz->bind_param("i",$_POST["nick"]);
    $dotaz->execute();
}

?>

Jedná se o ten update, netuším proč, ale ten bind prostě vrací false.

 
Odpovědět
30.1.2018 16:34
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Juklicekcz
Jan Lupčík:30.1.2018 17:01
  1. Název tohoto vlákna je úplně od věci.
  2. Co ti nefunguje? Jak to nefunguje? Příště hoď přímo chybovou hlášku i s řádkem v kódu, děkuji. :)
  3. Říká ti něco bezpečnost v PHP? Ihned tam vidím SQL injection a nebylo by pěkné, pokud by se někdo dostal k datům z databáze. Více o bezpečnosti v PHP aplikacích: https://www.itnetwork.cz/php/bezpecnost

Teď k věci. U Opravneni máš otazník, což je správně, ale poté už vůbec nechápu, proč do WHERE dáváš napřímo ten parametr. Navíc do Opravneni dosazuješ nějaké číslo a přitom tam házíš nick uživatele.
A nakonec nechápu, kde bys měl brát to oprávnění a proč v té tabulce je tolik hidden inputů.
Být tebou zamyslel bych se nad předěláním toho kódu, protože ani já sám nevím, co chceš upravovat u oprávnění, které nikde nemáš, a k tomu důvody výše. ;)

Nahoru Odpovědět
30.1.2018 17:01
TruckersMP vývojář
Avatar
Juklicekcz
Člen
Avatar
Odpovídá na Jan Lupčík
Juklicekcz:30.1.2018 17:09

ehm, ano omylem jsem tam házel ten nick, ale měl tam být $_POST["2"], což je vlastně zbytečné a mohl jsem tam házet rovnou hodnotu "2", ale i tak to vyhazuje false.
Chybová hláška je: Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in C:\xampp\php\www\m­aturitniprace\za­dost.php:22 Stack trace: #0 {main} thrown in C:\xampp\php\www\m­aturitniprace\za­dost.php on line 22.

 
Nahoru Odpovědět
30.1.2018 17:09
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Juklicekcz
Jan Lupčík:30.1.2018 17:17

Každopádně i tak nechápu význam tohoto skriptu. Ale abych jen nehejtoval, protože nevím, k čemu to máš, řešení by mohlo vypadat asi nějak takto:

$dotaz = $pripojeni->prepare("UPDATE `uzivatel` SET `Opravneni` = ? WHERE `Nick` = ?");
$dotaz->bind_param("is", $_POST["2"], $_POST["nick"]);

bind_param() nahradí dané "otazníčky" (tj. parametry k doplnění) s danými datovými typy. To jest integer (- oprávnění) a string (- nick).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.1.2018 17:17
TruckersMP vývojář
Avatar
Juklicekcz
Člen
Avatar
Juklicekcz:30.1.2018 17:26

Ok děkuju, takhle se zdá, že to funguje, mimochodem funkce tohoto scriptu je jakože schválení uživatelských přáv, s tím že pokud se někdo zaregistruje a požaduje vyšší práva, tak se mu do jeho účtu v databázi zapíše 1, což je basic úroveň a jeho nick se zapíše do tabulky žádostí, která je vypisovaná tím scriptem výše, tento update potom tedy to opravnění setne na 2.

 
Nahoru Odpovědět
30.1.2018 17:26
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Juklicekcz
Jan Lupčík:30.1.2018 19:50

Není zač. Pokud ti moje řešení pomohlo, označ ho prosím jako řešení (ta fajfka u příspěvku).
A pro příště nezapomeň dát Odpovědět u příspěvku, aby mi přišla notifikace a zároveň aby ostatní viděli, na co jsi odpovídal. :)

Nahoru Odpovědět
30.1.2018 19:50
TruckersMP vývojář
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.