[PHP] "Notice: Undefined variable: action in....."

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HuggyB
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Hoi mensen,

ik probeer binaire data te schuiven in een MySQL database.
De databases staan klaar, doe het allemaal netjes, maar het upload script werkt niet naar behoren.

Ik ben met een tutorial aan de slag gegaan, en volgens de tutorial ziet het upload scriptje (add.php) er zo uit:

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

<?php
if ($action == "upload") {
// ok, let's get the uploaded data and insert it into the db now
include "open_db.inc";

if (isset($binFile) && $binFile != "none") {
$data = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
$strDescription = addslashes(nl2br($txtDescription));
$sql = "INSERT INTO tbl_Files ";
$sql .= "(description, bin_data, filename, filesize, filetype) ";
$sql .= "VALUES ('$strDescription', '$data', ";
$sql .= "'$binFile_name', '$binFile_size', '$binFile_type')";
$result = mysql_query($sql, $db);
mysql_free_result($result); // it's always nice to clean up!
echo "Thank you. The new file was successfully added to our database.<br><br>";
echo "<a href='main.php'>Continue</a>";
}
mysql_close();

} else {
?>
<HTML>
<BODY>
<FORM METHOD="post" ACTION="add.php" ENCTYPE="multipart/form-data">
<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000">
<INPUT TYPE="hidden" NAME="action" VALUE="upload">
<TABLE BORDER="1">
<TR>
<TD>Description: </TD>
<TD><TEXTAREA NAME="txtDescription" ROWS="10" COLS="50"></TEXTAREA></TD>
</TR>
<TR>
<TD>File: </TD>
<TD><INPUT TYPE="file" NAME="binFile"></TD>
</TR>
<TR>
<TD COLSPAN="2"><INPUT TYPE="submit" VALUE="Upload"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<?php
}
?>

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

Maar zoals ik al zei, ik krijg Notice: Undefined variable: action in d:\program files\apache group\apache\htdocs\add.php on line 2 als ik het script uitvoer.
Nu weet ik dat de PHP groep Register_Globals uit heeft gezet, en dat het hier misschien aan ligt. Ik heb dus weer aan gezet ("register_globals On" in php.ini) , Apache herstart, maar ik krijg nog steeds de foutmelding.
Hoe krijg ik "action" wel "defined"?

Ik draai Apache 1.3 (2.0 geen optie), en van PHP en MySQL de laatste versies.

[ Voor 18% gewijzigd door HuggyB op 26-10-2003 03:30 ]


Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 23:32

Beekforel

Is eigenlijk geen vis

PHP:
1
if ($action == "upload") {

Zou ik vervangen door iets als:
PHP:
1
2
3
4
if(!IsSet($action)) { 
  $action="blaat"; 
}
if($action == "upload") {


Even iets in $action zetten dus.
Heeft weinig met register_globals te maken, het is meer dat error_reporting op E_ALL staat, wat trouwens heel goed is.

Acties:
  • 0 Henk 'm!

  • ixi
  • Registratie: December 2001
  • Laatst online: 27-08 23:59

ixi

Het is sowieso een goede gewoonte om $_POST[] of $_GET[] te gebruiken.

Verder zou je eerst kunnen kijken of $action wel bestaat --> if (isset($action)) {...}

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Beekforel schreef op 26 October 2003 @ 03:41:
PHP:
1
if ($action == "upload") {

Zou ik vervangen door iets als:
PHP:
1
2
3
4
if(!IsSet($action)) { 
  $action="blaat"; 
}
if($action == "upload") {


Even iets in $action zetten dus.
da's een beetje eigenaardige constructie, om $action dan maar domweg een waarde te geven. Ik zou het liever zo doen:

PHP:
1
2
3
4
if (isset($action) && $action == "upload")
{
  // do your stuff
}


en, zoals eerder al opgemerkt, is het eigenlijk beter met superglobals te werken. dus

PHP:
1
2
3
4
if (isset($_POST['action']) && $_POST['action'] == "upload")
{
  // do your stuff
}
als dit uit een formulier komt

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

marty schreef op 26 October 2003 @ 17:02:
da's een beetje eigenaardige constructie, om $action dan maar domweg een waarde te geven. Ik zou het liever zo doen:
Dat is nou een defaultwaarde, waarom zou dat eigenaardig zijn ? ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Als we het dan toch netjes willen doen >:)

PHP:
1
2
3
4
5
6
7
if (!isset($_GET['action'])) {
 //-- default
} elseif ($_GET['action'] == 'ietsanders') {
 //-- doe iets anders
} else {
 //-- ongeldige actie opgegeven
}

Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

En als je echt overtuigd ben van je code kan je altijd nog

PHP:
1
error_reporting (E_ALL ^ E_NOTICE);


toepassen :+

Ja man


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 26 oktober 2003 @ 20:27:
Als we het dan toch netjes willen doen >:)

PHP:
1
2
3
4
5
6
7
if (!isset($_GET['action'])) {
 //-- default
} elseif ($_GET['action'] == 'ietsanders') {
 //-- doe iets anders
} else {
 //-- ongeldige actie opgegeven
}
Goed man! Je moet PHP programmeur worden ;)

Ik hoor de TS helemaal niet meer btw :? Lost dit het probleem op of niet?

[ Voor 15% gewijzigd door Spider.007 op 26-10-2003 23:59 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • HuggyB
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Ja sorry mensen, ik ben helemaal in de PHP MySQl scene ;)
Ik was vergeten dat ik dit topic had gemaakt... maar bedankt voor de input. :)

Maar ik kon geen verband brengen tussen deze notice fout en de nietwerkende upload functie. Maar dat uploaden heb ik nu opgelost... stomme fout met een slash... :O
Ik heb alleen nu wel dezelfde notice fout, maar dan met id_files, een attribuut uit een tabel uit een database. Die hele functie werkt niet... dat leek me overigens wat logischer. Ik zal even kijken wat ik ermee aan kan. Thanks. :)

-edit-

Oh, en wat vinden jullie van deze melding?

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in d:\program files\apache group\apache\htdocs\todatabasestuff\add.php on line 14

Thank you. The new file was successfully added to our database.

Continue


Ik zeur graag niet, want de bestanden staan inderdaad netjes in de database. :)
Maar ja, blijft wel een vage foutmelding (tijdje een cursus Java gevolgd... 1 fout daar en het was de doodstraf ;) ).


-edit2-

Nou, zal ik die andere fout er maar ook bij gooien? :P

Er zitten nu files in mijn database, met elke een id_file. Dat is vanaf 1, en loopt op naarmate er meer documenten bijkomen (auto increment)

Nu stuur ik "download.php?id=1" naar

download.php:


<?php
if ($id_files) {
include "open_db.inc";
$sql = "SELECT bin_data, filetype, filename, filesize FROM tbl_Files WHERE id_files=$id_files";

$result = @mysql_query($sql, $db);
$data = @mysql_result($result, 0, "bin_data");
$name = @mysql_result($result, 0, "filename");
$size = @mysql_result($result, 0, "filesize");
$type = @mysql_result($result, 0, "filetype");

header("Content-type: $type");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$name");
header("Content-Description: PHP Generated Data");
echo $data;
}
?>


Ik krijg deze fout "Notice: Undefined variable: id_files in " die wel te verhelpen is met de dingen die jullie me net leerden. Maar er gebeurd in beide (met of zonder foutmelding) gevallen helemaal niets.
Jammer, want ik zou best de plaatjes direct in het beeld willen laten verschijnen. Maarals hij nieteens wilt downloaden laat ik dat maar even zitten. :)
open_db.inc verzorgt gewoon de connectie naar de database.

Gezellie heh? :)

[ Voor 73% gewijzigd door HuggyB op 28-10-2003 03:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

download.php?id=1
if ($id_files) {
Zoek de tien verschillen...

Acties:
  • 0 Henk 'm!

  • HuggyB
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Wat moet ik er dan van maken? Hij moet niet alleen id1 vangen uiteraard.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ACM schreef op 26 oktober 2003 @ 18:46:
[...]

Dat is nou een defaultwaarde, waarom zou dat eigenaardig zijn ? ;)
omdat je een variabele die uit een post moet komen een default waarde geeft, terwijl er (misschien) helemaal niets gepost is. dat vind ik een rare (eigenaardige) methode. Volgens mij wil je liever dat die waarde gewoon ongeset blijft (lijkt mij in iedergeval een stuk netter)

Acties:
  • 0 Henk 'm!

  • HuggyB
  • Registratie: November 2001
  • Laatst online: 22-10-2020
Bedankt RobinVR, hij doet het nu wel ja.
Hij stuurt nu download.php?id_files=1

Bedankt mensen, ik ben nu echt een heel stuk verder!
Pagina: 1