Executie cod php stocat in sir
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
alves
- Mesaje:13
Executie cod php stocat in sir
Salut,am si eu o problema pe care nu o pot rezolva de cateva zile.
Atunci cand bag in baza de date un cod PHP,in momentul in care preiau codul php intr-o pagina scriptul nu merge si imi arata pe pagina ceva de genul:
Cod: Selectaţi tot
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 $row['coloana1'].'
'.$row['coloana2'].' '.$row['coloana3']; echo "
Codul de care ziceam preia niste date din alt tabel si ar trebui sa le afiseze pe pagina.
Imi poate spune cineva cum pot rezolva eroarea.
MarPlo
Mesaje:4343
Salut
Codul PHP preluat din baza de date e un simplu sir de litere /numere, iar cu "echo" doar il afiseaza ca pe orice sir (fara sa execute codul).
Ca sa executi un cod stocat ca sir, se foloseste functia
eval().
Exemplu:
Cod: Selectaţi tot
<?php
// creaza un sir cu cod php, apoi il executa cu eval()
$str = '$var="valoare"; echo $var;';
eval($str); // valoare
?>
alves
Mesaje:13
Am incercat cum mi-ai zis si nu reusesc sa bag codul de la tine.Deci eu am pe pagina codul asta:
Cod: Selectaţi tot
<?php
// preia id-ul din URL (https://marplo.net/pagina.php?id=o_valoare)
if(isset($_GET['id'])) $id = strip_tags($_GET['id']); // strip_tags() sterge posibile taguri in "id"
else { header('Location: https://marplo.net'); exit; } // redirect la site daca "id" nu e in URL
// conecteaza la baza de date
$conn = new mysqli('localhost', 'root', 'pass', 'baza_date');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql SELECT (daca $id nu e numar, ci un cuvant, se pune intre ghilimele simple in SELECT, '$id')
$sql = "SELECT * FROM `nume_tabel` 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) {
// afiseaza datele din fiecare rand din $result
while($row = $result->fetch_assoc()) {
echo $row['coloana1']. ' - '. $row['coloana2']. ' - '. $row['coloana3'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
?>
Iar in Baza de Date codul asta:
Cod: Selectaţi tot
<?php
// conecteaza la baza de date "tests"
$conn = new mysqli('localhost', 'root', 'pass', 'baza_date');
// verifica conexiunea
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// interogare sql SELECT
$sql = "SELECT `coloana1`, `coloana2`, `coloana3` FROM `numetabel`";
// 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 '<br /> id: '. $row['coloana1']. ' - '. $row['coloana2']. ' - '. $row['coloana3'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
?>
Unde ar trebui sa pun codul de la tine?
MarPlo
Mesaje:4343
Nu am folosit si nu folosesc eval(), stiu doar ca executa cod stocat sub forma de sir.
In loc de
echo $row['coloana']; se aplica
eval($row['coloana']); , unde 'coloana' e cea in care e stocat codul php.
Dar la ce cod php ai stocat in baza de date, nu stiu daca functioneaza.
Mai indicat e sa fie codul in fisiere php pe server si sa-l incluzi /executi cu include(), dar e treaba ta.
Mai multe detalii si coduri cu eval() vezi in manualul php:
Functia eval().
alves
Mesaje:13
Multumesc pentru raspunsuri dar am rezolvat altfel.
Am creat in baza de date un tabel si pe fiecare rand am scris numele altui tabel de unde trebuia sa preia informatii.
Pe pagina php am introdus codul php cu care preiau din baza de date tabelul,apoi am creat variabile cu rezultatele.
Si la final ,pe aceiasi pagina, am bagat codul cu care preiau un rand din tabel in care are numetabel=$rezultatul codului de mai sus.
Vroiam sa fac prea multe pagini pentru a pune fiecare pagina pe server .Acum preia informatiile din baza de date si creaza pagina cu id=randul din tabel.