Scriere date in msql si citire

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

RaulDenis
New Member
Mesaje: 3
Membru din: Mar Noi 07, 2017 9:12 pm
Localitate: Timisoara

Scriere date in msql si citire

Mesajde RaulDenis » Mar Noi 07, 2017 9:25 pm

Buna,

Se da pagina "page.php?id=30" undeva pe pagina am un buton cu Watchlist vizibil doar cand esti logat, doresc sa pot salva ID-ul in baza de date in momentul cand apas pe buton...


Codul butonului :

Cod: Selectaţi tot

<div id="resultssidebar">
   
   
   
   <div class="addtofav" align="right">
   <p><?php
         session_start();
         if(isset($_SESSION['user']) && !empty($_SESSION['user'])){
          echo "<button class='seenbuton'>Add to Watchlist</button>";
      ?>
      <?php
         }else{
         }
      ?>
      </p>
   </div>
   
   <div class="summarytop">
   <h2>Summary</h2>
   <p><?php echo $summary; ?></p></div>
   
   <div class="trailer">
   <h2>Trailer</h2>
   <iframe width="600" height="338" src="//www.youtube.com/embed/<?php echo $youtubeID; ?>" frameborder="0" allowfullscreen></iframe>
   </div>
   
   <div class="summary">
   <h2>Storyline</h2>
   <p><?php echo $storyline; ?></p>
   </div>
   
   <div class="summary">
   <strong>Added</strong> <?php echo $date; ?>
   </div>

   
</div>


si in ultimul rand un screen :
Imagine



nevvermind
Senior Member
Mesaje: 1235
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Scriere date in msql si citire

Mesajde nevvermind » Mie Noi 08, 2017 9:55 am

La click pe buton, faci un request AJAX de tip POST, trimitand ID-ul acela ca informatie catre server.
La randul lui, serverul va avea un controller/script care mai intai va salva ID-ul in baza de date (cu "prepared statements": $pdo->prepare("INSERT INTO ... WHERE id = ?")->execute([$_POST['id]]);), apoi va trimite clientului drept raspuns un JSON precum "{success: true}".

Asta-i procedura standard.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

RaulDenis
New Member
Mesaje: 3
Membru din: Mar Noi 07, 2017 9:12 pm
Localitate: Timisoara

Re: Scriere date in msql si citire

Mesajde RaulDenis » Sâm Noi 11, 2017 1:32 am

Va multumesc mult! O sa incerc sa vad ce o sa iasa si daca nu ma descurc o sa las codul aici!

EDIT:

Din ce am invatat pana acum "AJAX" este preluarea ID-ului acum cum pot sa o implementez?!

Cod: Selectaţi tot

var full_url = document.URL; // Preia URL-ul
         var url_array = full_url.split('=') // Desparte de restul URL-ului
         var last_segment = url_array[url_array.length-1];  // Preia ultima parte (-1)
         alert( last_segment );

nevvermind
Senior Member
Mesaje: 1235
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Scriere date in msql si citire

Mesajde nevvermind » Sâm Noi 11, 2017 11:27 am

AJAX inseamna sa faci requesturi catre server. Cum o faci, e problema ta.

Niste tutoriale:
- https://www.w3schools.com/jquery/ajax_post.asp
- https://www.w3schools.com/jquery/ajax_post.asp
- http://api.jquery.com/jQuery.post/

Mie unu nu-mi place sa iau valori din URL cu JS, ci sa populez un input hidden cu valorea dorita, si o iau de acolo cu JS. Se descurca mult mai bine cu elemente HTML decat cu URL-ul:

Cod: Selectaţi tot

<input type="hidden" id="current_page_id" value="<?php echo htmlspecialchars($currentPageId, ENT_QUOTES, 'UTF-8') ?>" name="current_page_id" />


Apoi

Cod: Selectaţi tot

$('.seenbuton').click(function() {
    $.post('add_to_watchlist.php', {page_id: $('#current_page_id').val() });
});


Nu uita sa incarci libraria jQuery mai intai cu elemetul de mai jos in <head>:

Cod: Selectaţi tot

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.js"></script>


Invata jQuery pana te prinzi care-i faza cu JS. JS-ul vanilla e mai greoi, in special cand e vorba de AJAX.
Si cauta pe gugal. Sunt mult prea multe tutoriale pt AJAX.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

RaulDenis
New Member
Mesaje: 3
Membru din: Mar Noi 07, 2017 9:12 pm
Localitate: Timisoara

Re: Scriere date in msql si citire

Mesajde RaulDenis » Lun Noi 13, 2017 9:29 pm

Va multumesc pentru raspuns, insa nu am reusit nimic :((..
Am implementat codul in modul urmator:

Cod: Selectaţi tot

   <div class="addtofav" align="right">
   <p><?php
         session_start();
         if(isset($_SESSION['user']) && !empty($_SESSION['user'])){
          echo "<button class='seenbuton'>Add to Watchlist</button>";
      ?>
      <?php
         }
         else{
         }
      ?>
         
         <script>
            $('.seenbuton').click(function() {
            $.post('add_to_watchlist.php', {page_id: $('#current_page_id').val() });
               });
         </script>
            
         <input type="hidden" id="current_page_id" value="<?php echo htmlspecialchars($currentPageId, ENT_QUOTES, 'UTF-8') ?>" name="current_page_id" />
         
      </p>
   </div>


si add_to_watchlist.php

Cod: Selectaţi tot

<?php
include ('config.php');

$movieid = intval($_GET['current_page_id']);

$sql = "INSERT INTO fav (fav_id) VALUES ($movieid)";
$query = $this->db->prepare($sql);
$query->execute();
    $query->store_result();

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" ;
}

?>


nu introduce nimic in sql, si nu imi dau seama de ce.. + ca in consola nu primesc nici un feedback.

nevvermind
Senior Member
Mesaje: 1235
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Scriere date in msql si citire

Mesajde nevvermind » Lun Noi 13, 2017 10:47 pm

Faci "$.post()", dar citesti din "$_GET". :wink:
Citeste din "$_POST".

Ai inceput bine cu "$this->db->prepare($sql)", dar te incurci oleaca.
"prepare()" trimite catre serverul MySQL o interogare "tip", fara valori. Valorile le trimite intr-un al doilea request catre server, prin "execute()". Astfel eviti "sql injections", fiindca acum serverul stie clar care-i interogarea si care-s valorile. Nu trimite niciodata valorile in primul request (deci fara interpolari, concatenari etc.). Intotdeauna trimite-le in "execute()".

Dar tu trimiti o interogare "tip" cu tot cu valori, practic anuland orice avantaj pe care "prepared statements" ti le ofera:

Cod: Selectaţi tot

// gresit
$this->db->prepare("INSERT INTO fav (fav_id) VALUES (1)");

// corect 1
$statement = $this->db->prepare("INSERT INTO fav (fav_id) VALUES (?)");
$result = $statement->execute([1]);
if ($result) {
    // insert ok
}

// corect 2
$statement = $this->db->prepare("INSERT INTO fav (fav_id) VALUES (:movieId)");
$result = $statement->execute(['movieId' => 1]);
if ($result) {
    // insert ok
}


Vezi http://php.net/manual/en/pdostatement.execute.php
si http://php.net/manual/en/pdo.prepared-statements.php
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 3 vizitatori