Länge von Variablen begrenzt?

budking

Mitglied
Probleme bei der Übergabe von Variablen?

Habe ein kleines Problem bei der Übergabe einer Variablen.
Ich habe ein Script geschrieben, mit welchem ich die Daten aus einer lokalen MicrosoftSQL Datenbank auslese und mit Hilfe eines Formulars an eine Mysql Datenbank weitergebe.

Die Daten werden erst in arrays eingelesen, sprich ich habe für jede Spalte ein array.
$artnr, $bezeichnung, $inhalt...

Mit implode wandel ich die einzelnen arrays anschliesend in einen String um. Dieser wird dann mit Hilfe eines Formulars versendet.

Auf der nächsten Seite kommt aber nur eine Teil der einzelnen Variablen an. Während zum Beispiel die Variable $artnr komplett übertragen wird, kommen von der Variable $bezeichnung nur ein paar Zeilen an.

Richtig eingelesen wurde die Variable. Wenn ich Sie vor dem Senden via echo ausgeben lasse ist noch alles da. Auf der nächsten Seite fehlt dann aber ein Großteil.

Ich hoffe mal ich habe mich einigermasen verständlich ausgedrückt.
 
Zuletzt bearbeitet:
Nun spontan erschwert sich der Verdacht das du statt POST GET als Objekt Submit() Methode benutzt. Das Währe fatal, denn du kannst nur 512 - 1024 oder so ähnlich an Zeichen verschicken.

Du musst quasi bei dem Objekt form[] das Attribut method auf POST umstellen.

Wenn es nicht der Fall ist explodest bzw. implodest du falsch. Versuche nach dem Versenden des Formulares auf der nächsten Seite gleich am Anfang die entsprechende Variable auszugeben per $_REQUEST[perm], wobei die Variable perm hier in diesem Beispiel nur als Beispiel dient.

Theoretisch und auch Praktisch(Ja Nein Fall), um dein Thread Titel zu beantworten, kann eine Variable unendlich an Zeichen besitzen bzw. Speicher zugeordnet werden.

In diesem Sinne
 
Danke für die schnellen Antworten. Aber die Variablen werden schon mit post übergeben und am Anfang des nächsten Scripts mit $_REQUEST wieder eingelesen.

Mein impode Befehl sieht so aus

PHP:
		$BEZ1 = implode('|', $BEZ1);

mein explode Befehl dementsprechend so

PHP:
		$BEZ1 = explode('|', $BEZ1);
 
Zuletzt bearbeitet:
Tja, ohne mehr Code geht bei uns nichts. Gebe per print $_Request[BEZ1] die Variable im Browser aus, wenn Sie da nicht vollständig ist melde dich noch einmal mit mehr Code.

In diesem Sinne
 
Die Variable war nicht vollständig

Hier mein Code für die erste Seite

PHP:
elseif ($_GET['tab'] == artikel) {

		$connectionstring = odbc_connect("***", "***", "***"); 
		
		
		$Query = "SELECT ARTNR, BEZ1, BEZ2, PRODUKTGRP, GEBINHALT, GEBINDETYP, DICHTE FROM ARTSTA"; 
		$queryexe = odbc_do($connectionstring, $Query); 
		
		$i = 0;
		while(odbc_fetch_row($queryexe)) 
			{ 
			 
		
			$ARTNR[$i] = odbc_result($queryexe, 1); 
			$BEZ1[$i] = odbc_result($queryexe, 2); 
			$BEZ2[$i] = odbc_result($queryexe, 3); 
			$PRODUKTGRP[$i] = odbc_result($queryexe, 4); 
			$GEBINHALT[$i] = odbc_result($queryexe, 5); 
			$GEBINDETYP[$i] = odbc_result($queryexe, 6); 
			$DICHTE[$i] = odbc_result($queryexe, 7); 
			$i++; }

		odbc_close($connectionstring); 



		
		echo '<table border="1">';
for ($i = 0; $i < count($ARTNR); $i++) {    
	
	echo '<tr> 
    <td width="100">&nbsp;'.$ARTNR[$i].'</td> 
    <td width="100">&nbsp;'.$BEZ1[$i].'</td> 
    <td width="100">&nbsp;'.$BEZ2[$i].'</td>                                Die Tabelle ist noch vollständig
    <td width="100">&nbsp;'.$PRODUKTGRP[$i].'</td>
    <td width="100">&nbsp;'.$GEBINHALT[$i].'</td>
	<td width="100">&nbsp;'.$GEBINDETYP[$i].'</td>
    <td width="100">&nbsp;'.$DICHTE[$i].'</td>
	</tr>';
}
echo '</table>';
echo count($BEZ1);	// =2837	
echo '<br><br>';
echo count($BEZ2);	// =2837	
echo '<br><br>';

		$ARTNR = implode('|', $ARTNR);
		$BEZ1= implode('|', $BEZ1);
		$BEZ2 = implode('|', $BEZ2);
		$PRODUKTGRP = implode('|', $PRODUKTGRP);
		$GEBINHALT = implode('|', $GEBINHALT);
		$GEBINDETYP = implode('|', $GEBINDETYP);
		$DICHTE = implode('|', $DICHTE);
		
echo $BEZ1;  //Hier ist noch alles vorhanden
echo '<br><br>';
echo $BEZ2;  //Hier ebenfalls


echo '<table height="100%" width="100%"><tr align="center" valign="bottom"><td><b>Beim Update werden alle bestehenden Datensätze <br>gelöscht
												und durch neue ersetzt.</b></td></tr><tr align="center" valign="top"><td>		
				
		<form action=./includes/upartsta.php method="post">
		<input type="hidden" name="ARTNR" value="'.$ARTNR.'">
				<input type="hidden" name="BEZ1" value="'.$BEZ1.'">
				<input type="hidden" name="BEZ2" value="'.$BEZ2.'">
				<input type="hidden" name="PRODUKTGRP" value="'.$PRODUKTGRP.'">
				<input type="hidden" name="GEBINHALT" value="'.$GEBINHALT.'">
				<input type="hidden" name="GEBINDETYP" value="'.$GEBINDETYP.'">
				<input type="hidden" name="DICHTE" value="'.$DICHTE.'">
		<input type="button" value="<<zurück" onClick="history.back();" style="width: 160px"> 
		<input name="submit" type="submit" value="Update ARTSTA" style="width: 160px"></form>
		</td></tr></table>'; 
	}

upartsta.php sieht so aus

PHP:
<?php


$ARTNR=$_REQUEST['ARTNR'];
$BEZ1=$_REQUEST['BEZ1'];
$BEZ2=$_REQUEST['BEZ2'];
$PRODUKTGRP=$_REQUEST['PRODUKTGRP'];
$GEBINHALT=$_REQUEST['GEBINHALT'];
$GEBINDETYP=$_REQUEST['GEBINDETYP'];
$DICHTE=$_REQUEST['DICHTE'];


$ARTNR = explode('|', $ARTNR);
$BEZ1= explode('|', $BEZ1);
$BEZ2 = explode('|', $BEZ2);
$PRODUKTGRP= explode('|', $PRODUKTGRP);
$GEBINHALT= explode('|', $GEBINHALT);
$GEBINDETYP= explode('|', $GEBINDETYP);
$DICHTE = explode('|', $DICHTE);

echo count($BEZ1);    // =45
echo count($BEZ2);    // =0

include('dbconnect.php');

$sql = 'TRUNCATE `artikel` '; 
mysql_query ($sql); 


		echo '<table border="1">';
for ($i = 0; $i < count($ARTNR); $i++) {    
	
	echo '<tr> 
    <td width="100">'.$ARTNR[$i].'</td> 
    <td width="100">'.$BEZ1[$i].'</td> 
    <td width="100">'.$BEZ2[$i].'</td>                                      Hier fehlt dann bei BEZ1 ein großteil und bei BEZ2 alles
    <td width="100">'.$PRODUKTGRP[$i].'</td>
    <td width="100">'.$GEBINHALT[$i].'</td>
	<td width="100">'.$GEBINDETYP[$i].'</td>
    <td width="100">'.$DICHTE[$i].'</td>
	</tr>';
}
echo '</table>';


for ($i = 0; $i < count($ARTNR); $i++) {

$sql3 = "INSERT INTO artikel (ARTNR, BEZ1, BEZ2, Stammnr, Inhalt, gebid, dichte) VALUES ('$ARTNR[$i]', '$BEZ1[$i]', '$BEZ2[$i]', '$PRODUKTGRP[$i]', '$GEBINHALT[$i]', '$GEBINDETYP[$i]', '$DICHTE[$i]')";

mysql_query ($sql3); 
}

//header ("Location: ../update.htm");
?>

Bin am verzweifeln. Es funktioniert bei 4 von 5 Tabellen nur mit dieser ärgere ich mich seit Tagen rum. Bin für jede Hilfe Dankbar
 
Zuletzt bearbeitet:
Mal eine dumme Frage.

Kann es zu Poblemen kommen wenn Anführungszeichen in den Variablen vorkommen?

Genau an der Stelle wo es zu Problemen kommt ist ein Anführungszeichen.
 
Alles klar, genau hier lag mein Problem.

Habe die Abfrag mal ohne die Werte mit Anführungszeichen gemacht und siehe da, es funktioniert.

Hat jemand einen Tipp, wie die Variablen trotz Anführungszeichen übergeben könnte. Danke.
 
Hier, auf diese Funktionen bin ich gerade irgendwo anders hier im Forum gestossen [phpf]rawurlencode[/phpf] und [phpf]rawurldecode[/phpf].

Probier die mal!
 
Nun wenn es daran lag...

Lies doch einmal bitte unter der PHP.NET Referenz die Funktion htmlspecialchars nach. Diese Funktion wandelt alle HTML relevanten Syntaxe korrekt um. Also wenn du z.B. schreibst: <, dann wandelt die Funktion dies in &lt; um, damit keine Schwierigkeiten bei der Bearbeitung aufkommen.

Aber ehrlich gesagt finde ich es persönlich seltsam, dass es an den Anführungszeichen gelegen habe soll. WIrklich Seltsam. Bei Clientseitigen Sprachen würde ich es verstehen aber bei Scriptsprachen...

Eine weitere gute Funktion die du vielleicht gebrauchen kannst ist diese hier:

stripslashes() Dies Funktion wandelt diese \" in " um.

In diesem Sinne
 
Zurück