Probleme cautare in baza de date cu PDO
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
cadou
- Mesaje:328
Probleme cautare in baza de date cu PDO
inainte de a utiliza PDO acest cod mergea perfect, acum daca scriu un nume valid intreg nu il afiseaza. daca scriu doar primele 2 litere din el, afiseaza.
Cod: Selectaţi tot
<?php include('conectare.php');
if($_POST)
{
$name = $_POST['searchword'];
$searchname = strtolower($name);
$searchresult="SELECT * from `membri` WHERE `nume` like '%$searchname%' ORDER BY RAND() LIMIT 8";
$searchnumberresult = $dbh->query($searchresult);
$xxxxxx = $searchnumberresult->fetch(PDO::FETCH_NUM);
if($xxxxxx != true)
{ ?>
<div class="display_box" align="left" style="color:red;">
<center>
Fara rezultate. <br>
<b>Sfat: Scrie numele de utilizator sau orasul corect!</b>
</center>
</div>
<?php }
else if($xxxxxx > 0){
while($search = $searchnumberresult->fetch(PDO::FETCH_ASSOC))
{
$nume=$search['nume'];
$b_nume='<b>'.$searchname.'</b>';
$final_nume = str_ireplace($searchname, $b_nume, $nume);
?>
<style type="text/css">
<!--
a.rezcautare {text-decoration:none;}
-->
</style>
<a class="rezcautare" href="/<?php echo $search['nume']; ?>.php">
<div class="display_box" align="left">
<img src="/users/poza-profil/<?php echo $search['id']; ?>.jpg" style="width:50px; height:50px; float:left; margin-right:6px;" /><span class="name"><?php echo $final_nume; ?></span> <br/><?php echo $search['oras']; ?><br/>
</div>
</a>
<?php } } } ?>
Exemplu:
Daca scriu ad -> afiseaza tot ce gaseste cu ad
Daca scriu Adr -> nu mai afiseaza nimic, desi exista ceva in baza de date
Daca scriu tot cuvantul Adrian -> nu mai afiseaza nimic, desi exista ceva in baza de date
MarPlo
Mesaje:4343
Salut
Nu stiu de ce pt 2 litere functioneaza, dar pentru mai mult nu. Oricum, e gresita verificarea "$xxxxxx > 0" unde $xxxxxx e rezultatul dat de fetch(PDO::FETCH_NUM). Aceasta functie returneaza un array, sau false.
Mai bine verifici daca sunt coloane in rezultat, cu columnCount().
Verificarea ar trebui asa:
Cod: Selectaţi tot
$xxxxxx = $searchnumberresult->columnCount();
if($xxxxxx == 0) {
// no results
}
else {
// parcurge rezultatul
while($search = $searchnumberresult->fetch(PDO::FETCH_ASSOC)) {
// preia datele din fiecare rand
}
}
Sau poti incerca sa adaptezi acest model:
Cod: Selectaţi tot
$nores = '<div class="display_box" align="left" style="color:red;"><center>
Fara rezultate. <br>
<b>Sfat: Scrie numele de utilizator sau orasul corect!</b>
</center></div>';
$sql="SELECT * from `membri` WHERE `nume` like '%". addslashes($searchname) ."%' ORDER BY RAND() LIMIT 8";
$sqlre = $dbh->query($sql);
if($sqlre !== false) {
// daca sunt coloane rezultate
if($sqlre->columnCount() > 0) {
// Se parcurg datele si le afiseaza
while($row = $sqlre->fetch(PDO::FETCH_ASSOC)) {
$nume = $row['nume'];
$b_nume='<b>'.$searchname.'</b>';
$final_nume = str_ireplace($searchname, $b_nume, $nume);
// ... Restul codului
}
}
else echo $nores;
}
else echo $nores;
cadou
Mesaje:328
Pffff tot nu merge
la rezultate imi apar, dar cand nu am rezultate nu apare mesajul acela ca nu sau gasit rezultate
Cod: Selectaţi tot
<?php include('conectare.php');
if($_POST)
{
$name = $_POST['searchword'];
$searchname = strtolower($name);
$searchnumberresult = $dbh->query("SELECT * from `membri` WHERE `nume` like '%$searchname%' ORDER BY RAND() LIMIT 8");
$xxxxxx = $searchnumberresult->columnCount();
if($xxxxxx > 0)
{
while($search = $searchnumberresult->fetch(PDO::FETCH_ASSOC))
{
$nume=ucwords($search['nume']);
$b_nume='<b>'.ucwords($searchname).'</b>';
$final_nume = str_ireplace($searchname, $b_nume, $nume);
?>
<style type="text/css">
<!--
a.rezcautare {text-decoration:none;}
-->
</style>
<a class="rezcautare" href="/<?php echo $search['nume']; ?>.php">
<div class="display_box" align="left">
<img src="/users/poza-profil/<?php echo $search['id']; ?>.jpg" style="width:50px; height:50px; float:left; margin-right:6px;" />
<span class="name"><?php echo "$final_nume<br> Stare: $search[stare], Interes: $search[interes]"; ?></span>
<br/>
<?php echo "$search[oras] - $search[tara]"; ?><br/>
</div>
</a>
<?php } }
else {
?>
<div class="display_box" align="left" style="color:red;">
<center>
Fara rezultate. <br>
<b>Sfat: Scrie numele de utilizator sau orasul corect!</b>
</center>
</div>
<?php } } ?>
MarPlo
Mesaje:4343
Nu stiu, verifica ce valoare are $xxxxxx, cu:
cadou
Mesaje:328
Imi afiseaza mereu int(28) indiferent daca am rezultate sau nu
P.S Am rezolvat-o , cred, am mai adaugat ceva
Cod: Selectaţi tot
$name = $_POST['searchword'];
$searchname = strtolower($name);
$searchnumberresult = $dbh->query("SELECT * from `membri` WHERE `nume` like '%$searchname%' ORDER BY RAND() LIMIT 8");
$r = $dbh->query("SELECT COUNT(*) FROM `membri` WHERE `nume` like '%$searchname%' ORDER BY RAND() LIMIT 8")->fetch(PDO::FETCH_NUM);
$numrows = $r[0];
if($numrows > 0)
{
// afiseaza rezultatele
}
else
{
// mesajul de eroare
}
Subiecte similare
- Adaugare orar zilele saptamanii in baza de date
PHP - MySQL - XML
Primul mesaj
Salut
Am o baza de date cu toate locatiile
location_id | name |address |telephone | open
Si un formular prin care incarc datele in bd....
Ultimul mesaj
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...