ugrás a tartalomhoz

PHP adat kiolvasás probléma MySQL-ből space esetén

Petrusz · 2009. Jún. 18. (Cs), 11.47
Sziasztok,

Volt már valakinek problémája abból hogy varchar típusban a space kiolvasásakor rendetlenkedik a script, Megjegyzés rovatban lévő space-t hogy célszerű lekezelni?
beolvastatom az adatokat majd href en keresztül átadom egy másik lapnak majd a $_POST['x'] eltünteti a spacet, vagyis az aztán következő szöveget már nem értelmezi és az innentől következő adatkiolvasások is hibásak

Köszönöm,

Péter
 
1

konkrét hibát írd le

gex · 2009. Jún. 18. (Cs), 12.00
rendetlenkedik a script
rendetlenkedik az autóm, mi a baja?

href en keresztül átadom egy másik lapnak majd a $_POST['x'] eltünteti a spacet, vagyis az aztán következő szöveget már nem értelmezi és az innentől következő adatkiolvasások is hibásak
1. href-en keresztül? urlencode-ot használod? 2. ha get paraméterként adod át akkor hogy kerül a post tömbbe? 3. mi az az "aztán következő szöveg"? mi az hogy nem értelmezi? php nem szokott sztringeket értelmezni. 4. adatkiolvasás miből? ha adatbázisból akkor miért romlana el?
2

echo "<a

Petrusz · 2009. Jún. 18. (Cs), 14.38
echo "<a href=ACC.php?&AAA=M&AccM=".$row['Acc']."&ANameM=".$row['AName']."&HAS=".$row['HAS']."&Ename=".$row['Ename']."&GAAP=".$row['GAAP']." target=\"row\">M</a>";
ez a href és egy másik az ACC.php feldolgozza:
if (isset($_POST['mod']))
 {

$sqlm = "UPDATE acc SET Acc='".$_POST['MAcc']."' , AName= '".$_POST['MName']."', HAS= '".$_POST['HAS']."', Ename= '".$_POST['Ename']."', GAAP= '".$_POST['GAAP']."' WHERE C_ID='".$_SESSION['C_ID']."' AND Acc='".$_POST['AccM']."' AND AName='".$_POST['ANameM']."'";
//$sqlm = "UPDATE acc SET Acc=768 WHERE Acc=76867";
$querym = mysql_query($sqlm);    
 }



if(isset($_GET['AAA']))
{
    
 ?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
  <table>
    <tr>
     <td>Főkönyvi számlaszám:</td><td><input size="8" type="text" value="<?PHP echo $_GET['AccM']; ?>" name="MAcc" /></td>
     <td>Megnevezés:</td><td><input type="text" value="<?PHP echo $_GET['ANameM']; ?>" name="MName" /></td>
     <td>Beszámoló besorolás:</td><td><input type="text" value="<?PHP echo $_GET['HAS']; ?>" name="HAS" /></td>
      </tr><tr>
      <td>Angol neve:</td><td><input type="text" value="<?PHP echo $_GET['Ename']; ?>" name="Ename" /></td>
      <td>GAAP:</td><td><input type="text" value="<?PHP echo $_GET['GAAP']; ?>" name="GAAP" /></td>
     <input type="hidden" name="AccM" value="<?PHP echo $_GET['AccM']; ?>">
     <input type="hidden" name="ANameM" value="<?PHP echo $_GET['ANameM']; ?>">
     <td colspan="2" align="center"><input type="submit" name="mod" value="Módosít" /></td>
    </tr>
  </table>
</form>
  
<?PHP
     
}
igazad van nem POST hanem GET...

megnéztem ezt a urlencode-t ha csak a spacekat szeretném hogy kezelje akkor elég egy $b=str_replace(" ","_",$a)is, majd vissza $a=str_replace("_"," ",$b) ?
3

Encode

Poetro · 2009. Jún. 18. (Cs), 16.48
Minden URL-ben átadott paramtert legalább urlencode-olni kell. HTMLben a tulajdonságokban nem szereplhetnek speciális karakterek, mint pl. az &. HTML-ben érdemes - egyes változatokban kötelező -, az attributumok értékét " vagy ' jelbe tenni (előbbi preferált).
Ez valami ilyesmit eredményez:
echo
'<a href=ACC.php?AAA=M&amp;AccM='. urlencode($row['Acc']) 
.'&amp;ANameM='. urlencode($row['AName']) 
.'&amp;HAS='. urlencode($row['HAS']) 
.'&amp;Ename='. urlencode($row['Ename']) 
.'&amp;GAAP='. urlencode($row['GAAP']) 
.'" target="row">M</a>'
Egy valamivel szebben kinéző változat:
$fields = array(
  'AAA' => 'M',
  'ANameM' => $row['AName'],
  'HAS' => $row['HAS'],
  'Ename' => $row['Ename'],
  'GAAP' => $row['GAAP'],
);
$query = array();
foreach ($fields as $key => $value) {
  $query[] = urlencode($key) .'='. urlencode($value);
}
echo '<a href=ACC.php?'. implode('&amp;', $query) .'" target="row">M</a>';
4

Nagyon köszönöm!

Petrusz · 2009. Jún. 19. (P), 17.25
A megoldás működik! még valami a beoltás ellen elég ha str_replace($array,"*";$szoveg) védekezem?
5

Nem elég

Poetro · 2009. Jún. 19. (P), 18.59
Mindent meg kell tenni, hogy a felhasználó ne tehessen semmi rosszat. Pl. az összes POST változót kezeletlenül nem szabad használni. Adatbázis lekérdezések során pl. mysql_real_escape_string minden felhasználótól kapott változóra. Még jobb, ha számot vársza, akkor pl azzá kényszeríted a paramétert.