Buenas, soy un user nuevo, y necesito vuestra ayuda ya que al foro que voy está caído, como cosa rara, tengo un código el cual quiero que si dejan un campo vacío salga error, pero lo pruebo y en vez de salir el mensaje, no sale nada, acá el código.
<?php
$html = true;
require_once '../includes/core.php';
$function->session("yes");
$function->hk_access();
$page = "2";
$page_name = "Ajustes";
$tinymce = true;
require_once 'templates/navi.php';
$newsid = $function->filter($_GET['username']);
if($_GET['do'] == "created"){
$name = $function->filter($_POST['username']);
$credits = $function->filternews($_POST['credits']);
$vip_points = $function->filternews($_POST['vip_points']);
$motto = $function->filter($_POST['motto']);
$staff_pin = $function->filternews($_POST['staff_pin']);
$referidos = $function->filternews($_POST['referidos']);
$real_name = $function->filter($_POST['real_name']);
$mail = $function->filter($_POST['mail']);
//CHECKS
$name_check = $function->name_check($name);
$credits_check = $function->credits_check($credits);
$vip_points_check = $function->vip_points_check($vip_points);
$motto_check = $function->motto_check($motto);
$staff_pin_check = $function->staff_pin_check($staff_pin);
$referidos_check = $function->referidos_check($referidos);
$real_name_check = $function->real_name_check($real_name);
$mail_check = $function->mail_check($mail);
if(empty($name) || empty($credits) || empty($vip_points) || empty($motto) || empty($staff_pin) || empty($referidos) || empty($real_name) || empty($mail)){ $message = "No has rellenado todos los campos."; }
//fin de checks
mysql_query("UPDATE users SET credits = '{$credits}', vip_points = '{$vip_points}', motto = '{$motto}', staff_pin = '{$staff_pin}', referidos = '{$referidos}', real_name = '{$real_name}', mail = '{$mail}' WHERE username = '{$name}'");
$message = "<div id=\"good\">Cambios efectuados correctamente <img src=\"". PATH_I ."/manage/images/check.gif\"></div> ";
$_SESSION['RESULT_HK'] = $message;
}
?>
<div id="column_2">
<div id="box">
<div class="box_title blue">Creando una noticia</div>
<div class="in_box">
<form action="<?php echo PATH_HK; ?>/credits.php?do=created" method="post" name="theAdminForm" id="theAdminForm">
<table width='100%' cellspacing='0' cellpadding='5' align='center' border='0'>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Usuario</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='username' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Creditos</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='credits' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Puntos</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='vip_points' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Misión</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='motto' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Pin de seguridad</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='staff_pin' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Referidos</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='referidos' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Twitter</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='real_name' size='30' class='textinput'></td>
</tr>
<tr>
<td class='tablerow1' width='40%' valign='middle'><b>Email</b><div class='graytext'></div></td>
<td class='tablerow2' width='60%' valign='middle'><input type='text' name='mail' size='30' class='textinput'></td>
</tr>
<tr>
</tr><tr><td align="center" class="tablesubheader" colspan="2"><input type="submit" name="submit" value="Guardar" class="realbutton" accesskey="s"></td></tr>
</tbody></table>
</div>
</form>
</div>
</div>
</div>
<div id="footer"><?php echo $info['footer']; ?></div>
</body>
</html>
Mod: Temas sobre PHP van al subforo de PHP.
Porqué no pruebas con un if y isset? Algo así:
;-)
if (!isset($_GET['$idarecoger']) || empty($_GET['$idarecoger'])) {
//Codigo de error
}
else {
//Código a ejecutar en caso de que exista
}
Pruébalo y nos cuentas. Saludos
No lo entiendo, podrías aplicarlo con el código que he dado? por fa, más o menos me doy una idea, pero no logro ver...
Claro, perdona
//CHECKS
$name_check = $function->name_check($name);
$credits_check = $function->credits_check($credits);
$vip_points_check = $function->vip_points_check($vip_points);
$motto_check = $function->motto_check($motto);
$staff_pin_check = $function->staff_pin_check($staff_pin);
$referidos_check = $function->referidos_check($referidos);
$real_name_check = $function->real_name_check($real_name);
$mail_check = $function->mail_check($mail);
//------Esto de abajo--------
if((!isset($name) || empty($name)) || (!isset($credits) || empty($credits))){ $message = "No has rellenado todos los campos."; }
//---------------- Y así con los demás campos-------------
//fin de checks
PD: Lo he editado que se me abían olvidado los simbolos de distinto
Sigue igual, podríamos hablar por skype? censurado ese es mi skype
Mod: Prohibido dar datos personales como correo o cuentas de mensajería.
Perdon, con el sueño no lograba encontrar el fallo, yo creo que es una tonteria, es que en el empty le falta unos parentesis más, reemplaza el codigo así:
if((empty($name)) || (empty($credits)) || (empty($vip_points)) || (empty($motto)) || (empty($staff_pin)) || (empty($referidos)) || (empty($real_name)) || (empty($mail))){ $message = "No has rellenado todos los campos."; }
Pruebalo y nos cuentas.
PD: Si no funciona así incluso intenta en vez de comprobar las variables definidas comprobar el get desde el form es decir algo así:
if((empty($_POST['idcampoform'])){
echo 'Campo vacio';
}
else {
echo 'Codigo a ejecutar';
}
Ninguna de las dos
Cita de: araque615 en 12 Septiembre 2015, 01:15 AM
Ninguna de las dos
Prueba a aislar el codigo que te he dado y usarlo con otro form y otras variables aver si el error está en el codigo que te he dado o en lo demás porque sinceramente yo lo he probado en mi equipo con un formulario mio y funciona perfectamente, es muy raro, sino tienes la opción de meterlo en un ide y que te diga que re falla y simo pues espera a que algun profesional del foro te.conteste porque yo x lo que veo estoy bastante verde en esto.
Podrías pasarme el form que tu usas?
Cita de: Thryks en 12 Septiembre 2015, 00:28 AM
Porqué no pruebas con un if y isset? Algo así:
if (!isset($_GET['$idarecoger']) || empty($_GET['$idarecoger'])) {
//Codigo de error
}
else {
//Código a ejecutar en caso de que exista
}
No puedes hacer
$_GET['$idarecoger'] en todo caso tendría que ser así a menos de que el campo en realidad tenga el caracter
$, creo que te haz confundido y haz querido decir
$_GET['idarecoger'].
Cita de: Thryks en 12 Septiembre 2015, 01:08 AM
Perdon, con el sueño no lograba encontrar el fallo, yo creo que es una tonteria, es que en el empty le falta unos parentesis más, reemplaza el codigo así:
if((empty($name)) || (empty($credits)) || (empty($vip_points)) || (empty($motto)) || (empty($staff_pin)) || (empty($referidos)) || (empty($real_name)) || (empty($mail))){ $message = "No has rellenado todos los campos."; }
Pruebalo y nos cuentas.
PD: Si no funciona así incluso intenta en vez de comprobar las variables definidas comprobar el get desde el form es decir algo así:
if((empty($_POST['idcampoform'])){
echo 'Campo vacio';
}
else {
echo 'Codigo a ejecutar';
}
Creo que lo estás confundiendo, en tu primer ejemplo usaste GET y en este último usas POST.
Intenta con lo siguiente.
index.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario</title>
</head>
<body>
<form id="formulario" name="formulario" action="guardar.php" method="GET" >
<input type="text" name="input1" id="input1"/>
</br>
<button id="enviar" type="submit">Guardar</button>
</form>
</body>
</html>
guardar.php
<?php
if(isset($_GET['input1'])){ //isset — Determina si una variable está definida y no es NULL
echo "<br>La variable \$_GET['input1'] esta definida";
if(!empty($_GET['input1'])) { //empty — Determina si una variable está vacía
echo "<br>La variable \$_GET['input1'] no esta vacia";
}else {
echo "<br>La variable \$_GET['input1'] esta vacia";
}
}else {
echo "<br>La variable \$_GET['input1'] no esta definida";
}
?>
Yo no entender, no se puede simplemente hacerlo en el mismo código? Sin necesidad de crear otro archivo?
Si puedes pero
1. Como comentó Thryks aísla el código para que lo comprendas.
2. Es mejor práctica tener archivos separados: el archivo desde donde envías la información y el archivo donde recibes la información.
Comenta exactamente que es lo que sucede con un "no funciona" no podemos ayudarte mucho.
Qué hace?, qué no hace?, qué errores muestra?, qué comportamiento tiene?.
Cita de: 0roch1 en 12 Septiembre 2015, 01:46 AM
No puedes hacer $_GET['$idarecoger'] en todo caso tendría que ser así a menos de que el campo en realidad tenga el caracter $, creo que te haz confundido y haz querido decir $_GET['idarecoger'].
Creo que lo estás confundiendo, en tu primer ejemplo usaste GET y en este último usas POST.
Intenta con lo siguiente.
index.htm
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario</title>
</head>
<body>
<form id="formulario" name="formulario" action="guardar.php" method="GET" >
<input type="text" name="input1" id="input1"/>
</br>
<button id="enviar" type="submit">Guardar</button>
</form>
</body>
</html>
guardar.php
<?php
if(isset($_GET['input1'])){ //isset — Determina si una variable está definida y no es NULL
echo "<br>La variable \$_GET['input1'] esta definida";
if(!empty($_GET['input1'])) { //empty — Determina si una variable está vacía
echo "<br>La variable \$_GET['input1'] no esta vacia";
}else {
echo "<br>La variable \$_GET['input1'] esta vacia";
}
}else {
echo "<br>La variable \$_GET['input1'] no esta definida";
}
?>
Cierto 0roch1 en la primera me equivoque poniendo el simbolo $ y en la segunda use post y en la primera get porque escribí el código en ese momento y no tuve en cuenta como se pasaba el form sino que quería que araque entendiese la forma de comprobar que estuviese vacío o no pero tienes razón ya que podría haber causado errores, siento la equivocación. Gracias por el apunte.
Cita de: 0roch1 en 12 Septiembre 2015, 02:27 AM
Si puedes pero
1. Como comentó Thryks aísla el código para que lo comprendas.
2. Es mejor práctica tener archivos separados: el archivo desde donde envías la información y el archivo donde recibes la información.
Comenta exactamente que es lo que sucede con un "no funciona" no podemos ayudarte mucho.
Qué hace?, qué no hace?, qué errores muestra?, qué comportamiento tiene?.
De acuerdo, si borro desde el comentario CHECKS hasta el comentario FIN DE CHECKS y voy a la web, sale así
http://prntscr.com/8fgupe
y si vuelvo agregar el código entre los dos comentarios, al momento de darle guardar, sale así.
http://prntscr.com/8fgv18
Donde tenes definida la funcion name_check y de mas? no sera que alguna de ellas tiene un die() ? o que te estan retornando un error y PHP deja de correr el script por la gravedad del mismo?
Cita de: someRandomCode en 12 Septiembre 2015, 16:05 PM
Donde tenes definida la funcion name_check y de mas? no sera que alguna de ellas tiene un die() ? o que te estan retornando un error y PHP deja de correr el script por la gravedad del mismo?
Cierto xddddd, se me olvidó hacer la function, pues estaba haciéndola ahorita que leí tu mensaje, me quedaría así?
public function credits_check($a) {
$a = $this->filter($a);
if(empty($a)) { $error = "Campo vacío"; }
return $error;
}
De que clase heredarias? porque tenes que definir un filtro para esa clase, sino mas vale si lo que queres es prevenir SQL injection es mas comodo que uses mysql_real_escape_string, si es que la cadena no esta vacia. (aunque en rigor de verdad, mysql_real_escape_string no va a fallar si la cadena esta vacia)
Es cuestion de que adaptes tu logica, la posta a dia de hoy es usar PDO
Cita de: someRandomCode en 12 Septiembre 2015, 16:41 PM
De que clase heredarias? porque tenes que definir un filtro para esa clase, sino mas vale si lo que queres es prevenir SQL injection es mas comodo que uses mysql_real_escape_string, si es que la cadena no esta vacia. (aunque en rigor de verdad, mysql_real_escape_string no va a fallar si la cadena esta vacia)
Es cuestion de que adaptes tu logica, la posta a dia de hoy es usar PDO
Ya, pero yo no manejo PDO
Pues aprendelo que es bien facil.
http://php.net/manual/es/book.pdo.php
Saludos
Cita de: #!drvy en 12 Septiembre 2015, 16:59 PM
Pues aprendelo que es bien facil.
http://php.net/manual/es/book.pdo.php
Saludos
Pero aunque sea podrías hacerme el favor de corregir el problema en mi actual código? :C
function check_empty(array $args, $method='get'){
foreach($args as $arg){
switch($method){
case 'post':
if(empty($_POST[$arg])){ return false; }
break;
case 'get': default:
if(empty($_GET[$arg])){ return false; }
break;
}
}
return true;
}
La pones al principio de tu script. Luego antes de usar las variables GET/POST (en la linea 10 del codigo que pusiste en el primer post) defines que campos quieres que sean obligatorios.
$check = array('username','credits','vip_points');
if(!check_empty($check, 'post')){
echo 'No has completado alguno de los campos obligatorios.';
return null;
}
Con return null; te aseguras que no se ejecute el resto del código.
Ese es el problema de tu actual código. Lo de sanitizar las variables te lo vas a tener que estudiar porque no es cosa de poner código hecho a tuti plen. Hay mucho en Google.
Saludos