Jump to content


inascimentojr

Member Since 04/09/2009
Offline Last Active 10/09/2009, 22:37
-----

Topics I've Started

[resolvido] Como Faço Isso?

07/09/2009, 02:03

:boxing: tenho um script em php que preciso listar os campos de uma tabela que contenham um determinado numero dentro da string. o problema e que na string pode conter mais de um numero de 0 a 9 ou seja se no campo tem "2 3 5" e eu buscar pelo numero 3 essa linha deve ser listada. o codigo atual e o seguinte:

$query .= " AND p.conteudo=" . $sql->quote  ($conteudo);

// p.conteudo é o campo da tabela qe sera pesquisado (ex '2 3 5 7') e $conteudo e o numero que esta sendo pesquisado (ex. '2')

:blink: acho que tenho que utilizar algo como strstr , porem nao consigo fazer funcionar, como ficaria no codigo acima? Por favor de um exemplo usando o codigo acima. vou postar o codigo completo abaixo para vocês entender melhor o funcionamento :

<?php
  }
  else if ( $cgi->getValue ( "op" ) == "search" )
  {
	$pt = $cgi->getValue ( "pt" );
	$pp = $cgi->getValue ( "pp" );
	$pb = $cgi->getValue ( "pb" );
	$pl = $cgi->getValue ( "pl" );
	$po = $cgi->getValue ( "po" );
	$pp_min = $cgi->getValue ( "pp_min" );
	$pp_max = $cgi->getValue ( "pp_max" );
	$conteudo = $cgi->getValue ("conteudo");
	$query = "
	  SELECT
		p.id				AS id,
		p.propertyoption	AS propertyoption,
		p.propertyprice	 AS propertyprice,
		p.propertyaddress   AS propertyaddress,
		pl.propertylocation AS propertylocation,
		ps.propertystatus   AS propertystatus,
		pt.propertytype	 AS propertytype,
		p.propertyref	   AS propertyref,
		p.propertybedrooms  AS propertybedrooms,
		p.propertyphoto1	AS propertyphoto1,
		p.propertyphoto2	AS propertyphoto2,
		p.propertyphoto3	AS propertyphoto3,
		p.propertyphoto4	AS propertyphoto4,
		p.shortdescription  AS shortdescription,
		p.longdescription   AS longdescription,
		p.virtualtour   AS virtualtour,
		p.conteudo   AS conteudo
		
	  FROM
		" . $property_table . " p
		INNER JOIN
		" . $propertytypes_table . " pt ON (p.propertytype=pt.id)
		INNER JOIN
		" . $propertylocations_table . " pl ON (p.propertylocation=pl.id)
		INNER JOIN
		" . $propertystatus_table . " ps ON (p.propertystatus=ps.id)
	  WHERE
		p.propertyshow=1
	  ";

	if ( $pt != "" )
	  $query .= " AND p.propertytype=" . $sql->quote ( $pt );

	if ( $pp_min != "" )
	  $query .= " AND p.propertyprice>=" . $sql->quote ( $pp_min );

	if ( $pp_max != "" )
	  $query .= " AND p.propertyprice<=" . $sql->quote ( $pp_max );
	 
	if ( $pb != "" )
	  $query .= " AND p.propertybedrooms>=" . $sql->quote ( $pb );

	if ( $pl != "" )
	  $query .= " AND p.propertylocation=" . $sql->quote ( $pl );

	 if ( $po != "" )
	  $query .= " AND p.propertyoption=" . $sql->quote ( $po );
	 if ( $conteudo != "" )
	  $query .= " AND p.conteudo=" . $sql->quote  ($conteudo);
	  
	// set the query ordering
	if ( isset ( $property_search_order ) && $property_search_order != "" )
	  $query .= "ORDER BY p." . $property_search_order . " " .
		   ( "a" == strtolower ( substr ( $property_search_ordering, 0, 1 ) ) ?
			 "ASC" : "DESC" );
	
	$results = $sql->execute ( $query, SQL_RETURN_ASSOC );
	
	$total_results = sizeof ( $results );

	if ( $total_results == 0 )
	{
	  ?>

Alguem Me Ajuda Por Favor!

05/09/2009, 14:49

preciso que a tabela liste todas as linhas onde o campo conteudo (que é uma string como essa "1 2 3 4 7 9") contenha dentro da string o numero 2 por exemplo .. hoje eu checo se o conteudo é igual ao numero 2, mas como quero que no campo conteudo tenha outros valores alem do 2 preciso chegar se a string contem o numero 2. o codigo que uso hoje segue abaixo.

if ( $conteudo != "" )
$query .= " AND p.conteudo=" . $sql->quote ( $conteudo );


// p.conteudo é a coluna conteudo da tabela e contem "1 2 4" camo valor e $conteudo é a variavel que responde "2"
// acho que preciso de algo com strstr ou strpbrk, mas nao consigo implementar, aguem pode me dar essa força?

Ainda Nao Consegui

04/09/2009, 21:40

Preciso filtrar um banco de dados mysql atravez do valor retornado do cgi, ja tenho o codigo porem restou uma duvida digamos que no campo $conteudo pode ser inserido mais de um numero que ira ser usado na pesquisa:

linha 1 da tabela campo conteudo "1"
linha 2 da tabela campo conteudo "1 2"
linha 3 da tabela campo conteudo "1"
linha 4 da tabela campo conteudo "1 2 3"
linha 5 da tabela campo conteudo "2"
linha 6 da tabela campo conteudo "3"
linha 7 da tabela campo conteudo "1"

// ACREDITO QUE A SOLUÇÃO POSSA SER ALGOM COMO Strpbrk OU strstr !

Preciso filtrar a tabela da seguinte forma. Se campo conteudo contem 2 ele é listado. e no resultado deveria aparecer as linhas 2, 4, e 6.
o codigo abaixo só permite que eu filtre um numero inteiro. qual a mudança que dever ser feita? obigado!

Linha que deve gerar a pesquisa que estou com duvida

$query .= " AND p.conteudo=" . $sql->quote ( $conteudo );


abaixo codigo completo.

if ( $cgi->getValue ( "op" ) == "search" )
{
$pt = $cgi->getValue ( "pt" );
$pp = $cgi->getValue ( "pp" );
$pb = $cgi->getValue ( "pb" );
$pl = $cgi->getValue ( "pl" );
$po = $cgi->getValue ( "po" );
$pp_min = $cgi->getValue ( "pp_min" );
$pp_max = $cgi->getValue ( "pp_max" );
$conteudo = $cgi->getValue ("conteudo");
$query = "
SELECT
p.id AS id,
p.propertyoption AS propertyoption,
p.propertyprice AS propertyprice,
p.propertyaddress AS propertyaddress,
pl.propertylocation AS propertylocation,
ps.propertystatus AS propertystatus,
pt.propertytype AS propertytype,
p.propertyref AS propertyref,
p.propertybedrooms AS propertybedrooms,
p.propertyphoto1 AS propertyphoto1,
p.propertyphoto2 AS propertyphoto2,
p.propertyphoto3 AS propertyphoto3,
p.propertyphoto4 AS propertyphoto4,
p.shortdescription AS shortdescription,
p.longdescription AS longdescription,
p.virtualtour AS virtualtour,
p.conteudo AS conteudo

FROM
" . $property_table . " p
INNER JOIN
" . $propertytypes_table . " pt ON (p.propertytype=pt.id)
INNER JOIN
" . $propertylocations_table . " pl ON (p.propertylocation=pl.id)
INNER JOIN
" . $propertystatus_table . " ps ON (p.propertystatus=ps.id)
WHERE
p.propertyshow=1
";

if ( $pt != "" )
$query .= " AND p.propertytype=" . $sql->quote ( $pt );

if ( $pp_min != "" )
$query .= " AND p.propertyprice>=" . $sql->quote ( $pp_min );

if ( $pp_max != "" )
$query .= " AND p.propertyprice<=" . $sql->quote ( $pp_max );

if ( $pb != "" )
$query .= " AND p.propertybedrooms>=" . $sql->quote ( $pb );

if ( $pl != "" )
$query .= " AND p.propertylocation=" . $sql->quote ( $pl );

if ( $po != "" )
$query .= " AND p.propertyoption=" . $sql->quote ( $po );
if ( $conteudo != "" )
$query .= " AND p.conteudo=" . $sql->quote ( $conteudo );

// set the query ordering
if ( isset ( $property_search_order ) && $property_search_order != "" )
$query .= "ORDER BY p." . $property_search_order . " " .
( "a" == strtolower ( substr ( $property_search_ordering, 0, 1 ) ) ?
"ASC" : "DESC" );

$results = $sql->execute ( $query, SQL_RETURN_ASSOC );

$total_results = sizeof ( $results );

IPB Skin By Virteq