|
You last visited: Today at 05:18
Advertisement
php columncount / überprüfung
Discussion on php columncount / überprüfung within the Web Development forum part of the Coders Den category.
06/24/2016, 20:27
|
#1
|
elite*gold: 200
Join Date: Mar 2011
Posts: 352
Received Thanks: 9
|
php columncount / überprüfung
Guten Tag.
hab ein kleines Problem. un zwar möchte ich Datensätze anzeigen lassen. Falls keiner gefunden wurde soll er mit einem exit erstmal sagen das keine gefunden wurde. Nur klappt es nicht.
PHP Code:
<?php $path = __DIR__ . '/config/con.php'; require_once $path; ?> <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"/> <title>Data</title> <link rel="stylesheet" href="style_data.css" type="text/css"/> <link rel="stylesheet" href="normalize.css" type="text/css"/> </head> <body> <header role="banner" id="header"> <div class="content"> <h1 class="data_main_title">Social Datas</h1> <nav class="navigation"> <ul> <li><a href="#">Facebook-Data</a></li> <li><a href="#">Twitter-Data</a></li> <li><a href="#">Google+-Data</a></li> <li><a href="#">Instagramm-Data</a></li> </ul> </div> </header> <main> <div class="content"> <form action="" method="POST"> <?php if(isset($_POST['send_datas'])) { $data = $_POST['show_datas']; if(empty(trim($data))) { $error = 'Das Feld darf nicht leer sein.'; } elseif(strlen($data) < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; } elseif(strlen($data) > 20) { $error = 'Das Feld darf länger als 20 Zeichen sein.'; } elseif(!ctype_alpha($data)) { $error = 'Bitte nur deutsche Buchstaben verwenden.'; } else { $sql = 'SELECT vorname,nachname FROM data WHERE vorname = ?;'; $stmt = $connect->prepare($sql); if(!$stmt) { echo $stmt->errorInfo(); } $stmt->BindValue(1, $data, PDO::PARAM_STR); if(!$stmt->execute($para)) { echo $stmt->errorInfo(); } $count = $stmt->ColumnCount(); if($count > 0) { exit("Es wurden keine Datensätze gefunden"); } ?> <table border="1"> <tr><td>Vorname</td> <td>Nachname</td></tr> <? $row = $stmt->fetch(PDO::FETCH_ASSOC); ?> <tr> <td> <?php echo $row['vorname']; ?> </td> <td><?php echo $row['nachname']; ?> </td> </tr> <? exit; } echo '</table>'; } ?> <?php if($error) { echo $error; } ?> <p><input type="text" name="show_datas" placeholder="Ein Name"></p> <p><input type="submit" name="send_datas" placeholder="Daten Absenden"></p> </div> </main> </body> </html>
Problem: Egal ob es den Datensatz gibt oder nicht er zeigt mir immer an: Es wurde kein Datensatz gefunden.
|
|
|
06/24/2016, 21:29
|
#2
|
elite*gold: 0
Join Date: Apr 2015
Posts: 428
Received Thanks: 361
|
1. Hast du hier einen kleinen Überlegungsfehler:
PHP Code:
if(empty(trim($data))) { $error = 'Das Feld darf nicht leer sein.'; } elseif(strlen($data) < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; } elseif(strlen($data) > 20) { $error = 'Das Feld darf länger als 20 Zeichen sein.'; }
Sollte eigentlich...
PHP Code:
function str_trim($s) { $l = $i = 0, $n = ''; while ($c = $s[$i++]) if ( $c !== ' ' && $c !== '\r' && $c !== '\n' && $c !== '\t' && $c !== '\f') { $n .= $c; $l++ } return ['string' => $n, 'length' => $l]; }
$data = str_trim($data);
if ($data['length'] === 0) { $error = 'Das Feld darf nicht leer sein.'; }
elseif($data['length'] < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; }
elseif($data['length'] > 20) { $error = 'Das Feld darf länger als 20 Zeichen sein.'; }
elseif(!ctype_alpha($data['string'])) { $error = 'Bitte nur deutsche Buchstaben verwenden.'; }
//.. ect.
sein, da ja ein Name im Name keine Leerzeichen enthalten darf und du so ebenfalls schneller prüfst, wobei beide nicht multi_byte safe sind
Und was du brauchst ist
PHP Code:
count($row) === 0;
|
|
|
06/24/2016, 21:33
|
#3
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
|
Schau nochmal über dein Script, den du prüfst z.b. ob die Anzahl (count) GRÖßER ist (sprich wenn Einträge vorhanden sind) und machst dann ein exit mit "Es wurden keine Datensätze gefunden".Das macht schon einmal kein Sinn, dann würde ich mal behaupten ein exit dort zu benutzen ist naja.. nicht schön(hast doch schon eine error Variable ?).
Kleiner Tipp bzg. dem Bindvalue, mach im SQL kein ? sonder :firstname und beim bindvalue selber statt 1 dann 'firstname'.
Das ganze ist deutlich übersichtlicher wenn du nachher größere SQLs hast.
Quote:
Originally Posted by #Metho
1. Hast du hier einen kleinen Überlegungsfehler:
PHP Code:
if(empty(trim($data))) { $error = 'Das Feld darf nicht leer sein.'; } elseif(strlen($data) < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; } elseif(strlen($data) > 20) { $error = 'Das Feld darf länger als 20 Zeichen sein.'; }
Sollte eigentlich...
PHP Code:
function str_trim($s) { $l = $i = 0, $n = ''; while ($c = $s[$i++]) if ( $c !== ' ' && $c !== '\r' && $c !== '\n' && $c !== '\t' && $c !== '\f') { $n .= $c; $l++ } return ['string' => $n, 'length' => $l]; }
$data = str_trim($data);
if ($data['length'] === 0) { $error = 'Das Feld darf nicht leer sein.'; }
elseif($data['length'] < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; }
elseif($data['length'] > 20) { $error = 'Das Feld darf länger als 20 Zeichen sein.'; }
elseif(!ctype_alpha($data['string'])) { $error = 'Bitte nur deutsche Buchstaben verwenden.'; }
//.. ect.
sein, da ja ein Name im Name keine Leerzeichen enthalten darf und du so ebenfalls schneller prüfst, wobei beide nicht multi_byte safe sind
Und was du brauchst ist
PHP Code:
count($row) === 0;
|
Leider bist du an einer falschen stelle, ließ sein Beitrag nochmal er redet vom COUNT und das ausgeben wird das keine Einträge vorhanden sind.
(was nicht heißt das dein Beitrag dennoch richtig sein kann)
|
|
|
06/24/2016, 21:47
|
#4
|
elite*gold: 0
Join Date: Apr 2015
Posts: 428
Received Thanks: 361
|
Quote:
Originally Posted by .ƒaℓsє.
Leider bist du an einer falschen stelle, ließ sein Beitrag nochmal er redet vom COUNT und das ausgeben wird das keine Einträge vorhanden sind.
(was nicht heißt das dein Beitrag dennoch richtig sein kann)
|
Ist schon richtig wie ich's gesagt habe, count() macht ja ebenfalls das, was er möchte
sonst kann er um noch schneller zu sein auf Falschheit prüfen
PHP Code:
if (!$row) { /* wenn keine Datensätze gefunden wurden */ }
|
|
|
06/24/2016, 22:32
|
#5
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
|
Quote:
Originally Posted by #Metho
Ist schon richtig wie ich's gesagt habe, count() macht ja ebenfalls das, was er möchte
sonst kann er um noch schneller zu sein auf Falschheit prüfen
PHP Code:
if (!$row) { /* wenn keine Datensätze gefunden wurden */ }
|
Okay das ganz unten habe ich wohl übersehen
|
|
|
06/26/2016, 19:21
|
#6
|
elite*gold: 200
Join Date: Mar 2011
Posts: 352
Received Thanks: 9
|
Danke für die Funktion. So, problem besteht aber weiterhin. Obwohl ein Datensatz existiert sagt er mir das es keine gibt.
Quote:
PHP Code:
<?php $path = __DIR__ . '/config/con.php'; require_once $path; ?> <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"/> <title>Data</title> <link rel="stylesheet" href="style_data.css" type="text/css"/> <link rel="stylesheet" href="normalize.css" type="text/css"/> </head> <body> <header role="banner" id="header"> <div class="content"> <h1 class="data_main_title">Social Datas</h1> <nav class="navigation"> <ul> <li><a href="#">Facebook-Data</a></li> <li><a href="#">Twitter-Data</a></li> <li><a href="#">Google+-Data</a></li> <li><a href="#">Instagramm-Data</a></li> </ul> </div> </header> <main> <div class="content"> <form action="" method="POST"> <?php if(isset($_POST['send_datas'])) { $data = $_POST['show_datas']; function str_trim($s) { $l = $i = 0; $n = ''; while ($c = $s[$i++]) if ( $c !== ' ' && $c !== '\r' && $c !== '\n' && $c !== '\t' && $c !== '\f') { $n .= $c; $l++; } return ['string' => $n, 'length' => $l]; }
$data = str_trim($data);
if($data['length'] === 0) { $error = 'Das Feld darf nicht leer sein.'; } elseif($data['length'] < 2) { $error = 'Das Feld darf nicht kürzer als 2 Zeichen sein.'; } elseif($data['length'] > 20) { $error = 'Das Feld darf nicht länger als 20 zeichen sein.'; } elseif(!ctype_alpha($data['string'])) { $error = 'Bitte nur deutsche Buchstaben verwenden.'; } else { $sql = 'SELECT vorname,nachname FROM data WHERE vorname = :vorname;'; $stmt = $connect->prepare($sql); if(!$stmt) { echo $stmt->errorInfo(); } $stmt->BindValue('vorname', $data['string'], PDO::PARAM_STR); if(!$stmt->execute($para)) { echo $stmt->errorInfo(); } if(count($row) === 0) { exit("Keine Datensätze gefunden."); } ?> <table border="1"> <tr><td>Vorname</td> <td>Nachname</td></tr> <? $row = $stmt->fetch(PDO::FETCH_ASSOC); ?> <tr> <td> <?php echo htmlentities($row['vorname']); ?> </td> <td><?php echo htmlentities($row['nachname']); ?> </td> </tr> <? exit; } echo '</table>'; } ?> <?php if($error) { echo $error; } ?> <p><input type="text" name="show_datas" placeholder="Ein Name"></p> <p><input type="submit" name="send_datas" placeholder="Daten Absenden"></p> </div> </main> </body> </html>
|
|
|
|
06/26/2016, 19:35
|
#7
|
elite*gold: 0
Join Date: Apr 2011
Posts: 11,118
Received Thanks: 2,435
|
Quote:
Originally Posted by Cc_Cc_Cc
Danke für die Funktion. So, problem besteht aber weiterhin. Obwohl ein Datensatz existiert sagt er mir das es keine gibt.
|
Nutzt du eigentlich eine vernünftige IDE oder nur Notepad o.ä. ?Eine normale Entwicklungsumgebung hätte dir den Fehler schon angezeigt...
PHP Code:
if(count($row) === 0) { exit("Keine Datensätze gefunden."); } [...] $row = $stmt->fetch(PDO::FETCH_ASSOC);
Die Variable $row gibt es erst viel später? ^^
|
|
|
All times are GMT +2. The time now is 05:18.
|
|