Problema con PHP y $_GET y _$REQUEST

Iniciado por venadHD, 11 Abril 2015, 11:25 AM

0 Miembros y 1 Visitante están viendo este tema.

venadHD

Bueno, siendo mi primer post en este foro de PHP (Empece a aprender programacion PHP antes de ayer o ayer), me cogi un servidor local de PHP (XAMPP porque tiene debug incluido).
Al tener mi primer script que me serviria para hacer algunas cosas (Además estaba probando el hash) me encuentro con este error:

Undefined index: sv in C:\Server\xampp\htdocs\index.php on line 14

Sé que index es una tabla. Pero como la defino como tal? o almenos, que no de ese error y pase los argumentos totales, es decir, luego de darle "Enviar", me muestra en el $_GET ell enlace sin cifrado, es un problema gordito, ademas de que, al parecer, no hace el hash en un "if";
No se colocar el codigo con la sintaxis de PHP; Averiguado.
Código (php) [Seleccionar]
<?php
echo '<html> <head> <title>TrosNos Bug Discover System</title></head> <body>';
echo 
'<style> * {font-family: arial,sans-serif; font-weight: bold; font-size: 16px; color: #000000;}</style>';
echo 
"<br><ul><form name='servers' method='get' action='index.php'>
<p>Escoge tu servidor para ver los actuales bugs</p>
<br>
<p> Escoge tu servidor </p>
<SELECT NAME='sv' SIZE=1 WIDTH=100px>
<OPTION VALUE='TWD'>TWD (Rick y Supra)</OPTION>
</select><br>
<input type='submit'>
</form></ul>
"
;
if (
htmlspecialchars($_REQUEST['sv'])) {
$getto=htmlspecialchars($_REQUEST['sv']);
$gett=hash('md5',$getto);
echo 
"$gett";
//////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($gett == hash('md5''TWD')) { 
$server "TWD (Rick y Ruben)";
echo "<ul><h2>Server reportado: $server</h2></ul>";
/*
$bugID = "";
$bug_titulo = "";
$descripcion = "";
$reproduccion = "";

echo "<center><table border=1 bordercolor=#000000 bgcolor=#DDDDDD cellspacing=0 cellpadding=5 width=95%>
<td width=15%>ID de bug</td><td># $bugID</td><tr>
<td>Título</td><td>$bug_titulo</td><tr>
<td>Descripción</td><td>$descripcion</td><tr>
<td>Reproducción</td><td>$reproduccion</td>

</table></center><br>";
*/
//Bug Slot #1
$bugID "1";
$bug_titulo "Spam al cambiar de nombre";
$descripcion "Binds: <br>bind 1 nick venad<br>bind 1 nick venad2<br><hr/>Y presionar muchas veces el bind 1";
$reproduccion "Siempre";

echo "<center><table border=1 bordercolor=#000000 bgcolor=#DDDDDD cellspacing=0 cellpadding=5 width=95%>
<td width=15%>ID de bug</td><td># 
$bugID</td><tr>
<td>Título</td><td>
$bug_titulo</td><tr>
<td>Descripción</td><td>
$descripcion</td><tr>
<td>Reproducción</td><td>
$reproduccion</td>

</table></center><br>"
;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
} elseif($gett == '') {} else {
echo 'weon yo que te dije de experimentar con los enlaces ._.';
}
}


Cual es el error exactamente? :/

#!drvy

El error es que intentas darle un valor a htmlspecialchars y a $getto sin saber realmente si ese valor (REQUEST sv) esta definido. Ademas, htmlspecialchars no deberías usarlo como comprobador.

Código (php) [Seleccionar]
if(isset($_REQUEST['sv'])){

    // resto de logica.
}


Por otro lado si vas a usar hash() no hace falta limpiar los caracteres.

Saludos


venadHD

#2
Hmm, para usar los hash, tendria que definirlo desde un principio en el metodo get por lo que veo.

Vengo del lenguaje de programacion LUA donde
if variable then

Si no daba false o nil, no daba error, Por eso apliqué la misma formula en PHP, tengo bases de conocimiento de programacion, pero no de PHP xD

Por lo tanto:
Código (php) [Seleccionar]
<?php
$server1_string 
hash('sha512''TWD');
echo 
'<html> <head> <title>TrosNos Bug Discover System</title></head> <body>';
echo 
'<style> * {font-family: arial,sans-serif; font-weight: bold; font-size: 16px; color: #000000;}</style>';
echo 
"<br><ul><form name='servers' method='get' action='index.php'>
<p>Escoge tu servidor para ver los actuales bugs</p>
<br>
<p> Escoge tu servidor </p>
<SELECT NAME='sv' SIZE=1 WIDTH=100px>
<OPTION VALUE='
$server1_string'>TWD (Rick y Supra)</OPTION>
</select><br>
<input type='submit'>
</form></ul>
"
;
if (isset(
$_REQUEST['sv'])) {
$gett=htmlspecialchars($_REQUEST['sv']);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($gett == hash('sha512''TWD')) { 





El acto inverso a isset, cual es?

isset (Comprueba si ESTÁ definida)
Y si.. quiero..

*** (Comprueba si NO ESTÁ definida)

Basicamente, para hacer desaparecer el formulario al entrar en una opcion

He intentado hacer esto, pero da error en la linea uno:

Undefined index: sv in C:\Server\xampp\htdocs\index.php on line 5

Código (php) [Seleccionar]
if (is_null ($_REQUEST['sv'])) {

Encontré una manera, pero me gustaria saber si hay alguna forma mas corta de hacerlo
Código (php) [Seleccionar]
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$web_url = 'bugs.trosnos.tk';
$lang = array (
1 => array(1=>hash('sha512','TWD'), 2=>'TWD (Rick y Supra server)')
);
$server1_string = hash('sha512', 'TWD');
echo '<html> <head> <title>TrosNos bug registry</title></head> <body>';
echo '<style> * {font-family: arial,sans-serif; font-weight: bold; font-size: 16px; color: #000000;}</style>';
if ($actual_link == "http://$web_url/" or $actual_link == "http://web_url/index.php") {


Mod: No hacer doble post.

#!drvy

CitarHmm, para usar los hash, tendria que definirlo desde un principio en el metodo get por lo que veo.

eing?

Citartengo bases de conocimiento de programacion, pero no de PHP xD

Las variables _REQUEST, _GET, _POST etc no son fijas ni se declaran/definen si no se indica. Por eso es normal que te diga que no existe.. porque nunca fue declarada. Por tanto ni es boolean ni es nada.

CitarEl acto inverso a isset, cual es?

El acto inverso de isset es !isset con un ! delante como en la mayoría de lenguajes basados en C/C++ :P

CitarUndefined index: sv in C:\Server\xampp\htdocs\index.php on line 5

Repito, tienes que saber si la variable ha sido declarada para poder usarla. Mira que es sencillo y te lo puse antes.

Código (php) [Seleccionar]
<?php

if(isset($_REQUEST['sv'])){

   
$gett htmlspecialchars($_REQUEST['sv']);
   
$gett hash('sha512'$gett);

   if(
$gett === hash('sha512','TWD')) { echo 'Coincide'; } else { echo 'No coincide.'; }

}


PD: No hagas doble post. El usa el botón modificar.

Saludos

venadHD

#4
El ultimo error me lo habia dado al intentar hacer la inverda de isset (con is_null) pero claro, es lo que tu me estás diciendo, el PHP hay que definir todo, porque no es nada (Al contrario de LUA que devuelve nil) enfin. Ya he solucionado el error con tus consegos en el codigo :D lo dejo aqui por si alguien le saca mejor partido :P

Aunque aun me quedan darle unos toques magicos con esos CSS y tablas.

PD: "El efecto inverso" o como quiera llamarse, funciona para variables?, perdon por ser tan noob, pero solo llevo un dia en PHP :P
Código (php) [Seleccionar]
$mivariable = "Holap";
if (!$mivariable == "Hola")  { echo 'Correcto'; }

Código (php) [Seleccionar]
<?php
//Creditos a #!drvy de foro.elhacker.net por la resolucion de errores en el codigo :D
$lang = array (
=> array(1=>hash('sha512','TWD'), 2=>'TWD (Rick y Supra server)')
);
echo 
'<html> <head> <title>TrosNos bug registry</title></head> <body>';
echo 
'<style> * {font-family: arial,sans-serif; font-weight: bold; font-size: 16px; color: #000000;}</style>';
if (!isset(
$_REQUEST['sv'])) {
echo "<br><ul><form name='servers' method='get' action='index.php'>
<p>Escoge tu servidor para ver los actuales bugs</p>
<SELECT NAME='sv' SIZE=1 WIDTH=100px>
<OPTION VALUE='
{$lang[1][1]}'>{$lang[1][2]}</OPTION>
</select><br>
<input type='submit'>
</form></ul>
"
;
}
if (isset(
$_REQUEST['sv'])) {
$gett=htmlspecialchars($_REQUEST['sv']);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($gett == hash('sha512''TWD')) { 
echo "<br><ul><a href='./'><button style='width=95%'>Volver atras</button></a></ul>";
echo "<ul><h2>Server reportado: {$lang[1][2]}</h2></ul>";
/* //PLANTILLA
$bugID = "";
$bug_titulo = "";
$descripcion = "";
$reproduccion = "";

echo "<center><table border=1 bordercolor=#000000 bgcolor=#DDDDDD cellspacing=0 cellpadding=5 width=95%>
<td width=15%>ID de bug</td><td># $bugID</td><tr>
<td>Título</td><td>$bug_titulo</td><tr>
<td>Descripción</td><td>$descripcion</td><tr>
<td>Reproducción</td><td>$reproduccion</td>

</table></center><br>";
*/
//Bug Slot #1
$bugID "1";
$bug_titulo "Spam al cambiar de nombre";
$descripcion "Binds: <br>bind 1 nick venad<br>bind 1 nick venad2<br><hr/>Y presionar muchas veces el bind 1";
$reproduccion "Siempre";

echo "<center><table border=1 bordercolor=#000000 bgcolor=#DDDDDD cellspacing=0 cellpadding=5 width=95%>
<td width=15%>ID de bug</td><td># 
$bugID</td><tr>
<td>Título</td><td>
$bug_titulo</td><tr>
<td>Descripción</td><td>
$descripcion</td><tr>
<td>Reproducción</td><td>
$reproduccion</td>

</table></center><br>
"
;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
} elseif($gett == '') {} else {
echo 'weon yo que te dije de experimentar con los enlaces ._.';
}
}


Cuando dije:
Cita de: venadHDHmm, para usar los hash, tendria que definirlo desde un principio en el metodo get por lo que veo.
me referia a esta parte del codigo: A que tendria que definir la string ("hasheada") ya en la form,sino no me lo reconoceria correctamente
Código (php) [Seleccionar]
$lang = array (
1 => array(1=>hash('sha512','TWD'), 2=>'TWD (Rick y Supra server)')
);
echo '<html> <head> <title>TrosNos bug registry</title></head> <body>';
echo '<style> * {font-family: arial,sans-serif; font-weight: bold; font-size: 16px; color: #000000;}</style>';
if (!isset($_REQUEST['sv'])) {
echo "<br><ul><form name='servers' method='get' action='index.php'>
<p>Escoge tu servidor para ver los actuales bugs</p>
<SELECT NAME='sv' SIZE=1 WIDTH=100px>
<OPTION VALUE='{$lang[1][1]}'>{$lang[1][2]}</OPTION>
</select><br>
<input type='submit'>
</form></ul>
";
}

#!drvy

CitarPD: "El efecto inverso" o como quiera llamarse, funciona para variables?, perdon por ser tan noob, pero solo llevo un dia en PHP :P

Funcionar funciona pero en ese caso que muestras estas comparando strings. Por tanto debes usarlo en el comparador.

Código (php) [Seleccionar]
$mivariable = "Holap";
if ($mivariable != "Hola")  { echo 'Correcto'; }


Para variables se usa cuando quieres que comparar bools con el contrario. Ejemplo:

Código (php) [Seleccionar]
$mivariable = true;
if(!$mivariable == false){ echo 'Falso'; } else { echo 'No falso'; }


En ese caso debería dar 'Falso' porque estas comparando el valor contrario de $mivariable.

Saludos

venadHD

Uh, perfecto, entonces entiendo. El ! es para indicar algo como "Si no es x" en las strings.
Y el ! en bools es el contrario. Algo parecido a lo que pasa en lua

Gracias por la ayuda!! Ya está solucionado este problema! :P
Deberian dar un premio al foro por las enseñanzas :O

PD: un fantasma abriendo la boca seria bueno xD