Salutare.
Sunt nou in domeniul php si am sa va rog sa aveti rabdare cu mine.
Folosind https://marplo.net/php-mysql/php-mys ... ysqli.html am reusit sa setez un php care sa faca conectarea la o baza de date dorita de mine.
Nu stiu insa cum sa fac un fisier php care sa ceara de la user numele pe care doreste sa il caute in baza de date si apoi sa afiseze rezultatele (inclusiv restul campurilor asociate acelui nume - adica parola asociata acelui nume si id-ul numelui cautat).
As dori ca dupa accesarea numelui care va fi de forma unui link conexiunea la baza de date sa se inchida - sa nu ramana astfel foarte multe conexiune legata la baza de date ptr a pica webhostul.
Select in baza de date dupa valoare dintr-un input
-
- Mesaje:36
Select in baza de date dupa valoare dintr-un input
MarPlo
Mesaje:4343
Salut
Poti crea un formular cu un camp text in care sa fie adaugat numele.
In codul php preiei valoarea din acel camp text si faci select cu el.
- Mai vezi in lectiile de pe site cum se lucreaza cu date din formular in php, cu GET si POST; si cum se parcurg datele dintr-un Select in mysql, cu foreach(). Si poti reveni cu intrebari unde nu te descurci dupa ce mai studiezi si alte lectii /tutorialele.
Poti crea un formular cu un camp text in care sa fie adaugat numele.
In codul php preiei valoarea din acel camp text si faci select cu el.
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'root', '', 'tests');
$nume = $_POST['nume'];
$sql = "SELECT * FROM tabel WHERE nume = ". $conn->real_escape_string($nume);
// restul codului, executa interogarea, preia si afiseaza datele
}
?>
<form action="file.php" method="post">
<input type="text" name="nume" id="nume" size="50" />
<input type="submit" value="Send" />
</form>
Liaf
Mesaje:36
Srry de double post dar nu mai pot edita :
Am modificat asa si imi da urmatoarele erori:
Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'rmxrsn47_watch'@'localhost' (using password: YES) in /home/rmxrsn47/public_html/website/searchandwatch.php on line 3
Warning: mysqli::real_escape_string(): Couldn't fetch mysqli in /home/rmxrsn47/public_html/website/searchandwatch.php on line 5
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'DB NAME', 'DB USER', 'PASS');
$nume = $_POST['nume'];
$sql = "SELECT * FROM TABELUL_DIN_DB WHERE nume = ". $conn->real_escape_string($nume);
// restul codului, executa interogarea, preia si afiseaza datele
}
?>
Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'rmxrsn47_watch'@'localhost' (using password: YES) in /home/rmxrsn47/public_html/website/searchandwatch.php on line 3
Warning: mysqli::real_escape_string(): Couldn't fetch mysqli in /home/rmxrsn47/public_html/website/searchandwatch.php on line 5
MarPlo
Mesaje:4343
E gresita ordinea valorilor in functia de conectare cu mysqli.
Formula e asa:
Formula e asa:
Cod: Selectaţi tot
$conn = new mysqli('localhost', 'utilizator', 'parola', 'baza_date');
Liaf
Mesaje:36
Am incercat si asa
Unde numele de utilizator si baza de date sunt aceleasi pentru ca asa le-am creat, iar fisierul file.php la mine se numeste searchandwatch.php. De asemenea in baza de date exista un singur tabel (tabelul watch) in care sunt doua intrari numite sugestiv proba.
Cand accesez searchandwatch.php imi apare campul si butonul send. Scriu proba insa nu se intampla nimic, doar ca revine la pagina searchandwatch.php si imi arata pagina goala fara absolut nimic.
Acelasi lucru se intampla si daca pun <form></form> intr-un html separat de partea php.
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'rmxrsn47_watch', 'PAROLA', 'rmxrsn47_watch');
$nume = $_POST['nume'];
$sql = "SELECT * FROM watch WHERE nume = ". $conn->real_escape_string($nume);
// restul codului, executa interogarea, preia si afiseaza datele
}
?>
<form action="searchandwatch.php" method="post">
<input type="text" name="nume" id="nume" size="50" />
<input type="submit" value="Send" />
</form>
Cand accesez searchandwatch.php imi apare campul si butonul send. Scriu proba insa nu se intampla nimic, doar ca revine la pagina searchandwatch.php si imi arata pagina goala fara absolut nimic.
Acelasi lucru se intampla si daca pun <form></form> intr-un html separat de partea php.
MarPlo
Mesaje:4343
Unde este acest comentariu in cod, ai adaugat ceva?
Daca nu, atunci e normal sa nu afiseze ceva fiindca nu ai dat sa afiseze (cu echo sau print).
Uite in lectia de la pagina: https://marplo.net/php-mysql/php-mys ... er-by.html cum se parcurg si se afiseaza datele dintr-o Interogare Select. Si mai poti vedea si prin celelalte lectii /tutoriale, daca vrei sa inveti.
Cod: Selectaţi tot
// restul codului, executa interogarea, preia si afiseaza datele
Uite in lectia de la pagina: https://marplo.net/php-mysql/php-mys ... er-by.html cum se parcurg si se afiseaza datele dintr-o Interogare Select. Si mai poti vedea si prin celelalte lectii /tutoriale, daca vrei sa inveti.
Liaf
Mesaje:36
Am urmat ceea ce am inteles eu in acel tutorial prezentat si am ajuns la acest searchandwatch.php
Pagina html ce contine:
Atunci cand scriu in campul de cautare din pagina html "proba" si dau search php-ul imi da ca raspuns 0 rezultate desi eu am creat in tabelul watch din baza de date 2 linii numite proba.
Daca accesez direct pagina php imi da urmatoarea eroare:
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'rmxrsn47_watch', 'PASS', 'rmxrsn47_watch');
$nume = $_POST['nume'];
$sql = "SELECT * FROM watch WHERE nume = ". $conn->real_escape_string($nume);
// 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 /> nume: '. $row['nume']. ' - an: '. $row['an']. ' - gen: '. $row['gen']. ' - link: '. $row['link'];
}
}
else {
echo '0 rezultate';
}
}
$conn->close();
?>
Cod: Selectaţi tot
<form action="searchandwatch.php" method="post">
<input type="text" name="nume" id="nume" size="50" />
<input type="submit" value="Send" />
</form>
Daca accesez direct pagina php imi da urmatoarea eroare:
Cod: Selectaţi tot
Fatal error: Call to a member function close() on a non-object in /home/rmxrsn47/public_html/website/searchandwatch.php on line 22
MarPlo
Mesaje:4343
Eroarea apare fiindca "$conn = ..." e in cadrul lui if(), iar $conn->close(); e adaugat in afara conditiei acelui if() care verifica daca sunt date trimise din formular.
Ar trebui asa:
In rest, nu stiu ce coloane si randuri cu date ai in baza de date.
Ar trebui asa:
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'rmxrsn47_watch', 'PASS', 'rmxrsn47_watch');
// ...
// daca $result contine cel putin un rand
if ($result->num_rows > 0) {
// ...
}
else {
echo '0 rezultate';
}
$conn->close();
}
?>
Liaf
Mesaje:36
Mersi foarte mult de ajutor. Vreau sa stii ca apreciez foarte mult faptul ca iti dedici timp din viata ta pentru niste necunoscuti.
Am facut exact asa cum spui tu.
Baza de date arata in felul urmator : s16.postimg.org/oq4kgv1ad/baza_1.png
Tabelul watch din baza de date arata in felul urmator: postimg.org/image/sht0re8p3/
Php-ul meu final arata in felul urmator:
Acum cand fac cautare dupa proba (sau orice alt cuvant) imi spune 0 rezultate desi in tabel se vede ca am 2 linii numite sugestiv proba.
Daca caut nume atunci rezultatul care se deschide in php este exact acesta:
Nu vad ce este gresit de orice caut nu imi intoarce nici un rezultat insa pentru nume imi intoarce 2 linii total aiurea.
Am facut exact asa cum spui tu.
Baza de date arata in felul urmator : s16.postimg.org/oq4kgv1ad/baza_1.png
Tabelul watch din baza de date arata in felul urmator: postimg.org/image/sht0re8p3/
Php-ul meu final arata in felul urmator:
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'rmxrsn47_watch', 'PROBA', 'rmxrsn47_watch');
$nume = $_POST['nume'];
$sql = "SELECT * FROM watch WHERE nume = ". $conn->real_escape_string($nume);
// 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 /> nume: '. $row['nume']. ' - an: '. $row['an']. ' - gen: '. $row['gen']. ' - link: '. $row['link'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
}
?>
Daca caut nume atunci rezultatul care se deschide in php este exact acesta:
Cod: Selectaţi tot
nume: - an: - gen: - link:
nume: - an: - gen: - link:
MarPlo
Mesaje:4343
1. Coloana "Nume" fiind de tip sir (string), valoarea pentru ea trebuie transmisa intre ghilimele.
Adica asa (aici am gresit eu cand am scris codul mai sus):
2. In tabel ai scris numele coloanelor cu litera mare la inceput (Nume, An, ...), dar in php ai cu litera mica tot cuvantul ($row['nume']). Ar trebui sa fie la fel, cel mai bine sa folosesti doar cu litere mici si la numele din mysql (nume, an, gen, link).
- Codul functional va fi asa:
Adica asa (aici am gresit eu cand am scris codul mai sus):
Cod: Selectaţi tot
$sql = "SELECT * FROM nume_tabel WHERE nume = '". $conn->real_escape_string($nume) ."'";
- Codul functional va fi asa:
Cod: Selectaţi tot
<?php
if(isset($_POST['nume'])) {
$conn = new mysqli('localhost', 'rmxrsn47_watch', 'PROBA', 'rmxrsn47_watch');
$nume = $_POST['nume'];
$sql = "SELECT * FROM watch WHERE nume = '". $conn->real_escape_string($nume) ."'";
// executa interogarea si retine datele returnate
$result = $conn->query($sql);
// daca este eroare de mysql, intrerupe codul si arata eroarea
if(!$result) {
exit('Eroare mysql: '. $conn->error);
}
// 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 /> nume: '. $row['Nume']. ' - an: '. $row['an']. ' - gen: '. $row['gen']. ' - link: '. $row['link'];
}
}
else {
echo '0 rezultate';
}
$conn->close();
}
?>
Liaf
Mesaje:36
Merge acum de minune. Datele sunt afisate corect insa am tot cautat pe site si nu am gasit cum pot afisa datele pe care mi le da php-ul intr-o pagina html astfel incat sa se pastreze tematica site-ului.
- Exista un astfel de tutorial aici ?
Si inca ceva. De ce forma ar trb sa fie o coloana astfel incat la cautare daca nu este intregul nume din coloana si doar o parte scrisa sa se afiseze si linia in cauza din coloana ?
- Exista un astfel de tutorial aici ?
Si inca ceva. De ce forma ar trb sa fie o coloana astfel incat la cautare daca nu este intregul nume din coloana si doar o parte scrisa sa se afiseze si linia in cauza din coloana ?
MarPlo
Mesaje:4343
In fisierul php poti adauga cod php, astfel adaugi datele de la php intre tag-uri html. Dar despre asta poate ar trebui sa deschizi un alt subiect, cu ce ai incercat sa faci si unde nu te descurci, caci nu are legatura cu acesta.
Tipul coloanei se pune in functie de tipul de date care vrei sa fie in ea: VARCHAR pt text, INT pt numere intregi, DATETIME pt data si ora. Mai sunt si altele, le gasesti in primele lectii despre MySQLi.
Daca vrei sa faci cautare in coloana dupa un text partial, vezi explicatiile si script-ul de la tutorialul: Cautare in tabel MySQL.
Tipul coloanei se pune in functie de tipul de date care vrei sa fie in ea: VARCHAR pt text, INT pt numere intregi, DATETIME pt data si ora. Mai sunt si altele, le gasesti in primele lectii despre MySQLi.
Daca vrei sa faci cautare in coloana dupa un text partial, vezi explicatiile si script-ul de la tutorialul: Cautare in tabel MySQL.
Subiecte similare
- Adaugare orar zilele saptamanii in baza de date
PHP - MySQL - XML Primul mesaj
SalutUltimul mesaj
Am o baza de date cu toate locatiile
location_id | name |address |telephone | open
Si un formular prin care incarc datele in bd....
Treaba cu adaugare json in mysql e simpla, se rezuma la adaugarea unui sir care contine ghilimele duble.
Problema la tine e ca acele ghilimele sunt... - Afisare numar cel mai mare dintr o coloana
PHP - MySQL - XML Primul mesaj
Bună MarploUltimul mesaj
Vreau să extrag din coloan pret cel mai mare numar ca de exemplu 4444.
Mie imi afisează 54 în loc de 4444, dacă în loc de 4444 modific...
Am schimbat `pret` varchar(20) DEFAULT NULL in `pret` int(11) NOT NULL ca la tine si merge.
Multumesc - Setare valori din array in select tag
JavaScript - jQuery - Ajax Primul mesaj
Salut am un array cu orele de functionareUltimul mesaj
$data = array (
'0400' => '04:00 AM',
'0430' => '04:30 AM',
'0500' => '05:00 AM',
'0530'...
Testeaza urmatorul cod.
Daca ceva mai trebuie schimbat, incearca si tu sa modifici dupa cum stii, in functie de ce vrei sa obtii.
Open:...