Forum: PC-Programmierung Fehler in php skript


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von test (Gast)


Lesenswert?

Hallo,

ich habe in meinem php skript einen Fehler aber finde ihn nicht...

hier das Skript
1
function check_recordExists($string_table, &$stringarray_rowvalue) {
2
3
 $string_where = "";
4
        
5
6
  foreach ($stringarray_rowvalue as $nr => $rowvalue)
7
  {
8
    
9
if (strlen($string_where) > 0)
10
     {
11
       $string_where = + 'AND' + $rowvalue["row"] + "=" + $rowvalue["value"];
12
  }
13
    else
14
{
15
16
 $string_where = $rowvalue["row"] + "=" + $rowvalue["value"];
17
echo $string_where;
18
}
19
20
21
$string_table="tet";
22
$stringarray_rowvalue[0][row]   = "Axel";
23
$string_rowvalue[0][value]  = "Pratzner";
24
echo check_recordExists($string_table,$string_rowvalue);

ausgabe ist
1
0

wo ist der Fehler??

von DPA (Gast)


Lesenswert?

Oje, da weiss man ja garnicht wo anfangen... Der falsche operator ist 
noch dein kleinstes Problem... SQL Injection hast du auch noch...

von Sven C. (sven_c)


Lesenswert?

Der Fehler ist schonmal das der Code unvollständig ist.
Es fehlen auf jeden Fall die schließenden Klammern für das foreach und 
für die Funktion.

Ansonsten gibst du keinen Wert zurück.
Wenn deine Funktion keinen Wert zurück gibt, ist der Wert null bzw. als 
Ausgabe dann eben 0 - das ist für PHP mehr oder weniger das gleiche.

von DPA (Gast)


Lesenswert?

Sven C. schrieb:
> Wenn deine Funktion keinen Wert zurück gibt, ist der Wert null bzw. als
> Ausgabe dann eben 0

Nö, "echo NULL;" ergibt keine Ausgabe. Aber strings werden mit . und 
nicht mit + verknüpft. "12" + "34" ergibt nicht "1234", sondern 46. "12" 
. "34" gäbe "1234". Und "keine 123 nummer" + "keine 123 nummer" ergibt 
nunmal 0. Wenn du Warnungen einschaltest, bekommst du da auch eine.

Aber wie hier das SQL Statement zusammengesetzt werden soll, ist grob 
fahrlässig. Schau dir mal prepared statements an, oder stelle zumindest 
anderweitig sicher, dass deine SQL Statements richtig escaped sind.

von Sven C. (sven_c)


Lesenswert?

Mea culpa.

Hab's gerade ausprobiert, stimmt null gibt keine Ausgabe.
Der falsche Operator ist mir im Halbschlaf gar nicht bewusst geworden.

Ob der Code allerdings für SQL Injections anfällig ist, ist doch stark 
davon abhängig woher die Variablen kommen und wie die Funktion genutzt 
wird.

Wenn der Code keinerlei Nutzer- bzw. Formulareingaben bearbeitet, 
sondern rein intern Daten verarbeitet, dann besteht auch wenig Chance 
auf eine SQL-Injection.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.