PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Form-Übergabe buggy?



lipeng
11.07.2003, 12:30
huhu, ich hab da n prob.. ^^

Ich wusste net, ob ichs nu nach HTML&CSS oder in dieses Forum schreiben sollte... Habs jetz erstma hierhin getan :)

Nun zu meinem Problem

ich habe in der 1. Datei ein Form


echo"
<form method="POST" action="zweitedatei.php">
<html zeug><input type="hidden" name="xxx" value="$xxx"><input type="hidden" name="yyy" value="$yyy">
<html zeug><input type="hidden" name="xxx" value="$xxx">
<html zeug><input type="hidden" name="xxx" value="$xxx">
<html zeug><input type="hidden" name="xxx" value="$xxx">
<html zeug><input type="hidden" name="xxx" value="$xxx">";
//und so weiter
//$xxx wären natürlich alles andere variablen


in der 2. Datei werden die Variablen ausgegeben (eigentlich in ne mysql tabelle geschrieben)..



echo $xxx;

// und so weiter

echo $yyy;



$yyy wird falsch ausgegeben, es ist IMMER eine 3, egal was ich eingebe... in der 1. Datei hab ich schon echo $yyy; gemacht und es kam die richtige Zahl.. hier aber nicht.. WIESO??

ich hoffe, ihr versteht mein problem :)

Master X
11.07.2003, 13:35
kannst du mal dein script schreiben denn hier finde ich keinen fehler....

li peng
11.07.2003, 14:28
ja, kann ich machen.. das ganze gehört zu nem grossen Onlinebörsenscript, das ich immom am coden bin.. das eine (confirm.php) ist die Bestätigung zur Eingabe von einem neuen Artikel, das zweite (addart.php) schreibt das ganze in ne mysql table...



//confirm.php (#1)

<?php
include("head.inc.php");

if(session_is_registered('xxx123')){
$_SESSION['usereu'] = $xxx123;


$host = "xxxxx";
$passwort = "xxx";
$dbname = "xxx";
$verbindung = mysql_connect($host, $dbname, $passwort);
mysql_connect($host, $dbname, $passwort);
mysql_select_db($dbname, $verbindung);


$sqlname = "SELECT * FROM artikel";
$qname = mysql_query($sqlname, $verbindung);



if($betreff!="")

{

if($menge<10)

{


if($beschreibung!="")

{


if($preis!="")

{

if($datei_name!="")

{

if(filesize($datei) < 200001)

{



$menge = rand(5,10);
$pass = array($menge);

for ($i = 0; $i <= ($menge - 1); $i++) {
$grossKlein = rand(1,2);
if ($grossKlein == 1)
{
$nmr = rand(97,121);
}
else
{
$nmr = rand(65,90);
}


$pass[$i] = chr($nmr);
}

$datn="";

for($i = 0; $i <= ($menge -1); $i++) {
$datn = "$pass[$i]" . "$datn";
}


if (copy ($datei, "./fotos/$datn"))

{
$foto=$datn;

}

else
{

$foto="none.gif";
}



}

else

{

echo"<div align="center">Das Foto, das Sie hinaufladen wollen ist zu gross (>200kb)</div><br>";
$foto="none.gif";

}


}
else
{
$foto="none.gif";
}

$cats = explode(",", $box);

$cat=$cats[0];
$sub=$cats[1];


echo"<div align="center"><b>Vorschau</b><br><br><table cellpadding="0" cellspacing="0" style="border-collapse: collapse" border="0" bordercolor="#111111" width="90%">";
echo"
<form method="POST" action="addart.php"><input type="hidden" name="cat" value="$cat">
<tr>
<td width="50%">Kurzbeschreibung</td>
<td width="50%">$betreff<input type="hidden" name="betreff" value="$betreff"></td>
</tr>
<tr>
<td width="50%">Menge</td>
<td width="50%">$menge<input type="hidden" name="menge" value="$menge"></td>
</tr>
<tr>
<td width="50%">Anbieter</td>
<td width="50%">$anbieter<input type="hidden" name="anbieter" value="$anbieter"></td>
</tr>
<tr>
<td width="50%">Wohnort des Anbieters</td>
<td width="50%">$ort<input type="hidden" name="ort" value="$ort"></td>
</tr>
<tr>
<td width="50%">Genaue Beschreibung</td>
<td width="50%">$beschreibung<input type="hidden" name="beschreibung" value="$beschreibung"></td>
</tr>
<tr>
<td width="50%">Kategorie:</td>
<td width="50%">$cat.$sub:";



$sqlname2 = "SELECT * FROM catlist WHERE id='$cat' AND sub='$sub'";
$qname2 = mysql_query($sqlname2, $verbindung);


$desk = mysql_result($qname2, 0, 1);

if($sub==0)
{
$desk2="";
}
else
{
$sqlname3 = "SELECT * FROM catlist WHERE id='$cat' AND sub='0'";
$qname3 = mysql_query($sqlname3, $verbindung);

$desk2 = mysql_result($qname3, 0, 1);

}


echo" $desk2 $desk </td>
</tr>
<tr>
<td width="50%">Foto</td>
<td width="50%">";

/*if($foto="none")
{
echo"Kein Foto";
}
else
{*/


echo"<img src="./fotos/".$foto.""><br>$foto<input type="hidden" name="foto" value="$foto">";


/*}*/



echo"</td>
</tr>
<tr>
<td width="50%">Preis</td>
<td width="50%">$preis<input type="hidden" name="preis" value="$preis"></td>
</tr>
";



echo"</table><br><br><table cellpadding="0" cellspacing="0" style="border-collapse: collapse" border="0" bordercolor="#111111" width="90%">
<tr>
<td width="50%">Ich akzeptiere die AGB:</td>
<td width="50%">
<select size="1" name="agb">
<option selected value="no">nein</option>
<option value="yes">ja</option>
</select></td>
</tr>
<tr>
<td width="50%"><br><input type="hidden" name="sub" value="$sub"><input type="submit" value="Artikel eintragen" name="B1"></form></td>
<td width="50%"><br>Wenn sie ihre Angaben korrigieren möchten, klicken Sie auf "Zurück" in ihrem Webbrowser</td>
</tr>

</table>
";



}else{
echo"<div align="center">Es müssen alle Felder ausgefüllt werden</div>";
}

}else{
echo"<div align="center">Es müssen alle Felder ausgefüllt werden</div>";
}

}else{
echo"<div align="center">Sie dürfen nur weniger als 10 Artikel gleichzeitig verkaufen</div>";
}


}else{
echo"<div align="center">Es müssen alle Felder ausgefüllt werden</div>";
}



}

else{echo"<div align="center">Sie sind nicht eingeloggt";}

echo"</div>";

include("foot.inc.php");
?>





//addart.php

<?php
include("head.inc.php");

if(session_is_registered('xxx123')){
$_SESSION['usereu'] = $xxx123;

$host = "xxxxx";
$passwort = "xxx";
$dbname = "xx";x
$verbindung = mysql_connect($host, $dbname, $passwort);
mysql_connect($host, $dbname, $passwort);
mysql_select_db($dbname, $verbindung);


$sqlname = "SELECT * FROM artikel";
$qname = mysql_query($sqlname, $verbindung);

$zeit=time();
$ip=getenv("REMOTE_ADDR");

$sqlname2 = "SELECT * FROM artkauf";
$qname2 = mysql_query($sqlname2, $verbindung);

$artnr = mysql_num_rows($qname) + mysql_num_rows($qname2) + 1;


if($agb==yes)

{

$sql = "INSERT INTO `artikel` ( `artnr` , `menge` , `betreff` , `preis` , `anbieter` , `ort` , `beschreibung` , `foto` , `zeit`, `ip`, `cat`, `catsub` ) VALUES ( "$artnr", "$menge", "$betreff", "$preis", "$anbieter", "$ort", "$beschreibung", "$foto", "$zeit", "$ip", "$cat", "$sub" ) ";


if(mysql_query($sql, $verbindung))

{


$sql3 ="ALTER TABLE `artikel` ORDER BY `zeit`";
mysql_query($sql3, $verbindung);

echo"<div align="center">Artikel eingetragen, <a href="showart.php">hier gehts zur liste ..</div></a>";

}


else

{

echo"Huch, da ist leider etwas schief gegangen" . mysql_errno() . " , " . mysql_error();

}

}

else

{

echo"<div align="center">Sie müssen die AGB akzeptieren, benutzen Sie den zurück Button Ihres Browsers</div>";

}


}

else{echo"<div align="center">Sie sind nicht eingeloggt</div>";}
include("foot.inc.php");
?>


bei echo $sub; kommt bei confirm.php die Zahl raus, die ich auch wollte (voher mit Dropdown Menü ausgewählt), mit "," getrennt wurden 2 Variablen versendet, diese im Confirm aufgesplittet, so kommen $cat und $sub zu stande, $sub stimmt. wenn ich aber nun $sub einzeln an addart.php weitergebe, kommt immer bei echo $sub; ne 3 als Wert...

Master X
11.07.2003, 15:17
hmmm.... komisch hab das mal so überflogen aber konnte nix finden....

li peng
11.07.2003, 18:25
deshalb frage ich mich, ob vielleicht die Form übergabe buggy sein könnte? Ich werde heut oder morgen das ganze mal so coden, dass $cat und $sub mit einer Variable durch komma getrennt weitergegeben werden und dann gesplittet, wie das ja confirm.php schon macht



$cats = explode(",", $box);
$cat=$cats[0];
$sub=$cats[1];


ich meld mich nochma ob das dann geht oder net

meikel
11.07.2003, 22:12
Original von li peng
das eine (confirm.php) ist die Bestätigung zur Eingabe von einem neuen Artikel, das zweite (addart.php) schreibt das ganze in ne mysql table...



//confirm.php (#1)
<?php
include("head.inc.php");
if(session_is_registered('xxx123')){
$_SESSION['usereu'] = $xxx123;
//
?>

Offenbar verwendest Du eine PHP Version >= 4.1.0. Wenn Du schon richtigerweise register_globals = Off hast und $_SESSION[] verwendest, dann solltest Du die Formularvariablen auch in $_GET oder $_POST suchen, weil dann in $xxx absolute Leere herrscht.
EDIT:
$_SESSION solltest Du verwenden.
/EDIT

Falls Du PHP 4.2.x verwendest, dann mach ein Update auf PHP 4.3.2. PHP 4.2.x hat einen ganz bösen Bug bei der Auswertung von indizierten Formularvariablen.

li peng
12.07.2003, 11:48
juhu, vielen dank für die Hilfe! ich werde das ganze mal abklären

/edit

also, das ganze sieht so aus:

ich hab version 4.1.2 und Register_globals on.. ich werde den provider um ein Update bitten.. oder gibts ne unkompliziertere Lösung?

meikel
12.07.2003, 13:45
Original von li peng
ich hab version 4.1.2 und Register_globals on.. ich werde den provider um ein Update bitten.. oder gibts ne unkompliziertere Lösung?
Schreibe doch erst mal in das Script, welches als action eingetragen wurde, ein phpinfo() rein, damit Du erst mal nachgucken kannst, wie PHP die Formularvariablen zur Verfügung stellt. Unter 'PHP Variables' werden alle aufgelistet, auf die Du zugreifen kannst. Es ist wesentlich einfacher, ein Script PHP >= 4.1.x tauglich zu schreiben, als eine neue PHP Version auf dem Server zu compilieren. Es tut nämlich überhaupt nicht weh, wenn Du im Script anstelle $formular die Variable $_REQUEST['formular'] verwendest. Jeder ordentliche Scripteditor verfügt über die Funktion "suchen und ersetzen".

li peng
12.07.2003, 14:07
oki, danke! ich meld mich nochmal wenn probleme auftauchen sollten

meikel
12.07.2003, 14:08
Hier mal (auf die Schnelle) Dein verändertes Script:

//addart.php

<?php

// das Session Handling ist etwas krude.
// Erst testen, ob der User authentifiziert ist. Falls nicht, ihn zum Login zurückschicken
// login.php registriert in der session die Variable User, wenn die Userangaben korrekt waren

session_start();
if(!isset($_SESSION['user'])
{
// das Forum haute hier [ url ] Tags rein. die müssen natürlich weg!
header("Location: http://deine-domain/login.php");
exit;
}

// ab hier sind alle ungebetenen Gäste weg

$_SESSION['usereu'] = $_REQUEST['xxx123'];

include("head.inc.php");

$host = "xxxxx";
$passwort = "xxx";
$dbname = "xx";

$verbindung = mysql_connect($host, $dbname, $passwort);
mysql_connect($host, $dbname, $passwort);
mysql_select_db($dbname, $verbindung);

$sqlname = "SELECT * FROM artikel";
$qname = mysql_query($sqlname, $verbindung);

$zeit=time();

$ip=$_SERVER['REMOTE_ADDR'];

$sqlname2 = "SELECT * FROM artkauf";
$qname2 = mysql_query($sqlname2, $verbindung);
$artnr = mysql_num_rows($qname) + mysql_num_rows($qname2) + 1;
if($_REQUEST['agb']==yes)
{
$sql = "INSERT INTO `artikel` ( `artnr` , `menge` , `betreff` , `preis` , `anbieter` , `ort` , `beschreibung` , `foto` , `zeit`, `ip`, `cat`, `catsub` ) VALUES
( '$_REQUEST[artnr]',
'$_REQUEST[menge]',
'$_REQUEST[betreff]',
'$_REQUEST[preis]',
'$_REQUEST[anbieter]',
'$_REQUEST[ort]',
'$_REQUEST[beschreibung]',
'$_REQUEST[foto]',
'$_REQUEST[zeit]',
'$_REQUEST[ip]',
'$_REQUEST[cat]',
'$_REQUEST[sub]' ) ";

if(mysql_query($sql, $verbindung))
{
$sql3 ="ALTER TABLE `artikel` ORDER BY `zeit`";
mysql_query($sql3, $verbindung);
echo"<div align="center">Artikel eingetragen, <a href="showart.php">hier gehts zur liste ..</div></a>";
}
else
{
echo"Huch, da ist leider etwas schief gegangen" . mysql_errno() . " , " . mysql_error();
}
}
else
{
echo"<div align="center">Sie müssen die AGB akzeptieren, benutzen Sie den zurück Button Ihres Browsers</div>";
}
include("foot.inc.php");
?>
Das ist nur ein Beispiel. Ob das Script überhaupt funktioniert, habe ich nicht getestet.

Dringend erforderlich ist allerdings, daß Du alle Formularvariablen dann mit addslashes() behandels, wenn auf Deinem Server magic_quotes_gpc = Off ist, um SQL-Injektionen zu vermeiden. Ich habe das aus Faulheit oben nicht mit reingetippert.

li peng
12.07.2003, 15:49
juhu, das ganze funktioniert wunderbar! /hug :D

ich mach mich nun an die arbeit und benutze für alle Form-Variablen $_REQUEST[], vielen dank für deine hilfe :)

meikel
12.07.2003, 16:04
Original von li peng
juhu, das ganze funktioniert wunderbar! /hug :D
Huch? Ein ungetestetes Script funktioniert auf Anhieb? Jesses... habe ich einen PHP Virus auf der Platte, der meine Syntaxfehler wegmiezt?

ich mach mich nun an die arbeit und benutze für alle Form-Variablen $_REQUEST[], vielen dank für deine hilfe :)
Gern geschehen.

lipeng
13.07.2003, 00:29
Huch? Ein ungetestetes Script funktioniert auf Anhieb? Jesses... habe ich einen PHP Virus auf der Platte, der meine Syntaxfehler wegmiezt?
nein, ich habe dein script nicht direkt übernommen, nur das wichtigste ^^