Hola a todos! Me sucede una cosa muy extraña con un array: me dice que está vacío, pero contiene elementos, por lo que no me realiza la query después.
Este es el codigo concreto del problema:
Código PHP:
//$autor = $_POST['autor'];
//$titulo = $_POST['titulo'];
//$tema = $_POST['tema'];
//$clave = $_POST['clave'];
//$submit = $_POST['submit']; //// submit siempre es 'submit' si hay post
/////////// compruebo si todos los POST excepto submit estan vacios o las cadenas tienen menos de tres elementos
function checkforemptyval($array) {
$is_empty = 0;
$recibido= array();
foreach($array as $key => $item) {
$recibido[] = "$key=$item";
if(is_numeric($item)) {echo $item."<p>";
} elseif ((empty($item))|| (strlen($item) < 3)){
$is_empty++;
}
}
if ($is_empty = 4)
return TRUE;
else
return FALSE;
}
///////// ejecuto la funcion
if(!checkforemptyval($_POST)) {
echo " post vacio o inferior a tres caracteres.<p>";
} else {
echo "puedo seguir y hacer ya query<p>";
// salida array
echo "size of array = ".sizeof($recibido)."<p>";
for (reset($recibido); list(,$item)=each($recibido); )
echo $item."<p>";
codigo completo
Código PHP:
<?php header("Content-Type: text/html;charset=utf-8");?>
<?php
//$autor = $_POST['autor'];
//$titulo = $_POST['titulo'];
//$tema = $_POST['tema'];
//$clave = $_POST['clave'];
//$submit = $_POST['submit']; //// submit siempre es 'submit' si hay post
/////////// compruebo si todos los POST excepto submit estan vacios o las cadenas tienen menos de tres elementos
function checkforemptyval($array) {
$is_empty = 0;
$recibido= array();
foreach($array as $key => $item) {
$recibido[] = "$key=$item";
if(is_numeric($item)) {echo $item."<p>";
} elseif ((empty($item))|| (strlen($item) < 3)){
$is_empty++;
}
}
if ($is_empty = 4)
return TRUE;
else
return FALSE;
}
///////// ejecuto la funcion
if(!checkforemptyval($_POST)) {
echo " post vacio o inferior a tres caracteres.<p>";
} else {
echo "puedo seguir y hacer ya query<p>";
/////// salida para comprobar los elementos
////// nunca saca nada!!!!!!!!!
// salida array
echo "size of array = ".sizeof($recibido)."<p>";
for (reset($recibido); list(,$item)=each($recibido); )
echo $item."<p>";
////// salida para comprobar que each ya avanza en el array
for (reset($recibido); list(,$item)=each($recibido); )
echo "<p>".$item."<p>";
$link=mysql_connect("localhost","root","")or die ("error en la conexion");
mysql_select_db("buscador",$link) or die ("no encontro base de datos");
//////// vuelvo a incluir el charset por si acaso
mysql_query("SET NAMES 'utf8'");
mysql_set_charset( 'utf8' , $link );
$charset = mysql_client_encoding( $link );
////// compruebo el charset con una salida
echo "The current character set is: $charset <p>";
/////// primera query en funcion de haber recibido submit pero no clave
if ((isset($_POST['submit'])) and (!isset($_POST['clave']))){
$buscar = "";
if (isset ($autor) && !($autor == "")) {
$buscar .= " autor LIKE '%$autor%'";
}
if (isset ($titulo) && !($titulo == "")) {
if (! ($buscar == "")) {$buscar .= " AND "; }
$buscar .= " titulo LIKE '%$titulo%'";
}
if (isset ($tema) && !($tema == "")) {
if (! ($buscar == "")) {$buscar .= " AND "; }
$buscar .= " tema LIKE '%$tema%'";
}
if (!($buscar == "")) {
$buscar = "WHERE".$buscar;
}
$buscar = "SELECT * FROM libros $buscar ORDER BY autor DESC";
$result = mysql_query($buscar) or die("La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>");
echo $buscar;
////// compruebo errores en la query y en la obtencion de datos vacios
if (!$result){
echo "error en la query"."<p>";
}elseif (!mysql_num_rows($result)){
echo "error en el resultado = o";
}elseif(mysql_num_rows($result)){
while ($row = mysql_fetch_array ($result)) {
echo $row['autor']."<p>";
echo $row['titulo']."<p>";
echo $row['tema']."<p>"."<p>";
}
}
}
/////// segunda query si la anterior no es valida.
/////// si se recibio submit y la clave
elseif ((isset($_POST['submit'])) and (isset($_POST['clave']))){
$buscar = "";
if (isset ($clave) && !($clave == "")) {
$buscar .= " autor LIKE '%$clave%' OR titulo LIKE '%$clave%' OR tema LIKE '%$clave%'";
}
if (isset ($autor) && !($autor == "")) {
if (! ($buscar == "")) {$buscar .= " AND "; }
$buscar .= " autor LIKE '%$autor%'";
}
if (isset ($titulo) && !($titulo == "")) {
if (! ($buscar == "")) {$buscar .= " AND "; }
$buscar .= " titulo LIKE '%$titulo%'";
}
if (isset ($tema) && !($tema == "")) {
if (! ($buscar == "")) {$buscar .= " AND "; }
$buscar .= " tema LIKE '%$tema%'";
}
if (!($buscar == "")) {
$buscar = "WHERE".$buscar;
}
$buscar = "SELECT * FROM libros $buscar ";
$result = mysql_query($buscar) or die("La siguiente consulta contiene algún error:<br>nSQL: <b>$sql</b>");
// salida query
echo $buscar."<p>";
//echo $buscar;
if (!$result){
echo "error primero"."<p>";
}elseif (!mysql_num_rows($result)){
echo "error segundo";
}elseif(mysql_num_rows($result)){
while ($row = mysql_fetch_array ($result)) {
echo $row['autor']."<p>";
echo $row['titulo']."<p>";
echo $row['tema']."<p>"."<p>";
}
}
}
////// cierro la funcion ejecutada al comienzo
}
?>