Jump to content
AlMalalah

[PHP] Undefined index: MyText

Recommended Posts

Posted (edited)


<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<meta charset="UTF-8">
<title></title>

</head>
<body>
<input type="text" name="MyText" value="tyrtyt" /></br>
<?php
// put your code here
if(isset($_POST['MyText'])){
$username = $_POST['MyText'];
print($username);
}else{
echo $username;
}

?>
</body>
</html>

Cand il rulez pe Xamp, in localhost imi da eroarea asta:

Undefined index: MyText.

As vrea sa corectez eroarea dar in asa fel incat atunci cand il urc pe server in forma finala sa nu aiba gauri de securitate.

Cum sa fac asta ?

Multumesc mult !

PS: 1. Este doar un textbox, fara buton de submit, iar in forma finala tot asa va fi, fara buton.

2. I-am dat asa la vrajeala o valoare statica de "tyrtyt".

Edited by AlMalalah
Posted (edited)

Stiu ca sunt offtopic, dar nu amesteca php cu html, nu in halul ala.

Il poti baga sus pe php simuland un Controller-View total dezorganizat, procedural, intr-un singur fisier si incalcand ceva standarde dar tot e mai bine decat amestecat.

Edited by eusimplu
Posted
In primul rand, ala nu va merge niciodata decat cu AJAX. Ca sa existe $_POST, tre' sa trimiti datele cu buton de tip submit, integrate frumos intr-un form valid, sau sa folosesti AJAX.

In al doilea rand, if-ul nu e true, deci trece la else, unde $username nu e definit dar totusi da eroarea ca si cum if-ul ar fi true. Why?

Esti sigur ca ala e codul?

Asta e codul. Vreau sa construiesc ceva de la zero.

Acuma stau si ma gandesc ca cred ca ai dreptate, e musai cu AJAX. Nu pot sa fac cu buton de submit catre un fisier php care sa primeasca datele fiindca aplicatia pe care vreau sa o construiesc nu e cu buton de submit acolo si nici nu ar avea sens sa aiba (e vorba de o aplicatie mai mare, ceva mult mai complicat).

Am pus echo $username; in else asa, de forma, ca sa vad mai mult ce se intampla, sa vad daca il "forteaza" sa-l foloseasca, oricum nu il lasam asa.

Multumesc de ajutor tuturor !

Posted
hint: utilizeaza smarty. php e php, template e template.

nu face ciorba din cod.

Smarty Sucks.

On Topic :


<?php

if(isset($_POST['submit']))
$myText = isset($_POST['my_text']) ? $_POST['my_text'] : '';

?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="POST">
<?php if(isset($myText)) : ?>
<div style="background: #e74c3c;color:#FFFFFF;padding:10px 15px;">
<?php echo $myText;?>
</div>
<?php endif;?>

<input type="text" name="my_text" value="<?php echo isset($myText) ? $myText : '';?>">

<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>

Posted

Da, dar mie imi trebuie fara buton de submit, doar textboxul si sa citeasca automat daca e scris ceva in textbox si daca e scris, ce anume e scris in textbox si sa afiseze. Ar trebui ceva gen .OnValueChanged si sa fie default pe 0 iar daca i se schimba valoarea automat sa o ia si sa o afiseze in timp real.

Posted

Asta ti se pare cod ... sau cod secure

1.daca trecei prin ph stiai ca poti pune simplu @ in gata lui $_P

2. nu e secure ce faci tu acolo ... nu sanitezi deloc imputurile si poti ajunge la sql sau xss foarte usor

3. eu m-as lasa de programare ...

<body>

<input type="text" name="MyText" value="tyrtyt" /></br>

<?php

// put your code here

if(isset($_POST['MyText'])){

$username = $_POST['MyText'];

print($username);

}else{

echo $username;

}

?>

</body>

Posted

@EAdrian: Nu stiu care ar trebui sa se lase din php dintre voi doi, dar eu te sfatuiesc sa intelegi ca daca eu o sa ajung sa citesc cod scris de tine unde voi vedea 50 de isset-uri voi inchide sublime-ul si ma voi intoarce la cafeaua mea linistita.

De ce? Prefer sa inteleg logica aplicatiei fara sa ma lovesc de cod inutil.

Pentru erorile utile doar in cazul de cautare a bug-urilor se foloseste PHP: set_error_handler - Manual.

Faza cu if la fiecare _REQUEST este foarte slab discutata, deoarece dupa cum sigur o sa-ti dai seama si singur nimeni nu-si pierde timpul cu a explica de ce cum face el e mai bine.

PS: Afirmatia mea se aplica doar in unele cazuri.

Posted

@Gecko: Nu, in nici un caz @ nu este un lucru bun! E acelasi lucru ca short if-uri cu isset, doar ca putin mai scurt, dar la fel de deranjant la ochi.

Mersi ca mi-ai dat ocazia sa explic ca din mesajul meu nu trebuie sa reiasa ca @ e mai bun ca short if cu isset.

Nici sa nu se inteleaga ca dau in cap celor ce folosesc un short if cu isset, doar ca mie in faza cand ajung sa citesc astfel de cod mi se pare deranjat.

Posted (edited)
@EAdrian: Nu stiu care ar trebui sa se lase din php dintre voi doi

.

Eu cred c? tu ar trebui s?-?i pui alt avatar c? probabil nu ?tii ce reprezint? acel simbol.

Ruleaz? în pula mea codul ?sta ?i vezi ce se întâmpl? când nu ai o verificare pe request


DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` varchar(69) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test` VALUES ('something');


$sanitize = @$_GET['hook']; //il sanitizezi cum vrei tu aici w/e
mysql_query("UPDATE `test` SET `id` = '".$sanitize."'") or die(mysql_error());

...apoi ruleaz?-l ?i p'?sta ?i descoper? diferen?a


$sanitize = isset($_GET['hook']) ? $_GET['hook'] : 0; /*or die('invalid request')*/
mysql_query("UPDATE `test` SET `id` = '".$sanitize."'") or die(mysql_error());

dar eu te sfatuiesc sa intelegi ca daca eu o sa ajung sa citesc cod scris de tine unde voi vedea 50 de isset-uri voi inchide sublime-ul si ma voi intoarce la cafeaua mea linistita.

.

Eu am v?zut codul t?u ?i am crezut c? m? sinucid când am v?zut în ce hal este scris.

PS: hahah HAHAHahahaha hahah aaa

Edited by EAdrian
Posted (edited)

@EAdrian:

Uita-te cum a scris Gecko, uita-te cum ai scris tu, o sa vezi ceva diferente,

Hai sa-ti explic de ce nu-mi place isset-ul.

Simplu, pentru ca eu prefer o validare putin mai detaliata., in exemplul de tine as valida daca $_GET['hook'] este int. Si in orice alte cazuri as folosii regex sa validez parametrii.

Pentru a verifica daca s-a facut submit as folosii $_SERVER['REQUEST_METHOD'], pentru a detalia ca acea secventa se aplica numai pentru tipul de REQUEST post.

Pentru ca vezi tu, intr-o structura MVC s-ar putea ca view-ul de submit si cel de form sa fie pe aceeasi actiune, si nu-i deloc frumos sa faci update pe un un request de tip GET.

--------------------------------------------------------

Poate ca am detaliat eu gresit inca de la inceput ce doream sa spun, si de asta tu mi-ai dat ceva in legatura cu tip-ul de request cand eu vorbeam de code readability. Daca e asa, spune-mi sa stiu sa reformulez.

Edited by eusimplu
Posted (edited)

Hai sa-ti explic de ce nu-mi place isset-ul.

Simplu, pentru ca eu prefer o validare putin mai detaliata., in exemplul de tine as valida daca $_GET['hook'] este int. Si in orice alte cazuri as folosii regex sa validez parametrii.

Pentru a verifica daca s-a facut submit as folosii $_SERVER['REQUEST_METHOD'], pentru a detalia ca acea secventa se aplica numai pentru tipul de REQUEST post.

Bun ai setat requestul c? este integer, dar dac? nu este setat? Ce se întâmpl?? Asta ?i era ideea din exemplul meu, c? dac? acel request nu este setat îti v? golii coloana respectiv?, o va face null, vid, etc., ai prins ideea.

Tu ai zis în postul anterior

Nu, in nici un caz @ nu este un lucru bun! E acelasi lucru ca short if-uri cu isset, doar ca putin mai scurt, dar la fel de deranjant la ochi.

Cum po?i spune c? e acela?i lucru ?

si nu-i deloc frumos sa faci update pe un un request de tip GET.

E doar un exemplu, rezultatul e acela?i ?i pe POST

Edited by EAdrian
Posted
Bun ai setat requestul c? este integer, dar dac? nu este setat? Ce se întâmpl?? Asta ?i era ideea din exemplul meu, c? dac? acel request nu este setat îti v? golii coloana respectiv?, o va face null, vid, etc.

Tu ai zis în postul anterior

Cum po?i spune c? e acela?i lucru ?

Din privinta a cat de usor imi este sa citesc despre ce se vorbeste in acel cod, e la fel.

Dar ai dreptate, ca functionalitate nu e deloc la fel, dar eu nu folosesc nici una din variante.

In general folosesc un custom handler pentru E_NOTICE, care ma ajuta enorm la debug.

Daca nu este setat atunci is_int va returna bool(false), ceea ce va genera o eroare ca input-ul nu a fost completat cu o valoare de tip INT. (eventual de validarea asta se ocupa o clasa speciala pentru form validation, nu-mi convine sa pierd timp cu ea)

Posted

Daca nu este setat atunci is_int va returna bool(false), ceea ce va genera o eroare ca input-ul nu a fost completat cu o valoare de tip INT. (eventual de validarea asta se ocupa framework-ul, nu-mi convine sa pierd timp cu ea)

?i dac? este string?

Dac? observi în ce am postat eu id nu este integer ci este string, dar probabil încercai s? te sco?i cumva. Bun... dar dac? verifici cu is_int, nu tot la acela?i c?cat ajungi s? verifici requestu ?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...