Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] php if problem. Was mach ich falsch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] php if problem. Was mach ich falsch

    hallo
    ich habe mir gestern mithilfe von einem php/mysql buch ein script zusammengeschrieben, das datensätze in einer textbox anzeigt und sich bearbeiten lässt. jetzt habe ich die inhalt über id`s geordnet, die ich in der datenbank hinterlegt habe. nun habe ich also 2 datenätze in unterschiedlichen zeilen in der mysql tabelle.
    damit ich beim ändern immer die richtige id auswähle habe ich das mit ifs gemacht:
    Code:
    Code:
    if ($id == 4) {};
    if ($id == 1 {};
    siehe unten im script

    oben beim einsetzten hat das schon gut geklappt, aber unten im script beim update tag komm ich glaube ich mit den klammern vom else durcheinander! wäre nett wenn ihr mir zeigen könntet was ich da falsch gemacht habe! danke . Es folgt der gesamte code:

    Code:
    <?php
    require_once "db_daten_test.php";
    $host = htmlspecialchars($_SERVER["HTTP_HOST"]);
    $uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");
    $extra = "anzeigen.php";
    if (empty($_POST["titel"])) { 
      if(!isset($_GET["id"]) || !is_numeric($_GET["id"])) {
         
       }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title>News verwalten</title>
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
      <style type="text/css">
      body { font-size: 80%; font-family: sans-serif; }
      </style>
    </head>
    <body>
    <?php
    
      $id = $_GET["id"];
      if ($id == 4){if($stmt = $mysqli->prepare("SELECT id, titel, text 
    		FROM aktuell WHERE id=?")) {
      $stmt->bind_param("i",  $id);
      $stmt->execute();
      $stmt->bind_result($id, $titel, $text);
      $stmt->fetch();
    
      $stmt->close();
      $mysqli->close();
      }
    }
    if ($id == 1){if($stmt = $mysqli->prepare("SELECT id, titel, text 
    		FROM inhalt WHERE id=?")) {
      $stmt->bind_param("i",  $id);
      $stmt->execute();
      $stmt->bind_result($id, $titel, $text);
      $stmt->fetch();
    
      $stmt->close();
      $mysqli->close();
      }
    }
    ?>
    
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
    Titel <br />
    <input type="text" name="titel" value="<?php echo htmlspecialchars($titel); ?>" /><br />
    Text <br />
    <textarea name="text" rows="5" cols="30"><?php echo htmlspecialchars($text); ?></textarea><br />
    <input type="hidden" name="id" value="<?php echo $id; ?>" />
    <input type="submit" />
    </form>
    </body>
    </html>
    <?php
    if ($id = 4){
    } else {
      $id = (int)$_POST["id"];
      if($stmt = $mysqli->prepare("UPDATE aktuell 
    		SET titel=?, text=? WHERE id=?")) {
        $titel = $_POST["titel"];
        $text = $_POST["text"];
        $stmt->bind_param("ssi", $titel, $text, $id);
        $stmt->execute();
        $stmt->close();
        $mysqli->close();
        
      }
    } 
    }
    if ($id = 1){
    } else {
      $id = (int)$_POST["id"];
      if($stmt = $mysqli->prepare("UPDATE aktuell 
    		SET titel=?, text=? WHERE id=?")) {
        $titel = $_POST["titel"];
        $text = $_POST["text"];
        $stmt->bind_param("ssi", $titel, $text, $id);
        $stmt->execute();
        $stmt->close();
        $mysqli->close();
        
      }
    } 
    
    ?>

  • #2
    Naja was soll das 2te if dort?

    PHP-Code:
     if ($id == 4){if($stmt $mysqli->prepare("SELECT id, titel, text 
            FROM aktuell WHERE id=?"
    )) { 
    Ansonsten schau ins Handbuch, die Syntax ist eigentlich ziemlich simple. Rück es gescheit ein, dann sollte es klar sein was passiert. Einfach mal jeden Schritt einzeln im Kopf durchgehen und überlegen was passiert.

    Kommentar


    • #3
      Zitat von Flor1an Beitrag anzeigen
      Naja was soll das 2te if dort?

      PHP-Code:
       if ($id == 4){if($stmt $mysqli->prepare("SELECT id, titel, text 
              FROM aktuell WHERE id=?"
      )) { 
      hallo, das ist zweimal da, je nachdem welche id ausgewählt wurde, das script auf unterschiedliche datenbank felde zugreift.

      Kommentar


      • #4
        1. Meine ich die Zeile die ich dir da hingeschrieben habe, warum sind da zwei if-Statements drin?
        2. Warum hast du den ganzen Code mit den Prepared Statements zwei mal? Die Stücke sind doch komplett gleich, was soll den anderes passieren wenn die ID mal 1 und mal 4 ist? Du programmierst es ja grade so dynamisch damit du es nur einmal schreiben musst und es je nach ID ausgeführt wird.

        Kommentar


        • #5
          keine ahnung, ich habe den code aus dem buch, und das äußere if habe ich dazu geschrieben. oben beim select funktioniert das schon gut, aber unten beim update nicht. Wie könnte man denn das ohne 2 ifs lösen?
          ja du hast schon recht, so furchtbar dynamisch ist das nactürlich nicht, aber das ist im moment das einzige was ich kann und deshalb habe ich das so gemacht. klar ich könnte auch einfach statt das so mit is zu machen dem vorscript sagen es soll ein neues script aufrufen, das ich statisch wo anders gespeichert habe, aber von der logik her müsste das so gehen.
          ich hatte mir auch überlegt es mit varaiblen zu machen sprich:
          Code:
          if ($id == 4) {¢datenbank = "aktuell";}
          if ($id == 1) {¢datenbank = "inhalt";}
          und die variable wird dann statt dem datenbank namen in select und update eingesetzt!
          geht aber auch nicht. ich denke das da nur ein formfehler oder das mit dem doppelten if falsch ist, aber von grundgedanken her müsste es meiner meinung nach funktionieren!

          Kommentar


          • #6
            Aber wieso hast du unterschiedliche Datenbanken pro ID? Was macht das für einen Sinn? Und warum packst du die Statements immer in ein IF ein? Also warum konkret:

            PHP-Code:
            if($stmt $mysqli->prepare("UPDATE aktuell 
                    SET titel=?, text=? WHERE id=?"

            Ich glaub du verstehst gar nicht was da passiert!

            Kommentar


            • #7
              das is ein fertiges script aus nem buch. das wird schon seine relevanz haben. ich habe nur die zusätzlichen ifs für die unterschiedlichen ids eingefügt!

              Kommentar


              • #8
                PHP-Code:
                if($stmt $mysqli->prepare("UPDATE aktuell 
                        SET titel=?, text=? WHERE id=?"

                Die Idee ist, dass prepare den Wert false liefert, wenn die „Preparierung“ des Statements fehlschlägt. Aber schön ist dieses „Zusammenziehen“/Ausnutzen von Seiteneffekten selten, auch wenn es eine Zeile Code sparen mag.

                Finde es immer ärgerlich, dass sowas in Büchern abgedruckt wird.

                PHP-Code:
                $stmt $mysqli->prepare("UPDATE aktuell 
                        SET titel=?, text=? WHERE id=?"
                );

                if (
                $stmt !== false) {
                    
                // ok

                Zum Problem: Der erste Block deines UPDATE-Codes steht beispielsweise auch innerhalb von if (empty($_POST["titel"])) { … }, der zweite steht dahinter.

                Wäre glaube ich hilfreich, wenn du auf Basis der gegebenen Antworten noch einmal deine aktuelle Scriptversion posten könntest. Am besten schöner eingerückt.

                Kommentar


                • #9
                  erstmal danke für eurer zahlreiche Hilfe, aber es geht immernoch nicht .. der macht das update einfach nicht.
                  hier der neue code :
                  PHP-Code:
                  <?php
                  require_once "db_daten_test.php";
                  $host htmlspecialchars($_SERVER["HTTP_HOST"]);
                  $uri  rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");
                  $extra "anzeigen.php";
                  if (empty(
                  $_POST["titel"])) { 
                    if(!isset(
                  $_GET["id"]) || !is_numeric($_GET["id"])) {
                       
                     }
                  ?>
                  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                  <html xmlns="http://www.w3.org/1999/xhtml">
                   <head>
                    <title>News verwalten</title>
                    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
                    <style type="text/css">
                    body { font-size: 80%; font-family: sans-serif; }
                    </style>
                  </head>
                  <body>
                  <?php

                    $id 
                  $_GET["id"];
                    if (
                  $id == 4){if($stmt $mysqli->prepare("SELECT id, titel, text 
                          FROM aktuell WHERE id=?"
                  )) {
                    
                  $stmt->bind_param("i",  $id);
                    
                  $stmt->execute();
                    
                  $stmt->bind_result($id$titel$text);
                    
                  $stmt->fetch();

                    
                  $stmt->close();
                    
                  $mysqli->close();
                    }
                  }
                  if (
                  $id == 1){if($stmt $mysqli->prepare("SELECT id, titel, text 
                          FROM inhalt WHERE id=?"
                  )) {
                    
                  $stmt->bind_param("i",  $id);
                    
                  $stmt->execute();
                    
                  $stmt->bind_result($id$titel$text);
                    
                  $stmt->fetch();

                    
                  $stmt->close();
                    
                  $mysqli->close();
                    }
                  }
                  ?>

                  <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                  Titel <br />
                  <input type="text" name="titel" value="<?php echo htmlspecialchars($titel); ?>" /><br />
                  Text <br />
                  <textarea name="text" rows="5" cols="30"><?php echo htmlspecialchars($text); ?></textarea><br />
                  <input type="hidden" name="id" value="<?php echo $id?>" />
                  <input type="submit" />
                  </form>
                  </body>
                  </html>
                  <?php
                  if ($id 4){
                  } else {
                    
                  $id = (int)$_POST["id"];
                   
                  $stmt $mysqli->prepare("UPDATE aktuell 
                          SET titel=?, text=? WHERE id=?"
                  );

                  if (
                  $stmt !== false) {
                      
                  // ok
                  }
                      
                  $titel $_POST["titel"];
                      
                  $text $_POST["text"];
                      
                  $stmt->bind_param("ssi"$titel$text$id);
                      
                  $stmt->execute();
                      
                  $stmt->close();
                      
                  $mysqli->close();
                      
                    

                  }
                  if (
                  $id 1){
                  } else {
                    
                  $id = (int)$_POST["id"];
                    
                  $stmt $mysqli->prepare("UPDATE aktuell 
                          SET titel=?, text=? WHERE id=?"
                  );

                  if (
                  $stmt !== false) {
                      
                  // ok
                  }
                      
                  $titel $_POST["titel"];
                      
                  $text $_POST["text"];
                      
                  $stmt->bind_param("ssi"$titel$text$id);
                      
                  $stmt->execute();
                      
                  $stmt->close();
                      
                  $mysqli->close();
                      
                    


                  ?>
                  ich weiß das da noch was mit den klammern nicht stimmt, aber wenn ich rumexperimentiere kommt immer ein error !!

                  Kommentar


                  • #10
                    PHP-Code:
                      if ($id == 4){if($stmt $mysqli->prepare("SELECT id, titel, text FROM aktuell WHERE id=?")) { 
                    //… CODE
                    }} 
                    Wohl eher so…

                    Kommentar


                    • #11
                      da entsteht dadurch dann en neuen fehlermeldung für die Zeile.. ich denke also nicht

                      Kommentar


                      • #12
                        dadurch entsteht dann eine neuen fehlermeldung für die Zeile

                        Kommentar


                        • #13
                          habe meinen letzten Beitrag editiert, da war 'n Tippfehler

                          Kommentar


                          • #14
                            ja lustig, genau das was du da geschrieben hast, steht doch auch im script !!

                            Kommentar


                            • #15
                              Zitat von Mamboobamboo Beitrag anzeigen
                              ja lustig, genau das was du da geschrieben hast, steht doch auch im script !!
                              Ups

                              mach mal var_dump($mysqli->prepare("…")); und var_dump($id) (nicht innerhalb des if's) und sag mir den Rückgabewert…

                              Kommentar

                              Lädt...
                              X