Creare link-uri si Select continut cu ID din baza de date

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
davinci
Mesaje:10

Creare link-uri si Select continut cu ID din baza de date

Buna,m-am apucat sa fac un script am creat indexu si m-am lovit de o problema nu stiu cum sa fac cand dai click pe un link de pe index sa duca la "pagina.php?=id" codul indexului este asta

Cod: Selectaţi tot

<?php
// conecteaza la baza de date 
$conn = new mysqli('localhost', 'root', 'test', 'test');
// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
}

// interogare sql SELECT 
$sql = "SELECT `imagine`, `titlu` FROM `test` ORDER BY data_ad DESC LIMIT 3"; 

// executa interogarea si retine datele returnate
$result = $conn->query($sql);

// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
  // afiseaza datele din fiecare rand din $result
  while($row = $result->fetch_assoc()) {
    echo "<img style='width: 230px; height: 110px; margin-left: 5px; margin-right: 5px;' src='" . $row['imagine'] . "' alt='" . $row['titlu'] . "' />";
  }
}
else {
  echo '0 rezultate';
}

$conn->close();
?>
Ce trebuie bagat in pagina.php sa apara ce am postat la link-ul pagina.php?=id

MarPlo Mesaje:4343
Salut
Dupa cum am inteles ca vrei, iti trebuie 3 fisiere (in acelasi director):
1. conn.php - aici se creaza conexiunea la baza de date, se include in celelalte fisiere.
2. index.php - se creaza link-uri spre pagina.php
3. pagina.php - afiseaza din baza de date continutul de la id-ul transmis i

conn.php

Cod: Selectaţi tot

<?php
// conecteaza la baza de date 
$conn = new mysqli('localhost', 'root', 'test', 'test');
// verifica conexiunea
if (mysqli_connect_errno()) {
  exit('Connect failed: '. mysqli_connect_error());
} 
index.php

Cod: Selectaţi tot

include 'conn.php';

// interogare sql SELECT 
$sql = "SELECT id FROM `test` ORDER BY data_ad DESC LIMIT 4"; 

// executa interogarea si retine datele returnate
$result = $conn->query($sql);
$links = '<ul>';      // va contine lista cu link-uri

// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
  // creaza codul html cu link-uri
  while($row = $result->fetch_assoc()) {
    $links .= '<li><a href="pagina.php?id='. $row['id'] .'" title="Page '. $row['id'] .'">Pagina '. $row['id'] .'</a></li>';
  }
}
else {
  $links .= '<li>Not Link</li>';
}

$links .= '</ul>';           // inchide tagul UL
echo $links;     // afisaza link-urile
 
pagina.php

Cod: Selectaţi tot

<?php
include 'conn.php';

// daca e adresa url cu "id"
if(isset($_GET['id'])) {
  $id = intval($_GET['id']);     // sa fie sigur ca e numar intreg
 
  // preia continutul de la acel id
  $sql = "SELECT * FROM `test` WHERE id=".$id ." LIMIT 1"; 

  // executa interogarea si retine datele returnate
  $result = $conn->query($sql);

  // daca $result contine cel putin un rand
  if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
      $content =  $row['titlu'];    // "titlu" e numele coloanei cu continutul ce trebuie afisat
    }
  }
  else {
    $content = 'Not content';
  }
}
else $content = 'Not id in url';

echo $content;
 
- Daca stii html si cat de cat php, mysql; studiezi atent codul si-l intelegi. Daca nu, mai vezi prin lectiile de pe site.

davinci Mesaje:10
Mersi mult de ajutor,mai am o intrebare daca se poate...in .htaccess am pus

Cod: Selectaţi tot

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+).html$ pagina.php?id=$1 [NC,L] 
Cand intru de exemplu pe: site.com/pagina.html scrie not found.

MarPlo Mesaje:4343
Daca id-ul este un numar care vrei sa fie transmis la pagina.php, atunci adresa rescrisa ar trebui sa contina acel numar, adica asa: "site.net/12.html", iar acel $1 din codul de rescriere va fi numarul "12" din adresa.

davinci Mesaje:10
Da asa merge cu site.com/12.html ,nu pot sa fac in loc de numar sa fie titlul paginii site.com/castraveti.html ?

MarPlo Mesaje:4343
Cel mai indicat e sa folosesti si id-ul si titlu in adresa URL, fara terminatia ".html" la rescriere fiindca e degeaba si mai mult doar lungeste adresa.
Dar trebuie sa schimbi codul de creare link-uri si de rerescriere. Cand selectezi sa faci link-urile, selectezi coloana "id" si "titlu".

Cod: Selectaţi tot

$sql = "SELECT id, titlu FROM `test` ORDER BY data_ad DESC LIMIT 4";
 
Deoarece titlurile pot sa contina si spatii, atunci cand se creaza link-ul poti inlocui spatiu cu liniuta "-", folosind str_replace()
Si pehtru a fi recunoscut id-ul la rescriere, separi titlu de id prin liniuta joasa "_".

Cod: Selectaţi tot

while($row = $result->fetch_assoc()) {
  $links .= '<li><a href="'. str_replace(' ', '-', $row['titlu']) .'_'. $row['id'] .'" title="'. $row['titlu'] .'">'. $row['titlu'] .'</a></li>';
} 
Link-ul va fi de forma: "site.net/un-titlu_12" .
Iar codul de rescriere din htaccess:

Cod: Selectaţi tot

RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)_([0-9]+)$ pagina.php?id=$2 [NC,L]
Iar Select-ul de afisare continut din pagina.php se face la fel dupa id.

davinci Mesaje:10
Multumesc mult,mai ajutat foarte mult

Subiecte similare