Foros del Web » Programando para Internet » PHP »

Problema con Sintaxis de PHP y MYSQL

Estas en el tema de Problema con Sintaxis de PHP y MYSQL en el foro de PHP en Foros del Web. Buenas, intentaré resumir mi problema lo más corto posible. He hecho un formulario en php para consultar información que tengo en mi base de datos. ...
  #1 (permalink)  
Antiguo 22/09/2014, 14:10
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Problema con Sintaxis de PHP y MYSQL

Buenas, intentaré resumir mi problema lo más corto posible.

He hecho un formulario en php para consultar información que tengo en mi base de datos.
El formulario consta de dos input y un boton.
Todo me funcionaba muy bien hasta que decidí crear un %comodin% para el primer input y asi el SELECT me seleccionaba un dato aunque no estuviera completo. Por ejemplo: Si queria seleccionar un Nombre que tuviera almenos la palabra "sangri" entonces me seleccionaba todo nombre que tuviera esa palabra, como "sangriento".
Y funcionaba pero me hacia una clase de conflicto con un OR que venia despues, el cual dejaba de funcionar como antes.

Os dejo una copia del codigo cuando funcionaba BIEN y ahora que funciona MAL.

Código:
if ($nombre or $id>0){
    $connect = mysql_connect("localhost","root","xxxx") or die ("No hemos podido acceder al servidor");
    mysql_select_db ("bdaleyda",$connect);
    $query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
Nombre='".$nombre."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
    
    //extraer datos
    $archivos = mysql_num_rows($query);
    if ($archivos>0) {
        echo "<center><table border='1'>";
            echo "<tr>";
            echo "<th class='serie'>N Serie</th>"; echo "<th class='nom'>Nombre</th>"; echo "<th>Peso</th>"; echo "<th>Precio</th>"; echo "<th class='qui'>Quilates</th>"; echo "<th>Sexo</th>"; echo "<th>Estado</th>"; echo "<th>Material</th>"; echo "<th>Marca</th>"; echo "<th>Estante</th>"; echo "<th>Fecha de Entrada</th>"; echo "<th class='descrip'>Descripcion</th>"; echo "<th>Fecha de Salida</th>";
            echo "</tr>";
        for ($i=0; $i<$archivos; $i++) {
            $columna = mysql_fetch_array($query);
            echo "<tr>";
            
            //Empiezan las columnas
            echo "<td>".$columna["ID"]."</td>";
            echo "<td>".$columna["Nombre"]."</td>"; etc
AHORA:

Código:
if ($nombre or $id>0){
    $connect = mysql_connect("localhost","root","xxxx") or die ("No hemos podido acceder al servidor");
    mysql_select_db ("bdaleyda",$connect);
    $query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%$nombre%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
    
    //extraer datos
    $archivos = mysql_num_rows($query);
    if ($archivos>0) {
        echo "<center><table border='1'>";
            echo "<tr>";
            echo "<th class='serie'>N Serie</th>"; echo "<th class='nom'>Nombre</th>"; echo "<th>Peso</th>"; echo "<th>Precio</th>"; echo "<th class='qui'>Quilates</th>"; echo "<th>Sexo</th>"; echo "<th>Estado</th>"; echo "<th>Material</th>"; echo "<th>Marca</th>"; echo "<th>Estante</th>"; echo "<th>Fecha de Entrada</th>"; echo "<th class='descrip'>Descripcion</th>"; echo "<th>Fecha de Salida</th>";
            echo "</tr>";
        for ($i=0; $i<$archivos; $i++) {
            $columna = mysql_fetch_array($query);
            echo "<tr>";
            
            //Empiezan las columnas
            echo "<td>".$columna["ID"]."</td>";
            echo "<td>".$columna["Nombre"]."</td>"; ETC
El asunto está en la linea del CONVERT y despues OR.
No se si me he explicado bien y ojala me puedan ayudar, le he echado cabeza pero no logró saber donde fallo. Lo mas seguro es que sea un fallo de sintaxis pero mis conocimientos no me permiten saber que debo poner.

Gracias por leerme, si no me he explicado bien por favor decirmelo e intento hacerlo mejor. :)
  #2 (permalink)  
Antiguo 22/09/2014, 15:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problema con Sintaxis de PHP y MYSQL

¿Sintaxis de qué?

Porque ahí se ven dos lenguajes: PHP y SQL.

Ahora, si no recibes un error de sintaxis de PHP ¿por qué debería ser un problema de PHP?

Si recibes un error de sintaxis en SQL entonces el problema es de SQL, ¿por qué preguntar en el foro de PHP?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 22/09/2014, 15:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Sintaxis de PHP y MYSQL

Estimado: Usar OR no es arbitrario, y debe hacerse con cuidado. Esa cláusula es una disyunción, lo que quiere decir que corta el WHERE en dos como una cuchilla.
Todo lo que está antes del OR es un conjunto de condiciones independiente de todo lo que está después. Así de simple.
O sea que estás partiendo en dos lógicas diferentes el resultado.
Necesitas poner la segunda condición relacionada a otra y todo dentro de paréntesis, componiendo una única condición.
Algo como: AND (a=b OR a= c)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 22/09/2014, 17:23
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

1º RESPUESTA: Puede ser un error de MYSQL no lo sé, por eso pregunté aquí, preguntaré por el foro de MYSQL a ver.

2º RESPUESTA:

El codigo está hecho para que, en un principio, se pueda poner cualquiera de los dos valores de los input y encuentre un resultado. Me explico, pongo un valor en la variable $nombre y le doy al enter y encuentra algo, o si quiero no pongo nada en la variable $nombre pero si en la variable $id y al darle enter me encuentra la fila relacionada con el ID. Todo está en la misma etiqueta <form>.

En el primer codigo que expongo, el codigo, funciona perfectamente, puedo introducir un valor en cualquiera de los dos input (si quiero introduzco valores en los dos input) y al darle enter me encuentra lo que puse.

El problema viene al poner esta linea: (CONVERT(Nombre USING utf8) LIKE '%$nombre%') hace que funcione el convert pero es como si dejara fuera el OR de la variable $id. Por ejemplo: ahora pongo un valor en la variable $id y le doy al enter y no hace nada, como si no recogiera el valor POST de "id" = $id.

En cambio pongo los dos valores osea el de $nombre y el de $id y si me funciona, no sé es muy raro jejeje.
El problema de unificarlo en una sola condicion es que si uno de las dos variables falta entonces no me busca nada, la idea es que una no dependa de la otra.
Si no logró hacerme entender veré si puedo hacer un video. :)

Última edición por jchaux12; 22/09/2014 a las 17:31
  #5 (permalink)  
Antiguo 22/09/2014, 17:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Sintaxis de PHP y MYSQL

Videos no necesitamos, sino que entiendas mejor la lógica proposicional.
Si pones las dos condiciones donde usas variables entre paréntesis, el OR hará que cuando al menos una haya sido ingresada, sea usada para la búsqueda... que es exactamente lo que quieres.
Así funciona la disyuncion. Es TRUE cuando una, la otra, o ambas son TRUE.
Lo que parece faltarte, y perdón que lo diga así, es base de programación. Ese tipo de cosas son normales en los ejercicios iniciales de cualquier lenguaje.
Yendo al punto, con. Que lo pones como te comento debería andar bien.
De todos modos, no será la forma óptima...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/09/2014, 17:56
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

He probado a poner en la consola de MYSQL el siguiente codigo y hace lo que quiero
Código:
SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%""%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID=20
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC
El problema es que cuando intento ponerlo en el .php, php me da un error de sintasix.

Ejemplo:

Código:
$query = mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%"$nombre"%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='".$id."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC",$connect);
El error es este:
Código:
Parse error: syntax error, unexpected '$nombre' (T_VARIABLE) in C:\xampp\htdocs\basedatos2\busqueda.php on line 38
gnzsoloyo, claro que me hace falta conocimientos de php, hace apenas 1 mes que estoy aprendiendo programación, por eso estoy preguntando en el foro, si no no lo haria.
  #7 (permalink)  
Antiguo 22/09/2014, 18:03
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Problema con Sintaxis de PHP y MYSQL

Tenés problemas con el encomillado. Cambiá esta parte

Código PHP:
LIKE '%"$nombre"%'
por

Código PHP:
LIKE '%$nombre%'
y esta otra

Código PHP:
OR joyas.ID='".$id."' 
por

Código PHP:
OR joyas.ID=$id 
y las comillas dobles ponelas donde cierra tu consulta.

Saludos.
  #8 (permalink)  
Antiguo 22/09/2014, 18:05
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por GeekGirl Ver Mensaje
Tenés problemas con el encomillado. Cambiá esta parte

Código PHP:
LIKE '%"$nombre"%'
por

Código PHP:
LIKE '%$nombre%'
y las comillas dobles ponelas donde cierra tu consulta.

Saludos.
jejej lo sé pero es igual, ya he probado y como dices tu hace que funcione pero deja de funcionar el OR. Si te das cuenta en el primer post lo tengo asi como dices.
  #9 (permalink)  
Antiguo 22/09/2014, 18:08
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Problema con Sintaxis de PHP y MYSQL

Estaba editando mi respuesta pero me ganaste de mano :)

El or no funciona porque también está mal el encomillado. Las variables que contienen un integer no necesitan ser escapadas cuando la consulta se ejecuta dentro de comillas dobles.
Probá con:

Código PHP:
OR joyas.ID=$id 
Si quisieras escapar esa variable, la forma correcta sería:

Código PHP:
OR joyas.ID=".$id." 
  #10 (permalink)  
Antiguo 22/09/2014, 18:10
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por GeekGirl Ver Mensaje
Estaba editando mi respuesta pero me ganaste de mano :)

El or no funciona porque también está mal el encomillado. Las variables que contienen un integer no necesitan ser escapadas cuando la consulta se ejecuta dentro de comillas dobles.
Probá con:

Código PHP:
OR joyas.ID=$id 
No compañero, eso hace que no funcione ninguno de los dos jejej. Creo que la sintasix es el problema pero ya he probado esas combinaciones.
  #11 (permalink)  
Antiguo 22/09/2014, 18:14
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 4 meses
Puntos: 44
Respuesta: Problema con Sintaxis de PHP y MYSQL

Tu id es un string? En ese caso probá con:

Código PHP:
OR joyas.ID='$id' 
Amplía y comentá que error te sale para poder darte más ayuda.
  #12 (permalink)  
Antiguo 22/09/2014, 18:26
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por GeekGirl Ver Mensaje
Tu id es un string? En ese caso probá con:

Código PHP:
OR joyas.ID='$id' 
Amplía y comentá que error te sale para poder darte más ayuda.
Si es un string, he probado y va bien pero ese no es el problema, creo que deberiamos centrarnos en la variable $nombre, la sintasix de esa variable, hay algo que falla ahí.
he probado con '%$nombre%' y funciona pero me deja de lado el OR. He probado con otras combinaciones como '"%$nombre%"' y da error, y con otras, etc.
  #13 (permalink)  
Antiguo 22/09/2014, 18:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Sintaxis de PHP y MYSQL

Primer consejo básico: Usa un editor que tenga corrector sintáctico. No uses el notepad o cualquier cosa para escribir código.
A estas alturas, existen demasiados editores de uso libre muy potentes, que te pueden solucionar errores básicos como el que tiene tu código a nivel PHP...

Código PHP:
$query mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%$nombre%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='"
.$id."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC"
,$connect); 
¿Cuál era el error?
Este:
Código PHP:
" LIKE '%"$nombre%"')" 
debía ir así:
Código PHP:
" LIKE '%$nombre%')" 
o bien:
Código PHP:
" LIKE '%".$nombre."%')" 
¿Se entiende?
Cita:
Iniciado por jchaux12 Ver Mensaje
gnzsoloyo, claro que me hace falta conocimientos de php, hace apenas 1 mes que estoy aprendiendo programación, por eso estoy preguntando en el foro, si no no lo haria.
Lo siento, pero para muchos de nosotros, eso es una justificación, no una razón.
Puedes estudiar quince días un lenguaje y obtener suficiente práctica como para hacer ejercicios como este sin problemas.
El problema no es la base del lenguaje, sino lógica proposicional, que no se aprende leyendo manuales. Es algo que te dan en la escuela, y que luego aplicas como programador todo el tiempo. Y por todo el tiempo me refiero a TODO el tiempo.
Es imposible programar nada sin entender el uso de operadores lógicos AND y OR.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 22/09/2014, 18:33
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Algo como: AND (a=b OR a= c)
Esta explicación es muy pobre, no la entiendo.
Si puedes utilizar esa estructura con el codigo que te pasé seguro que lo entenderé.
  #15 (permalink)  
Antiguo 22/09/2014, 18:38
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Primer consejo básico: Usa un editor que tenga corrector sintáctico. No uses el notepad o cualquier cosa para escribir código.
A estas alturas, existen demasiados editores de uso libre muy potentes, que te pueden solucionar errores básicos como el que tiene tu código a nivel PHP...

Código PHP:
$query mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE
(CONVERT(Nombre USING utf8) LIKE '%$nombre%')
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
OR joyas.ID='"
.$id."'
AND joyas.idMarca=marcas.ID
AND joyas.idEstante=estantes.ID
AND joyas.idEstado=estados.ID
AND joyas.idSexo=sexos.ID
AND joyas.idMaterial=materiales.ID
ORDER BY joyas.ID ASC"
,$connect); 
¿Cuál era el error?
Este:
Código PHP:
" LIKE '%"$nombre%"')" 
debía ir así:
Código PHP:
" LIKE '%$nombre%')" 
o bien:
Código PHP:
" LIKE '%".$nombre."%')" 
¿Se entiende?

Lo siento, pero para muchos de nosotros, eso es una justificación, no una razón.
Puedes estudiar quince días un lenguaje y obtener suficiente práctica como para hacer ejercicios como este sin problemas.
El problema no es la base del lenguaje, sino lógica proposicional, que no se aprende leyendo manuales. Es algo que te dan en la escuela, y que luego aplicas como programador todo el tiempo. Y por todo el tiempo me refiero a TODO el tiempo.
Es imposible programar nada sin entender el uso de operadores lógicos AND y OR.
El primer codigo te lo has inventado por que en ningun momento lo he puesto así, te recomiendo que revises los codigos que he pasado, no voy a darme cuenta que lo he puesto
Código PHP:
" LIKE '%"$nombre%"')" 
de esta manera. Ese codigo no lo he puesto yo.

Las soluciones que das ya las he probado!! NO FUNCIONAN!. EL CONVERT ME LO TOMA BIEN PERO EL OR DEJA DE FUNCIONAR!

Creo que deberias de leer mejor por que sino no nos entendemos jeje
Saludos.
  #16 (permalink)  
Antiguo 22/09/2014, 21:48
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

He hecho un video, como dicen, una imagen vale mas que mil palabras.

https://www.youtube.com/watch?v=JA1Dz3ngFTU&feature=youtu.be
  #17 (permalink)  
Antiguo 23/09/2014, 07:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por jchaux12 Ver Mensaje
El primer codigo te lo has inventado por que en ningun momento lo he puesto así, te recomiendo que revises los codigos que he pasado, no voy a darme cuenta que lo he puesto
Código PHP:
" LIKE '%"$nombre%"')" 
de esta manera. Ese codigo no lo he puesto yo.

Las soluciones que das ya las he probado!! NO FUNCIONAN!. EL CONVERT ME LO TOMA BIEN PERO EL OR DEJA DE FUNCIONAR!

Creo que deberias de leer mejor por que sino no nos entendemos jeje
Saludos.
Revisa el segundo código del post número 6. Creo que es tuyo... allí esta así de mal escrito.

En cuanto al CONVERT ¿Qué se supone que quieres resolver con esa función?
No creo que sea los charset entre tu web y la base, porque eso se hace de otro modo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 23/09/2014, 08:36
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Revisa el segundo código del post número 6. Creo que es tuyo... allí esta así de mal escrito.

En cuanto al CONVERT ¿Qué se supone que quieres resolver con esa función?
No creo que sea los charset entre tu web y la base, porque eso se hace de otro modo.
Lo he mirado y está mal escrito pero no como tu decias:

Tu decias que estaba así:
Código PHP:
" LIKE '%"$nombre%"')" 
Y el Segundo codigo del post numero 6 esta así:

Código PHP:
LIKE '%"$nombre"%'
Lo he puesto a proposito sabiendo que no funcionaría, lo he explicado mil y una vez que lo puse así por que en la consola de MYSQL me funciona de esa manera.

Creo que tienes que ir al oftalmologo por que te inventas cosas queriendo desacreditar con algo que no existe y sin ayudar en nada.

El CONVERT no es ni siquiera necesario, lo puse por que así lo ví en MYSQL, lo importante es el
Código PHP:
LIKE '%".$nombre."%'
que hace que la variable sea un comodín para mysql. En difinitiva, lo que se ve en el video, que no haga falta escribir el nombre completo para encontrar resultados.

He probado a ver si el CONVERT y el USING hace algun conflicto con el resto del codigo pero no es ese el problema.

He probado con este ejemplo:

Código PHP:
$query mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE 
Nombre LIKE '%"
.$nombre."%'
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID 
AND joyas.idEstado=estados.ID 
AND joyas.idSexo=sexos.ID 
AND joyas.idMaterial=materiales.ID 
OR joyas.ID='"
.$id."' 
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID 
AND joyas.idEstado=estados.ID 
AND joyas.idSexo=sexos.ID 
AND joyas.idMaterial=materiales.ID 
ORDER BY joyas.ID ASC"
,$connect); 
Me pasa exactamente lo mismo del video.

Última edición por jchaux12; 23/09/2014 a las 08:42
  #19 (permalink)  
Antiguo 23/09/2014, 12:55
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

He descubierto que el NOT LIKE funciona perfectamente con el OR.

Código PHP:
$query mysql_query("SELECT joyas.ID,Nombre,Precio,Peso,Quilates,Sexo,Estado,Estante,Marca,Material,FechaEntrada,Descripcion,FechaSalida FROM joyas,marcas,estantes,estados,sexos,materiales WHERE 
Nombre NOT LIKE '%"
.$nombre."%'
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID 
AND joyas.idEstado=estados.ID 
AND joyas.idSexo=sexos.ID 
AND joyas.idMaterial=materiales.ID 
OR joyas.ID='"
.$id."' 
AND joyas.idMarca=marcas.ID 
AND joyas.idEstante=estantes.ID 
AND joyas.idEstado=estados.ID 
AND joyas.idSexo=sexos.ID 
AND joyas.idMaterial=materiales.ID 
ORDER BY joyas.ID ASC"
,$connect); 
Estos dos si funcionan, si pongo datos en el campo id y nada en NOT LIKE, funciona, si pongo solo en NOT LIKE funciona. Osea FUNCIONA!

¿POR QUE NO FUNCIONA LIKE?!!!! DIOS!!!

Última edición por jchaux12; 23/09/2014 a las 13:30
  #20 (permalink)  
Antiguo 23/09/2014, 13:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Sintaxis de PHP y MYSQL

Estás hablando de condiciones sobre los datos, por lo que sin conocer los datos reales de tu base, qué resultado exacto obtienes, y cuál es que que dices que deberías obtener, sólo podemos hacer suposiciones.

Hagamos una cosa: Limpiemos esa query de basura y escribamosla de una forma eficiente, y no tomada de manuales obsoletos. A partir de alli podremos ver una sintaxis mas clara y sin cosas dudosas.

Para MySQL, lo óptmo sería:
Código PHP:
$query mysql_query("SELECT 
    J.ID,
    Nombre,
    Precio,
    Peso,
    Quilates,
    Sexo,
    Estado,
    Estante,
    Marca,
    Material,
    FechaEntrada,
    Descripcion,
    FechaSalida 
FROM 
    joyas J
    INNER JOIN marcas M ON J.idMarca = M.ID 
    INNER JOIN estantes ET ON j.idEstante=ET.ID 
    INNER JOIN estados ES ON J.idEstado=ES.ID 
    INNER JOIN sexos S ON J.idSexo=S.ID 
    INNER JOIN materiales MT ON J.idMaterial=MT.ID 
WHERE 
    Nombre LIKE '%$nombre%'
    OR J.ID='$id' 
ORDER BY J.ID ASC"
$connect); 
De ese modo podemos ver en el where lo único importante, ya que las otras son condiciones de JOIN, que es mejor escribir como JOINs explícitos.
Dime que devuelve eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 23/09/2014, 18:00
 
Fecha de Ingreso: septiembre-2014
Ubicación: Valencia
Mensajes: 12
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema con Sintaxis de PHP y MYSQL

Antes probé esa estructura y es exactamente igual a la que habia hecho yo, es verdad que me deja más claro el WHERE pero hace lo mismo, osea no me funciona como quiero.

Lo que yo quiero es poder introducir en el input nombre un nombre como "bri" y me encuentre un nombre en la base de datos que contenga esa palabra. Osea que me encuentre coincidencias. Y tambien lo que quiero es que si pongo en el input nombre un dato y al mismo tiempo pongo un dato en el input numero de serie pues entonces al darle a buscar/enter me encuentre esos dos datos, aunque se repitan. Y lo mismo con el input numero de serie, si solo pongo un dato en el input numero de serie ps que me encuentre ese dato aunque no haya puesto nada en el input nombre.

Lo que ocurre con ese codigo es que el LIKE me funciona pero me invalida el OR, osea, como se ve en el video, cuando solo pongo un dato en el id y dejo en blanco el LIKE &nombre entonces es como si no tomara ningun dato y directamente en vez de hacer el if se va directamente al else y me recarga la pagina. Si te fijas en el video eso es lo que hace, me recarga la pagina al darle al enter cuando introduzco un dato solo en el input del numero de serie que corresponde a la variable $id.

La conclusion a la que he llegado es que no se puede poner un LIKE seguido de un OR. Así que he cambiado el codigo y he creado dos condiciones (if) una con el LIKE y otra para el OR. Y ya me funciona bien.

No lo quería hacer así por que he tenido que duplicar el codigo y entre mejor optimizado lo tenga mejor pero bueno si no se puede no se puede.

Última edición por jchaux12; 23/09/2014 a las 18:07

Etiquetas: fecha, formulario, mysql, select, sintaxis
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:12.