Georg: Parser error aufgrund Wildcards?

Hallo,
hab mir ein dynamisches Suchfomular mit checkboxen gebastelt und erhalte immer einen Parsererror in der Zeile, wo die <form> beginnt.

unexpected error in T_Variable

Hängt das mit der Wildcard (%) zusammen, oder warum sonst?

...
<table border="2" cellpadding="0" cellspacing="0" width="100%">
<?php
if (isset($submit)) {
 unset($submit);

$Name1 = trim($_POST["Name1"]);
$country = $_POST["cntry"];
$Field = $_POST["field"];
$Initator = $_POST["initator"];
$Friend = $_POST["Friend_Name"];
$PET = $_POST["PET"];
$Friend = $_POST["Friend_Name"];
//Variablencheck checkboxes:
$Cat = $_POST["Cat"];
$rabbit = $_POST["rabbit"];
$Dog = $_POST["Complete"];
$other = $_POST["Other"];

// Überprufung der Werte der Variablen, ob leer
 if ($Name1 ==""){$Name1 = '%';}
 if ($country ==""){$country = '%';}
 if ($Initator ==""){$Initator = '%';}
 if ($Friend ==""){$Friend = '%';}
 if ($PET ==""){$PET = '%';}
 if ($Cat ==""){$Cat = '%';}
 if ($Dog ==""){$field = '%';}
 if ($other ==""){$other = '%';}

$query = @mysql_query("SELECT * FROM $table WHERE Name1 LIKE '$Name1%' AND country LIKE '$country%' AND Initator LIKE '$Initator%' AND Friend LIKE '$Friend%' AND PET LIKE '$PET%' AND Cat LIKE '$Cat%' AND Dog LIKE '$Dog%' AND other '$other%') or die('Selection failed!');
$result = mysql_query($abufrage);
while($row = @mysql_fetch_object($result))  {
?>
<table>
<tr>
<td><?php =$row->Name1?></td>
<td><?php =$row->Friend?></td>
<td><?php =$row->Initator?></td>
<td><?php =$row->country?></td>
<td><?php =$row->Dog?></td>
<td><?php =$row->Pet?></td>
<td><?php =$row->Cat?></td>
<td><?php =$row->field?></td>
<td><?php =$row->other?></td>
</tr></table>
<?php
)
?>

<form method="post" action="<?php $PHP_SELF ; ?>" class="formlabel">
  <tr>
  <td width="70%" bgcolor="#0099FF"><font size="-1">This is the searching site!</font></td>
  <td width="10%" align="center" bgcolor="#0066FF"><a href="logout.php"><font size="-1" color="#000000"><b>LOGOUT</b></font></a></td>
  </tr>
 </table>

<table align="left">
  <tr>
    <td colspan="3"><font color="#FF0000" size="4">Please choose:</td>
    <td align="center"><div align="right"><b>Country:</b> </div></td>
    <td align="left"><select name="cntry">
        <option selected></option>
        <?php
$query = @mysql_query("SELECT * FROM country_list_table ORDER BY Country");

while ($result = @mysql_fetch_array($query)) {
  $country=$result['Country'];
           echo ("<option value$country">$country</options>");
     }
?>
      </select></td>

usw....

Danke für jeden Tipp,

Georg

  1. Hallo,

    hab mir ein dynamisches Suchfomular mit checkboxen gebastelt und erhalte immer einen Parsererror in der Zeile, wo die <form> beginnt.

    Du hast ein " nach ...AND other '$other%' vergessen.
    Probiere es mal aus...

    AndreD

  2. Hi,

    bist Du sicher, dass ) und nicht } da stehen muß?

    <?php
    )
    ?>

  3. Hi!

    unexpected error in T_Variable

    in welcher Zeile soll der Fehler aufgetreten sein? Und was steht in der Zeile, oder der davor?

    Hängt das mit der Wildcard (%) zusammen, oder warum sonst?

    Kommt der Fehler in dieser Zeile vor?

    <?php
    if (isset($submit)) {

    Was ist $submit? Wieso verwendest Du hier nicht auch $_POST, oder kommt es woanders her?

    // Überprufung der Werte der Variablen, ob leer
    if ($Name1 ==""){$Name1 = '%';}

    $query = @mysql_query("SELECT * FROM $table WHERE Name1 LIKE '$Name1%' AND country LIKE '$country%' AND Initator LIKE '$Initator%' AND Friend LIKE '$Friend%' AND PET LIKE '$PET%' AND Cat LIKE '$Cat%' AND Dog LIKE '$Dog%' AND other '$other%') or die('Selection failed!');

    in "or die('Selection failed!');" solltest Du auch SQL-Fehler ausgeben:
    or die('Selection failed: '.mysql_error());

    Außerdem, wenn $Name1... leer ist, wieso willst Du dann '%%' in der Query stehen haben? Gilt auch für alle anderen Variablen hier.

    $result = mysql_query($abufrage);
    while($row = @mysql_fetch_object($result))  {

    Wieso unterdrückst Du mögliche Fehlermeldungen hier(@)?

    <td><?php =$row->Name1?></td>

    Was ist das für eine Syntax?
    siehe: http://de3.php.net/manual/de/language.basic-syntax.php

    <form method="post" action="<?php $PHP_SELF ; ?>" class="formlabel">

    Wieso verwendest Du manchmal Superglobals und macnhmal nicht? Hier Solltest Du konsequenterweise $_SERVER['PHP_SELF'] verwenden, damit Dein Script auch mit "Register Globals = Off" funktioniert.

    Grüße
    Andreas

  4. Hello,

    <form method="post" action="<?php $PHP_SELF ; ?>" class="formlabel">

    ---------
    Was soll PHP den mit der Variable machen?

    <form method="post" action="<?php echo $_SERVER["PHP_SELF"] ; ?>" class="formlabel" method="POST" enctype="multipart/form-data">

    enctype="multipart/form-data" ist nur präventiv, falls Du auch Files uploaden willst. Sonst reicht die Default-Einstellung ohne enctype-Angabe.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hello,

      hab da noch ein Beispiel für Dich:
      http://bitworks.de/~selfHTML/where.php.txt

      Die beiden includes musst Du nur gegen

      $con = mysql_connect($host,$user,$password);

      austauschen mit Deinen eigenen Daten. Die anderen Funktionen und Konstanten aus den Include-Dateien habe ich in diesem Besipiel nicht benutzt.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. Danke vielmals aber das ist mir etwas zu hoch...,

        Ich habe derzeit null php praxis, da mich einzuarbeiten, dauert wohl wochen,

        Eigentlich wollte ich nur tips bezüglich datenbank ausgaben haben,...

        Findest du meine Idee mit der Überprüfung des Variableninhaltes so schlecht??

        Liebe Grüße,

        Georg

  5. Danke für eure Tipps,

    ich hatte einige Fehler drinnen.
    Vielleicht sollte ich in Zukunft die Bildschirmauflösung runterschrauben, damit ich zB. die Klammern besser von einander unterscheiden kann.

    Trotzem eine kleine Frage, ....

    Bekomme zwar keine Fehlermeldung mehr, aber auch keine Ausgabe ?

    Ausgabe soll durch

    <td><?php $row->Name1 ?></td>

    ermoeglich werden, was in meinen letzten php skript (vor 1 1/2 Jahren ohne probs gelaufen ist.

    1. Hallo,

      Ausgabe soll durch
      <td><?php $row->Name1 ?></td>
      ermoeglich werden, was in meinen letzten php skript (vor 1 1/2 Jahren ohne probs gelaufen ist.

      Wie ist die Klasse $row aufgebaut?

      Hoechstwahrscheinlich brauchst Du echo() oder print()

      <td><?php print($row->Name1) ?></td>

      Gruesse,

      Thomas

      1. Hello,

        <td><?php $row->Name1 ?></td>

        Wie ist die Klasse $row aufgebaut?

        Das sit eine gute Frage. Ist "Name1" denn eine Methode der Klasse? Wie ruft man denn Methoden auf? Das müsste dann doch wenigstens "$row->Name1()" heißen, oder?

        Hoechstwahrscheinlich brauchst Du echo() oder print()
        <td><?php print($row->Name1) ?></td>

        Darauf hatte ich aber schon einmal hingewiesen.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hallo Tom,

          <td><?php $row->Name1 ?></td>
          Wie ist die Klasse $row aufgebaut?
          Das sit eine gute Frage. Ist "Name1" denn eine Methode der Klasse? Wie ruft man denn Methoden auf? Das müsste dann doch wenigstens "$row->Name1()" heißen, oder?

          Da hast Du vermutlich recht.
          Ich brauche zwar manchmal Klassen zur Datenspeicherung,
          aber bisher habe ich (ausser dem Konstruktor natuerlich)
          noch nie Methoden in Klassen verwendet.

          Hoechstwahrscheinlich brauchst Du echo() oder print()
          <td><?php print($row->Name1) ?></td>

          Das Semikolon ";" ist hier zwar fakultativ.
          Ich wuerde es aber trotzdem ergaenzen:
          <td><?php print($row->Name1); ?></td>

          Darauf hatte ich aber schon einmal hingewiesen.

          Ja. 13:05 Uhr.
          Georg fragte 14:11 nochmals explizit nach, warum bei
          seiner komischen Syntax nichts passiert.
          Ich ging also davon aus, dass er es auch nach Deinem Posting
          nicht kapiert hatte. ;-)

          Gruesse,

          Thomas

        2. Hi,

          Also
          mein Suchformular hat mehre Auswahlmöglichkeiten.
          und jede hat einen eigen Namen, wie zB. Name1

          Nachdem ich die Seite mit dem Eintrag im Formular mit action"<php $_SERVER['PHP_SELF'] nocheimal aufrufen lasse, sobald der submit button gedrückt wird.

          Soll das Program mit post alle Variablen übergeben und anschliessend prüfen, ob ein Eintrag in das Textfeld, Dropdownlist, checkbox erfolgt ist. Sollte das nicht der Fall sein, soll er ein Wildcard der Variablen zuweisen und anschliessend bei der Datenbankabfrage den Eintrag oder die Wildcard als Suchkriterium (LIKE) verwenden.

          Anschliessend sollen alle Datensätze, die den Kriterien entsprechen aus der Datenbank geholt werden (MYSQL_FETCH_OBJECT) und mittels while ($row=MYSQL_FETCH_ROW($result)) {
          echo ($row->Name1);
          ...               ausgegeben werden.

          Nun habe ich folgende Meldung:

          mysql_fetch_row() supplied argument is not valid.

          Wieso, das letzte Mal hat es mit <p><?=$row->Postleitzahl?></p>
          ohne probleme funktioniert und diesmal nicht?

          1. Hallo,

            mysql_fetch_row() supplied argument is not valid.

            Da ist vermutlich schon die Query kaputt.
            Also der String, der mit "SELECT ... FROM ..." anfaengt.

            Lass Dir die Query anzeigen, und auch die Fehlermeldungen,
            die MySQL zurueckgibt.

            Nimm mal
            http://www.php.net/manual/de/ref.mysql.php#AEN59327
            als Vorbild.

            Gruesse,

            Thomas
              der sich fragt, woher all die Newbies den schlechten Code haben,
              der keine Fehlerbehandlung vorsieht.

            1. Hallo,

              mysql_fetch_row() supplied argument is not valid.

              Da ist vermutlich schon die Query kaputt.
              Also der String, der mit "SELECT ... FROM ..." anfaengt.

              Lass Dir die Query anzeigen, und auch die Fehlermeldungen,
              die MySQL zurueckgibt.

              Nimm mal
              http://www.php.net/manual/de/ref.mysql.php#AEN59327
              als Vorbild.

              Hallo Thomas,

              habe deinen Rat befolgt jedoch folgende Ausgabe bekommen:

              Warning: mysql_fetch_array()> supplied argument is not a valid MySQL result resource in c:\Apache Group.....

              Ist das ein Zeichen fuer eine kaputtes Query, meinst du ich habe zuviele LIKE parameter ??

              Oder liegt es an der Parameteruebergabe?

              Danke fuer jeden Tipp

              Georg

              1. Hallo,

                Ist das ein Zeichen fuer eine kaputtes Query, meinst du ich habe zuviele LIKE parameter ??

                Bin ich ein Hellseher?

                Lass Dir die Query anzeigen.

                echo $query;

                Schau, ob Du den Fehler selbst findest.
                Sonst poste die Query hier.

                Gruesse,

                Thomas

          2. Hello,

            Wieso, das letzte Mal hat es mit <p><?=$row->Postleitzahl?></p>

            ja, aber nicht mit <p><? $row->Postleitzahl ?></p>

            Die sogenannten short open tags sollte man sich lieber gleich wieder abgewähnen. Wenn z.B. xml eingesetzt wird, gibt das sofort Probleme.

            Also immer brav    <?php    schreiben.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      2. hi,

        Ausgabe soll durch
        <td><?php $row->Name1 ?></td>
        ermoeglich werden, was in meinen letzten php skript (vor 1 1/2 Jahren ohne probs gelaufen ist.

        Wie ist die Klasse $row aufgebaut?

        das dürfte ein standard-object von php sein, da er es mit
        $row = @mysql_fetch_object($result)
        erzeugt.

        dass die ausgabe dann nicht durch einfache angabe des variablennamens $row->Name1 passieren kann, sondern da noch ein echo o.ä. zugehört, sollte eigentlich klar sein :-/

        gruss,
        wahsaga

  6. hi,

    while($row = @mysql_fetch_object($result))  {
    ?>
    <table>
    <tr>
    <td><?php =$row->Name1?></td>
    <td><?php =$row->Friend?></td>
    <td><?php =$row->Initator?></td>
    <td><?php =$row->country?></td>
    ...

    hältst du diese schreibweise wirklich für sinnvoll, ständig den php-parser an- und wieder abzuschalten?

    wenn es sich um so wenig html-code handelt (die paar <td>...</td>-kombinationen), so würde ich hier ein echo, dass html-tags _und_ variablenwerte ausgibt, deutlich vorziehen ...

    gruss,
    wahsaga

    1. Hi!

      hältst du diese schreibweise wirklich für sinnvoll, ständig den php-parser an- und wieder abzuschalten?

      Auf jeden Fall, ist es das performanteste was man machen kann. Und in diesem Fall auch das am besten lesbare, IMHO.
      Wenn Du in den HTML-Modus gehst werden die Daten direkt ungesehen in den Ausgabepuffer befördert, bei echo "blabla" wird alles Mögliche geprüft, kommt da ne variable drin vor, irgendwelche Fehler, irgendwas excaped...

      wenn es sich um so wenig html-code handelt (die paar <td>...</td>-kombinationen), so würde ich hier ein echo, dass html-tags _und_ variablenwerte ausgibt, deutlich vorziehen ...

      Ansichtssache. Ich denke dagegen der HTML-Code überwiegt. HTML-Code gebe  ich fast nie mit echo aus.

      Grüße
      Andreas

      1. hi,

        Wenn Du in den HTML-Modus gehst werden die Daten direkt ungesehen in den Ausgabepuffer befördert, bei echo "blabla" wird alles Mögliche geprüft, kommt da ne variable drin vor, irgendwelche Fehler, irgendwas excaped...

        dann schreibe den reinen html-code halt in ' statt ". dann gibt es da nicht viel zu überprüfen, ausser auf die nächste stringunterbrechung - was aber m.E. auch nicht unperformanter sein dürfte, als ständig nach dem nächsten an- und abschalten des php-parsers zu suchen.

        gruss,
        wahsaga

        1. Moin!

          dann schreibe den reinen html-code halt in ' statt ". dann gibt es da nicht viel zu überprüfen, ausser auf die nächste stringunterbrechung - was aber m.E. auch nicht unperformanter sein dürfte, als ständig nach dem nächsten an- und abschalten des php-parsers zu suchen.

          Ich glaube, du mißverstehst die Funktionsweise von PHP. Das funktioniert bei weitem nicht so "simpel", wie es der Quellcode impliziert. Der Quelltext wird sehr wohl vorübersetzt, damit er zur Laufzeit schneller ausgeführt werden kann. Und diese Übersetzung eliminiert sämtliches "An- und Ausschalten" und überführt den außerhalb stehenden Text in ein sehr performantes "Text 1:1 ausgeben".

          Deine von dir vermutete Micro-Optimierung in diesem Punkt ist nicht existent und bringt nichts. Gut ist, was lesbarer Quelltext ist. Alles andere ist irrelevant.

          - Sven Rautenberg

          --
          Die SelfHTML-Developer sagen Dankeschön für aktuell 20065,57 Euro Spendengelder!