Diskuze: Update MYSQL nefuguje
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, na řádku
$update = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'";
používáš proměnou $idRequest, která v tu chvíli není definovaná, protože její definice je v if bloku a ty se nyní nacházíš v jeho else bloku, takže se nikdy nemůže stát, že by byli vykonány oba tyto řádky.
A i kdyby jsi tento řádek vyndal z té podmínky, tak to nebude fungovat, protože tento kód nyní nemá ponětí o tom, kterou novinku chceš upravovat. To $_REQUEST['id'] byl předpokládám GET parametr, ale ten jsi nastavením action="edit.php" smazal.
POZOR, TVŮJ KÓD OBSAHUJE ZRANITELNOST SQL INJECTION!! Vždy používej prepared statement! Doporučuji místo mysqli používat raději PDO.
Btw. Odesílací tlačítko není sumbit, ale submit
Doporucuji si vzdy vypsat sql dotaz na obrazovku, kdyz ti neco nejde a vsechny promenne, ktere se tam vyskytuji. Casto je tam prave chyba v obsahu promenne, ze tam neni, co ocekavas.
$update = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'";
var_dump ($update);
V tom kodu mas mnoho takovych zajimavych, rekneme, chyb
//$edit_Author = $_REQUEST['edit_Author'];
$edit_Author = isset($_REQUEST['edit_Author']) ? $_REQUEST['edit_Author'] : '';
A kdyz by to nebylo vubec nastaveno, tak do sql dotazu posilas prazdna data, to take neosetrujes, neptas se, zda to neni prazdne a mohlo by se ti stat, ze ti to ulozi do databaze prazdne radky. Ty mozna selectem jidne sice nevyberes, takze o tom nevis, ale v db jsou a zabiraji misto.
$conn = new mysqli($server, $username, $password, $database);
$link = mysqli_connect("localhost", "root", "Heslo", "web");
$vysledek = $conn->query($sql);
mysqli_query($link, $update))
$update = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'";
mysqli_query($link, $update) // ok
echo "ERROR: $sql // vzdyt $sql vubez neexistuje
if(isset($_REQUEST['id'])) {
$idRequest = $_REQUEST['id'];
...
} else
...
// $idRequest = $_REQUEST['id']; tento radek tam nikde nemas
$update = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'";
Ja bych zacal tim, ze si sjednotim to volani sql.
// https://www.php.net/manual/en/mysqli.connect-error.php - a opravil bych si to podle php manualu
// https://www.php.net/manual/en/mysqli.query.php
// sql connect
$mysqli = @new mysqli($server, $username, $password, $database);
//$conn = new mysqli($server, $username, $password, $database);
if ($mysqli->connect_error) {
die('Connect Error: ' . $mysqli->connect_error); // kdyz selze pripojeni k db, vypis chybu; die zastavi program
}
// sql query
function sql($query='', $line='')
{
global $mysqli;
$result = $mysqli->query($query);
if(!$result)
{
$err = "line = "$line ."<br>query = ". $query ."<br>error = ". $mysqli->error;
die($err); // kdyz dotaz selze, vypis chybu
// echo $err; // nebo chces, aby program pokracoval, tak misto die() pouzijes echo
// $result->close();
// return false;
}
//return $result;
// nebo by to slo rovnou fetchnout do array
$list = array();
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc()!==false)
{
$list[] = $row;
}
$result->close();
return $list;
}
$result->close();
return true;
}
// potom muzes spoustu radku z dalsiho kodu odstranit
//$conn = new mysqli($server, $username, $password, $database);
// if($conn->connect_error) {
// die('Chyba s připojením na server');
// } else {
// $sql = "SELECT * FROM web_Novinky WHERE id = '$idRequest'";
// $vysledek = $conn->query($sql);
// if ($vysledek->num_rows > 0) {
// while($query = $vysledek->fetch_assoc()) {
$query = "SELECT * FROM web_Novinky WHERE id = '$idRequest'";
$list = sql($query, __LINE__); // count($list) je pocet radku
foreach($list as $row) {
// $id = $row['id'];
// //Tu jsem byl uz zoufaly a udelal novy connect
// $link = mysqli_connect("localhost", "root", "Heslo", "web");
// // Check connection
// if($link === false){
// die("ERROR:" . mysqli_connect_error());
// }
// $update = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'"; // jako, muzes to nazvat $update, ale musis to dal pouzivat stejne a ne jako $sql, ja osobne davam prednost $query nebo $novinky_update
// if(mysqli_query($link, $update)){
$query = "UPDATE web_Novinky SET author = '$edit_Author' WHERE id='$idRequest'";
$result = sql($query, __LINE__);
if ($result!==false) {
// else {
// echo "ERROR: $sql. " . mysqli_error($link);
// }
Děkují, za rady. Něco jsem se i přiučil, jinak do DB se nevklada prazdny zapis. (Ošetřil jsem to cca za 1h od přidani semka.)
Zobrazeno 4 zpráv z 4.