Problem z edytowaniem rekordów w bazie mysql z wykorzystaniem mysqli

0

Dzien dobry.
Próbuje zrobić swój pierwszy rozbudowany projekt. Wszystko szło okey do momentu w którym chciałbym edytować pojedynczy rekord w bazie. Wstawie kod będzie łatwiej wytłumaczyć. Wyskakuje mi wiadomość z catcha mimo tego że żadne throw nie zostaje uruchomiony a sama edycja pominięta jeżeli ktoś by mi wytłumaczył gdzie robię błąd byłbym wdzięczny.

   <?php

   require_once "TryToConnect.php"; // Jest tam funkcja magicConnect 
   session_start();
  

    try
   {

   $connection = new magicConnect;
   $resultOfMagicConnect=$connection->tryToConnect();

   if($resultOfMagicConnect==false)
   {
      echo "Pierwszy throw"; 
       throw new Exception(mysqli_connect_errno());  
   }
   
   $comic_id =  $_GET["id"];

    $rowResults = $resultOfMagicConnect->query("SELECT * from registration where id_registration = $comic_id"); // Wyswietla dane w formularzu
    
    $results=$rowResults->fetch_assoc();

    $editCategory =$results["category"];
    $editPriority = $results["priority"];
    $editPayment = $results['payment'];



           if(!$rowResults)
           {
            echo "Drugi throw";
               throw new Exception($connect->error); 
           }
           
               if($rowResults)
               {
                
          

                if(isset($_POST['yourTitle']))
                {
                    $newTitle =$_POST['yourTitle'];
                   
                    $updateQuery=("UPDATE registration SET title ='$newTitle' WHERE id_registration = '$comic_id' ");
                    echo "Drugi "; // Kod działa tylko do tego momentu
                    $edit=mysqli_query($resultOfMagicConnect, $updateQuery);
                    
                    echo "Drugi ";
                    if(mysqli_query($resultOfMagicConnect, $updateQuery)) // Nie wchodzi do tego ifa
                    {
                        echo "Drugi ";
                        echo "Records were updated successfully.";
                    }
                    echo "Drugi "; // te echo też omija




                  }
            

                }
        
       }
   
         
               
           catch(Exception $e)
           {
               echo '"Błąd serwera! Spróbuj innym razem."'; // Wyswietla sie htrow ppo wszystkim
           }

           ?>

Funkcja magic Connect

<?php

class magicConnect
{
    public function tryToConnect()
    {
    $result = new mysqli('localhost','root','','systemzglaszaniaawarii');
    if ($result->connect_errno ===0)
    {
        return $result;
    }
    else
    {
        return false;
    }
}
}

?>

Z góry dziękuję za pomoc i pozdrawiam

0

Znalazłem błąd zmienną $comic_id musiałem skonwertować na inta. Wie ktoś może jak skonwertować zmienną żeby nie straciła wartości? w sensie wysłałam numer rekordu przez geta. W zmiennej tej jest 32 po konwersji mam zero.

1

Normalnie intval powinno a raczej musi działać dodatkowo powinieneś sprawdzać czy dane które chcesz pobierać przez $_GET i $_POST są przesyłane wykorzystując funkcję isset.

0

Dziękuję za wskazówkę. Zle zabrałem się za konwersję. Pozdrawiam

0

@Misza_71: Sformatuj ten kod jakimś autoformatterem, bo się nie da czytać.

2

Nie zostawiaj tego w taki sposób !!!

screenshot-20220715114255.png

Łącznie zapytania SQL jako łańcucha znaków do którego wklejamy wprost zawartość zmiennej GET pozwala na atak typu SQL Injection.
Wystarczy, że wywołam Twój skrypt z odpowiednio spreparowanym parametrem id i można np. wykasować Ci bazę danych.
Zanim zmienną wstawisz do ciągu SQL musisz ją przynajmniej "wyescapować"" za pomocą funkcji: https://www.php.net/manual/en/mysqli.real-escape-string.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1